This commit is contained in:
jfrijters 2003-01-07 14:53:17 +00:00
Родитель a37a90658f
Коммит 93c9d4d30e
1 изменённых файлов: 16 добавлений и 1 удалений

Просмотреть файл

@ -221,6 +221,7 @@ sealed class MethodDescriptor
abstract class TypeWrapper
{
private static TypeWrapper java_lang_Object;
private ClassLoaderWrapper classLoader;
private string name; // java name (e.g. java/lang/Object)
private Modifiers modifiers;
@ -535,6 +536,10 @@ abstract class TypeWrapper
public bool IsSubTypeOf(TypeWrapper baseType)
{
// make sure IsSubTypeOf isn't used on primitives
Debug.Assert(!this.IsPrimitive);
Debug.Assert(!baseType.IsPrimitive);
if(baseType.IsInterface)
{
if(baseType == this)
@ -543,6 +548,16 @@ abstract class TypeWrapper
}
return ImplementsInterface(baseType);
}
if(java_lang_Object == null)
{
// TODO cache java.lang.Object somewhere else
java_lang_Object = ClassLoaderWrapper.GetBootstrapClassLoader().LoadClassBySlashedName("java/lang/Object");
}
// NOTE this isn't just an optimization, it is also required when this is an interface
if(baseType == java_lang_Object)
{
return true;
}
TypeWrapper subType = this;
while(subType != baseType)
{
@ -561,7 +576,7 @@ abstract class TypeWrapper
{
return true;
}
if(wrapper.IsPrimitive)
if(this.IsPrimitive || wrapper.IsPrimitive)
{
return false;
}