зеркало из https://github.com/mono/ikvm-fork.git
More object -> java.lang.Class updates.
This commit is contained in:
Родитель
40dcf95916
Коммит
1dc4ffa32b
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче