More object -> java.lang.Class updates.

This commit is contained in:
jfrijters 2010-05-27 10:54:34 +00:00
Родитель 40dcf95916
Коммит 1dc4ffa32b
4 изменённых файлов: 35 добавлений и 35 удалений

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

@ -1492,14 +1492,14 @@ namespace IKVM.Runtime
internal static jclass GetSuperclass(JNIEnv* pEnv, jclass sub) internal static jclass GetSuperclass(JNIEnv* pEnv, jclass sub)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(sub)).BaseTypeWrapper; TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(sub)).BaseTypeWrapper;
return pEnv->MakeLocalRef(wrapper == null ? null : wrapper.ClassObject); return pEnv->MakeLocalRef(wrapper == null ? null : wrapper.ClassObject);
} }
internal static jboolean IsAssignableFrom(JNIEnv* pEnv, jclass sub, jclass super) internal static jboolean IsAssignableFrom(JNIEnv* pEnv, jclass sub, jclass super)
{ {
TypeWrapper w1 = TypeWrapper.FromClass(pEnv->UnwrapRef(sub)); TypeWrapper w1 = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(sub));
TypeWrapper w2 = TypeWrapper.FromClass(pEnv->UnwrapRef(super)); TypeWrapper w2 = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(super));
return w1.IsAssignableTo(w2) ? JNI_TRUE : JNI_FALSE; return w1.IsAssignableTo(w2) ? JNI_TRUE : JNI_FALSE;
} }
@ -1524,7 +1524,7 @@ namespace IKVM.Runtime
internal static jint ThrowNew(JNIEnv* pEnv, jclass clazz, byte* msg) internal static jint ThrowNew(JNIEnv* pEnv, jclass clazz, byte* msg)
{ {
ManagedJNIEnv env = pEnv->GetManagedJNIEnv(); ManagedJNIEnv env = pEnv->GetManagedJNIEnv();
TypeWrapper wrapper = TypeWrapper.FromClass(UnwrapRef(env, clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)UnwrapRef(env, clazz));
MethodWrapper mw = wrapper.GetMethodWrapper("<init>", "(Ljava.lang.String;)V", false); MethodWrapper mw = wrapper.GetMethodWrapper("<init>", "(Ljava.lang.String;)V", false);
if(mw != null) if(mw != null)
{ {
@ -1667,7 +1667,7 @@ namespace IKVM.Runtime
internal static jobject AllocObject(JNIEnv* pEnv, jclass clazz) internal static jobject AllocObject(JNIEnv* pEnv, jclass clazz)
{ {
return AllocObjectImpl(pEnv, TypeWrapper.FromClass(pEnv->UnwrapRef(clazz))); return AllocObjectImpl(pEnv, TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz)));
} }
private static jobject AllocObjectImpl(JNIEnv* pEnv, TypeWrapper wrapper) private static jobject AllocObjectImpl(JNIEnv* pEnv, TypeWrapper wrapper)
@ -1763,7 +1763,7 @@ namespace IKVM.Runtime
internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args) internal static jobject NewObjectA(JNIEnv* pEnv, jclass clazz, jmethodID methodID, jvalue *args)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
if(!wrapper.IsAbstract && wrapper.TypeAsBaseType.IsAbstract) if(!wrapper.IsAbstract && wrapper.TypeAsBaseType.IsAbstract)
{ {
// static newinstance helper method // static newinstance helper method
@ -1791,8 +1791,8 @@ namespace IKVM.Runtime
{ {
// NOTE if clazz is an interface, this is still the right thing to do // NOTE if clazz is an interface, this is still the right thing to do
// (i.e. if the object implements the interface, we return true) // (i.e. if the object implements the interface, we return true)
object objClass = IKVM.NativeCode.ikvm.runtime.Util.getClassFromObject(pEnv->UnwrapRef(obj)); java.lang.Class objClass = IKVM.NativeCode.ikvm.runtime.Util.getClassFromObject(pEnv->UnwrapRef(obj));
TypeWrapper w1 = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper w1 = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
TypeWrapper w2 = TypeWrapper.FromClass(objClass); TypeWrapper w2 = TypeWrapper.FromClass(objClass);
return w2.IsAssignableTo(w1) ? JNI_TRUE : JNI_FALSE; return w2.IsAssignableTo(w1) ? JNI_TRUE : JNI_FALSE;
} }
@ -1857,7 +1857,7 @@ namespace IKVM.Runtime
{ {
try try
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
wrapper.Finish(); wrapper.Finish();
// if name == NULL, the JDK returns the constructor // if name == NULL, the JDK returns the constructor
string methodname = (IntPtr)name == IntPtr.Zero ? "<init>" : StringFromUTF8(name); string methodname = (IntPtr)name == IntPtr.Zero ? "<init>" : StringFromUTF8(name);
@ -2104,7 +2104,7 @@ namespace IKVM.Runtime
{ {
try try
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
wrapper.Finish(); wrapper.Finish();
string fieldsig = StringFromUTF8(sig); string fieldsig = StringFromUTF8(sig);
// don't allow dotted names! // don't allow dotted names!
@ -2504,7 +2504,7 @@ namespace IKVM.Runtime
try try
{ {
// we want to support (non-primitive) value types so we can't cast to object[] // we want to support (non-primitive) value types so we can't cast to object[]
Array array = Array.CreateInstance(TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)).TypeAsArrayType, len); Array array = Array.CreateInstance(TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz)).TypeAsArrayType, len);
object o = pEnv->UnwrapRef(init); object o = pEnv->UnwrapRef(init);
if(o != null) if(o != null)
{ {
@ -3106,7 +3106,7 @@ namespace IKVM.Runtime
{ {
try try
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
wrapper.Finish(); wrapper.Finish();
for(int i = 0; i < nMethods; i++) for(int i = 0; i < nMethods; i++)
{ {
@ -3146,7 +3146,7 @@ namespace IKVM.Runtime
{ {
try try
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(pEnv->UnwrapRef(clazz)); TypeWrapper wrapper = TypeWrapper.FromClass((java.lang.Class)pEnv->UnwrapRef(clazz));
wrapper.Finish(); wrapper.Finish();
// TODO this won't work when we're putting the JNI methods in jniproxy.dll // TODO this won't work when we're putting the JNI methods in jniproxy.dll
foreach(FieldInfo fi in wrapper.TypeAsTBD.GetFields(BindingFlags.Static | BindingFlags.NonPublic)) foreach(FieldInfo fi in wrapper.TypeAsTBD.GetFields(BindingFlags.Static | BindingFlags.NonPublic))

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

@ -1863,12 +1863,11 @@ namespace IKVM.Internal
} }
#endif #endif
internal static TypeWrapper FromClass(object classObject) internal static TypeWrapper FromClass(java.lang.Class clazz)
{ {
#if FIRST_PASS #if FIRST_PASS
return null; return null;
#else #else
java.lang.Class clazz = (java.lang.Class)classObject;
// MONOBUG redundant cast to workaround mcs bug // MONOBUG redundant cast to workaround mcs bug
TypeWrapper tw = (TypeWrapper)(object)clazz.typeWrapper; TypeWrapper tw = (TypeWrapper)(object)clazz.typeWrapper;
if(tw == null) if(tw == null)
@ -1877,7 +1876,7 @@ namespace IKVM.Internal
if (type == null) if (type == null)
{ {
ResolvePrimitiveTypeWrapperClasses(); ResolvePrimitiveTypeWrapperClasses();
return FromClass(classObject); return FromClass(clazz);
} }
if (type == typeof(void) || type.IsPrimitive || ClassLoaderWrapper.IsRemappedType(type)) if (type == typeof(void) || type.IsPrimitive || ClassLoaderWrapper.IsRemappedType(type))
{ {

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

@ -28,6 +28,7 @@ using IKVM.Attributes;
using IKVM.Runtime; using IKVM.Runtime;
using IKVM.Internal; using IKVM.Internal;
using AssemblyClassLoader_ = IKVM.Internal.AssemblyClassLoader; using AssemblyClassLoader_ = IKVM.Internal.AssemblyClassLoader;
using jlClass = java.lang.Class;
#if !FIRST_PASS #if !FIRST_PASS
using NegativeArraySizeException = java.lang.NegativeArraySizeException; using NegativeArraySizeException = java.lang.NegativeArraySizeException;
using IllegalArgumentException = java.lang.IllegalArgumentException; using IllegalArgumentException = java.lang.IllegalArgumentException;
@ -129,7 +130,7 @@ namespace IKVM.NativeCode.ikvm.@internal
{ {
static class StubGenerator static class StubGenerator
{ {
public static string getAssemblyName(object c) public static string getAssemblyName(jlClass c)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(c); TypeWrapper wrapper = TypeWrapper.FromClass(c);
ClassLoaderWrapper loader = wrapper.GetClassLoader(); ClassLoaderWrapper loader = wrapper.GetClassLoader();
@ -172,7 +173,7 @@ namespace IKVM.NativeCode.ikvm.@internal
return mb != null && mb.IsDefined(typeof(ObsoleteAttribute), false); return mb != null && mb.IsDefined(typeof(ObsoleteAttribute), false);
} }
public static bool isClassDeprecated(object clazz) public static bool isClassDeprecated(jlClass clazz)
{ {
Type type = TypeWrapper.FromClass(clazz).TypeAsTBD; Type type = TypeWrapper.FromClass(clazz).TypeAsTBD;
// we need to check type for null, because ReflectionOnly // we need to check type for null, because ReflectionOnly
@ -244,14 +245,14 @@ namespace IKVM.NativeCode.ikvm.runtime
return assemblies; return assemblies;
} }
public static Assembly GetAssemblyFromClass(object clazz) public static Assembly GetAssemblyFromClass(jlClass clazz)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(clazz); TypeWrapper wrapper = TypeWrapper.FromClass(clazz);
AssemblyClassLoader_ acl = wrapper.GetClassLoader() as AssemblyClassLoader_; AssemblyClassLoader_ acl = wrapper.GetClassLoader() as AssemblyClassLoader_;
return acl != null ? acl.GetAssembly(wrapper) : null; return acl != null ? acl.GetAssembly(wrapper) : null;
} }
public static bool IsDynamic(object clazz) public static bool IsDynamic(jlClass clazz)
{ {
return TypeWrapper.FromClass(clazz) is DynamicTypeWrapper; return TypeWrapper.FromClass(clazz) is DynamicTypeWrapper;
} }
@ -326,7 +327,7 @@ namespace IKVM.NativeCode.ikvm.runtime
static class Util static class Util
{ {
public static object getClassFromObject(object o) public static jlClass getClassFromObject(object o)
{ {
return GetTypeWrapperFromObject(o).ClassObject; return GetTypeWrapperFromObject(o).ClassObject;
} }
@ -357,7 +358,7 @@ namespace IKVM.NativeCode.ikvm.runtime
} }
} }
public static object getClassFromTypeHandle(RuntimeTypeHandle handle) public static jlClass getClassFromTypeHandle(RuntimeTypeHandle handle)
{ {
Type t = Type.GetTypeFromHandle(handle); Type t = Type.GetTypeFromHandle(handle);
if(t.IsPrimitive || ClassLoaderWrapper.IsRemappedType(t) || t == typeof(void)) if(t.IsPrimitive || ClassLoaderWrapper.IsRemappedType(t) || t == typeof(void))
@ -376,7 +377,7 @@ namespace IKVM.NativeCode.ikvm.runtime
return null; return null;
} }
public static object getFriendlyClassFromType(Type type) public static jlClass getFriendlyClassFromType(Type type)
{ {
int rank = 0; int rank = 0;
while(ReflectUtil.IsVector(type)) while(ReflectUtil.IsVector(type))
@ -427,7 +428,7 @@ namespace IKVM.NativeCode.ikvm.runtime
return true; return true;
} }
public static Type getInstanceTypeFromClass(object clazz) public static Type getInstanceTypeFromClass(jlClass clazz)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(clazz); TypeWrapper wrapper = TypeWrapper.FromClass(clazz);
if(wrapper.IsRemapped && wrapper.IsFinal) if(wrapper.IsRemapped && wrapper.IsFinal)

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

@ -1781,12 +1781,12 @@ namespace IKVM.NativeCode.java
{ {
} }
public static object newArray(object componentType, int length) public static object newArray(jlClass componentType, int length)
{ {
return null; return null;
} }
public static object multiNewArray(object componentType, int[] dimensions) public static object multiNewArray(jlClass componentType, int[] dimensions)
{ {
return null; return null;
} }
@ -2249,7 +2249,7 @@ namespace IKVM.NativeCode.java
} }
} }
public static object newArray(object componentType, int length) public static object newArray(jlClass componentType, int length)
{ {
if (componentType == null) if (componentType == null)
{ {
@ -2286,7 +2286,7 @@ namespace IKVM.NativeCode.java
} }
} }
public static object multiNewArray(object componentType, int[] dimensions) public static object multiNewArray(jlClass componentType, int[] dimensions)
{ {
if (componentType == null || dimensions == null) if (componentType == null || dimensions == null)
{ {
@ -2855,7 +2855,7 @@ namespace IKVM.NativeCode.java
#endif #endif
} }
public static bool desiredAssertionStatus0(object clazz) public static bool desiredAssertionStatus0(jlClass clazz)
{ {
return IKVM.Runtime.Assertions.IsEnabled(TypeWrapper.FromClass(clazz)); return IKVM.Runtime.Assertions.IsEnabled(TypeWrapper.FromClass(clazz));
} }
@ -3195,7 +3195,7 @@ namespace IKVM.NativeCode.java
public static object currentClassLoader0(object thisSecurityManager) public static object currentClassLoader0(object thisSecurityManager)
{ {
object currentClass = currentLoadedClass0(thisSecurityManager); jlClass currentClass = currentLoadedClass0(thisSecurityManager);
if (currentClass != null) if (currentClass != null)
{ {
return TypeWrapper.FromClass(currentClass).GetClassLoader().GetJavaClassLoader(); return TypeWrapper.FromClass(currentClass).GetClassLoader().GetJavaClassLoader();
@ -3213,7 +3213,7 @@ namespace IKVM.NativeCode.java
throw new NotImplementedException(); throw new NotImplementedException();
} }
public static object currentLoadedClass0(object thisSecurityManager) public static jlClass currentLoadedClass0(object thisSecurityManager)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -5730,7 +5730,7 @@ namespace IKVM.NativeCode.sun.misc
throw x; throw x;
} }
public static void ensureClassInitialized(object thisUnsafe, object clazz) public static void ensureClassInitialized(object thisUnsafe, jlClass clazz)
{ {
TypeWrapper tw = TypeWrapper.FromClass(clazz); TypeWrapper tw = TypeWrapper.FromClass(clazz);
if (!tw.IsArray) if (!tw.IsArray)
@ -5748,7 +5748,7 @@ namespace IKVM.NativeCode.sun.misc
} }
[System.Security.SecurityCritical] [System.Security.SecurityCritical]
public static object allocateInstance(object thisUnsafe, object clazz) public static object allocateInstance(object thisUnsafe, jlClass clazz)
{ {
TypeWrapper wrapper = TypeWrapper.FromClass(clazz); TypeWrapper wrapper = TypeWrapper.FromClass(clazz);
try try
@ -5944,12 +5944,12 @@ namespace IKVM.NativeCode.sun.reflect
#endif #endif
} }
public static int getClassAccessFlags(object clazz) public static int getClassAccessFlags(jlClass clazz)
{ {
return (int)TypeWrapper.FromClass(clazz).Modifiers; return (int)TypeWrapper.FromClass(clazz).Modifiers;
} }
public static bool checkInternalAccess(object currentClass, object memberClass) public static bool checkInternalAccess(jlClass currentClass, jlClass memberClass)
{ {
TypeWrapper current = TypeWrapper.FromClass(currentClass); TypeWrapper current = TypeWrapper.FromClass(currentClass);
TypeWrapper member = TypeWrapper.FromClass(memberClass); TypeWrapper member = TypeWrapper.FromClass(memberClass);