Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/openjdk/sun.reflect.cs')
-rw-r--r--runtime/openjdk/sun.reflect.cs2293
1 files changed, 0 insertions, 2293 deletions
diff --git a/runtime/openjdk/sun.reflect.cs b/runtime/openjdk/sun.reflect.cs
deleted file mode 100644
index a80d4f37..00000000
--- a/runtime/openjdk/sun.reflect.cs
+++ /dev/null
@@ -1,2293 +0,0 @@
-/*
- Copyright (C) 2007-2013 Jeroen Frijters
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jeroen Frijters
- jeroen@frijters.net
-
-*/
-using System;
-using System.Diagnostics;
-using System.Collections.Generic;
-using System.Reflection;
-#if !NO_REF_EMIT
-using System.Reflection.Emit;
-#endif
-using System.Runtime.CompilerServices;
-using System.Runtime.Serialization;
-using System.Security;
-using IKVM.Internal;
-
-namespace IKVM.Internal
-{
-#if !FIRST_PASS
- public interface IReflectionException
- {
- java.lang.IllegalArgumentException GetIllegalArgumentException(object obj);
- java.lang.IllegalArgumentException SetIllegalArgumentException(object obj);
- }
-#endif
-
- sealed class State
- {
- internal int Value;
- }
-}
-
-static class Java_sun_reflect_Reflection
-{
-#if CLASSGC
- private static readonly ConditionalWeakTable<MethodBase, State> isHideFromJavaCache = new ConditionalWeakTable<MethodBase, State>();
-
- internal static bool IsHideFromJava(MethodBase mb)
- {
- State state = isHideFromJavaCache.GetValue(mb, delegate { return new State(); });
- if (state.Value == 0)
- {
- state.Value = IsHideFromJavaImpl(mb);
- }
- return state.Value == 1;
- }
-
- private static int IsHideFromJavaImpl(MethodBase mb)
- {
- if (mb.Name.StartsWith("__<", StringComparison.Ordinal))
- {
- return 1;
- }
- if (mb.IsDefined(typeof(IKVM.Attributes.HideFromJavaAttribute), false) || mb.IsDefined(typeof(IKVM.Attributes.HideFromReflectionAttribute), false))
- {
- return 1;
- }
- return 2;
- }
-#else
- private static readonly Dictionary<RuntimeMethodHandle, bool> isHideFromJavaCache = new Dictionary<RuntimeMethodHandle, bool>();
-
- internal static bool IsHideFromJava(MethodBase mb)
- {
- if (mb.Name.StartsWith("__<", StringComparison.Ordinal))
- {
- return true;
- }
- RuntimeMethodHandle handle;
- try
- {
- handle = mb.MethodHandle;
- }
- catch (InvalidOperationException)
- {
- // DynamicMethods don't have a RuntimeMethodHandle and we always want to hide them anyway
- return true;
- }
- catch (NotSupportedException)
- {
- // DynamicMethods don't have a RuntimeMethodHandle and we always want to hide them anyway
- return true;
- }
- lock (isHideFromJavaCache)
- {
- bool cached;
- if (isHideFromJavaCache.TryGetValue(handle, out cached))
- {
- return cached;
- }
- }
- bool isHide = mb.IsDefined(typeof(IKVM.Attributes.HideFromJavaAttribute), false) || mb.IsDefined(typeof(IKVM.Attributes.HideFromReflectionAttribute), false);
- lock (isHideFromJavaCache)
- {
- isHideFromJavaCache[handle] = isHide;
- }
- return isHide;
- }
-#endif
-
- // NOTE this method is hooked up explicitly through map.xml to prevent inlining of the native stub
- // and tail-call optimization in the native stub.
- public static object getCallerClass(int realFramesToSkip)
- {
-#if FIRST_PASS
- return null;
-#else
- int i = 3;
- if (realFramesToSkip <= 1)
- {
- i = 1;
- realFramesToSkip = Math.Max(realFramesToSkip + 2, 2);
- }
- realFramesToSkip--;
- for (; ; )
- {
- MethodBase method = new StackFrame(i++, false).GetMethod();
- if (method == null)
- {
- return null;
- }
- Type type = method.DeclaringType;
- // NOTE these checks should be the same as the ones in SecurityManager.getClassContext
- if (IsHideFromJava(method)
- || type == null
- || type.Assembly == typeof(object).Assembly
- || type.Assembly == typeof(Java_sun_reflect_Reflection).Assembly
- || type.Assembly == Java_java_lang_SecurityManager.jniAssembly
- || type == typeof(java.lang.reflect.Method)
- || type == typeof(java.lang.reflect.Constructor))
- {
- continue;
- }
- if (--realFramesToSkip == 0)
- {
- return ClassLoaderWrapper.GetWrapperFromType(type).ClassObject;
- }
- }
-#endif
- }
-
- public static int getClassAccessFlags(java.lang.Class clazz)
- {
- // the mask comes from JVM_RECOGNIZED_CLASS_MODIFIERS in src/hotspot/share/vm/prims/jvm.h
- int mods = (int)TypeWrapper.FromClass(clazz).Modifiers & 0x7631;
- // interface implies abstract
- mods |= (mods & 0x0200) << 1;
- return mods;
- }
-
- public static bool checkInternalAccess(java.lang.Class currentClass, java.lang.Class memberClass)
- {
- TypeWrapper current = TypeWrapper.FromClass(currentClass);
- TypeWrapper member = TypeWrapper.FromClass(memberClass);
- return member.IsInternal && member.InternalsVisibleTo(current);
- }
-}
-
-static class Java_sun_reflect_ReflectionFactory
-{
-#if !FIRST_PASS
- private static object ConvertPrimitive(TypeWrapper tw, object value)
- {
- if (tw == PrimitiveTypeWrapper.BOOLEAN)
- {
- if (value is java.lang.Boolean)
- {
- return ((java.lang.Boolean)value).booleanValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.BYTE)
- {
- if (value is java.lang.Byte)
- {
- return ((java.lang.Byte)value).byteValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.CHAR)
- {
- if (value is java.lang.Character)
- {
- return ((java.lang.Character)value).charValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.SHORT)
- {
- if (value is java.lang.Short || value is java.lang.Byte)
- {
- return ((java.lang.Number)value).shortValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.INT)
- {
- if (value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte)
- {
- return ((java.lang.Number)value).intValue();
- }
- else if (value is java.lang.Character)
- {
- return (int)((java.lang.Character)value).charValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.LONG)
- {
- if (value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte)
- {
- return ((java.lang.Number)value).longValue();
- }
- else if (value is java.lang.Character)
- {
- return (long)((java.lang.Character)value).charValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.FLOAT)
- {
- if (value is java.lang.Float || value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte)
- {
- return ((java.lang.Number)value).floatValue();
- }
- else if (value is java.lang.Character)
- {
- return (float)((java.lang.Character)value).charValue();
- }
- }
- else if (tw == PrimitiveTypeWrapper.DOUBLE)
- {
- if (value is java.lang.Double || value is java.lang.Float || value is java.lang.Long || value is java.lang.Integer || value is java.lang.Short || value is java.lang.Byte)
- {
- return ((java.lang.Number)value).doubleValue();
- }
- else if (value is java.lang.Character)
- {
- return (double)((java.lang.Character)value).charValue();
- }
- }
- throw new java.lang.IllegalArgumentException();
- }
-
- private static object[] ConvertArgs(ClassLoaderWrapper loader, TypeWrapper[] argumentTypes, object[] args)
- {
- object[] nargs = new object[args == null ? 0 : args.Length];
- if (nargs.Length != argumentTypes.Length)
- {
- throw new java.lang.IllegalArgumentException("wrong number of arguments");
- }
- for (int i = 0; i < nargs.Length; i++)
- {
- if (argumentTypes[i].IsPrimitive)
- {
- nargs[i] = ConvertPrimitive(argumentTypes[i], args[i]);
- }
- else
- {
- if (args[i] != null && !argumentTypes[i].EnsureLoadable(loader).IsInstance(args[i]))
- {
- throw new java.lang.IllegalArgumentException();
- }
- nargs[i] = argumentTypes[i].GhostWrap(args[i]);
- }
- }
- return nargs;
- }
-
- private sealed class MethodAccessorImpl : sun.reflect.MethodAccessor
- {
- private readonly MethodWrapper mw;
-
- internal MethodAccessorImpl(MethodWrapper mw)
- {
- this.mw = mw;
- mw.Link();
- mw.ResolveMethod();
- }
-
- [IKVM.Attributes.HideFromJava]
- public object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID)
- {
- if (!mw.IsStatic && !mw.DeclaringType.IsInstance(obj))
- {
- if (obj == null)
- {
- throw new java.lang.NullPointerException();
- }
- throw new java.lang.IllegalArgumentException("object is not an instance of declaring class");
- }
- args = ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args);
- // if the method is an interface method, we must explicitly run <clinit>,
- // because .NET reflection doesn't
- if (mw.DeclaringType.IsInterface)
- {
- mw.DeclaringType.RunClassInit();
- }
- if (mw.HasCallerID)
- {
- args = ArrayUtil.Concat(args, callerID);
- }
- object retval;
- try
- {
- retval = mw.Invoke(obj, args);
- }
- catch (Exception x)
- {
- throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x));
- }
- if (mw.ReturnType.IsPrimitive && mw.ReturnType != PrimitiveTypeWrapper.VOID)
- {
- retval = JVM.Box(retval);
- }
- else
- {
- retval = mw.ReturnType.GhostUnwrap(retval);
- }
- return retval;
- }
- }
-
- private sealed class ConstructorAccessorImpl : sun.reflect.ConstructorAccessor
- {
- private readonly MethodWrapper mw;
-
- internal ConstructorAccessorImpl(MethodWrapper mw)
- {
- this.mw = mw;
- mw.Link();
- mw.ResolveMethod();
- }
-
- [IKVM.Attributes.HideFromJava]
- public object newInstance(object[] args)
- {
- args = ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args);
- try
- {
- return mw.CreateInstance(args);
- }
- catch (Exception x)
- {
- throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x));
- }
- }
- }
-
- private sealed class SerializationConstructorAccessorImpl : sun.reflect.ConstructorAccessor
- {
- private readonly MethodWrapper mw;
- private readonly Type type;
-
- internal SerializationConstructorAccessorImpl(java.lang.reflect.Constructor constructorToCall, java.lang.Class classToInstantiate)
- {
- this.type = TypeWrapper.FromClass(classToInstantiate).TypeAsBaseType;
- MethodWrapper mw = MethodWrapper.FromConstructor(constructorToCall);
- if (mw.DeclaringType != CoreClasses.java.lang.Object.Wrapper)
- {
- this.mw = mw;
- mw.Link();
- mw.ResolveMethod();
- }
- }
-
- [IKVM.Attributes.HideFromJava]
- [SecuritySafeCritical]
- public object newInstance(object[] args)
- {
- object obj = FormatterServices.GetUninitializedObject(type);
- if (mw != null)
- {
- mw.Invoke(obj, ConvertArgs(mw.DeclaringType.GetClassLoader(), mw.GetParameters(), args));
- }
- return obj;
- }
- }
-
-#if !NO_REF_EMIT
- private sealed class BoxUtil
- {
- private static readonly MethodInfo valueOfByte = typeof(java.lang.Byte).GetMethod("valueOf", new Type[] { typeof(byte) });
- private static readonly MethodInfo valueOfBoolean = typeof(java.lang.Boolean).GetMethod("valueOf", new Type[] { typeof(bool) });
- private static readonly MethodInfo valueOfChar = typeof(java.lang.Character).GetMethod("valueOf", new Type[] { typeof(char) });
- private static readonly MethodInfo valueOfShort = typeof(java.lang.Short).GetMethod("valueOf", new Type[] { typeof(short) });
- private static readonly MethodInfo valueOfInt = typeof(java.lang.Integer).GetMethod("valueOf", new Type[] { typeof(int) });
- private static readonly MethodInfo valueOfFloat = typeof(java.lang.Float).GetMethod("valueOf", new Type[] { typeof(float) });
- private static readonly MethodInfo valueOfLong = typeof(java.lang.Long).GetMethod("valueOf", new Type[] { typeof(long) });
- private static readonly MethodInfo valueOfDouble = typeof(java.lang.Double).GetMethod("valueOf", new Type[] { typeof(double) });
- private static readonly MethodInfo byteValue = typeof(java.lang.Byte).GetMethod("byteValue", Type.EmptyTypes);
- private static readonly MethodInfo booleanValue = typeof(java.lang.Boolean).GetMethod("booleanValue", Type.EmptyTypes);
- private static readonly MethodInfo charValue = typeof(java.lang.Character).GetMethod("charValue", Type.EmptyTypes);
- private static readonly MethodInfo shortValue = typeof(java.lang.Short).GetMethod("shortValue", Type.EmptyTypes);
- private static readonly MethodInfo intValue = typeof(java.lang.Integer).GetMethod("intValue", Type.EmptyTypes);
- private static readonly MethodInfo floatValue = typeof(java.lang.Float).GetMethod("floatValue", Type.EmptyTypes);
- private static readonly MethodInfo longValue = typeof(java.lang.Long).GetMethod("longValue", Type.EmptyTypes);
- private static readonly MethodInfo doubleValue = typeof(java.lang.Double).GetMethod("doubleValue", Type.EmptyTypes);
-
- internal static void EmitUnboxArg(CodeEmitter ilgen, TypeWrapper type)
- {
- if (type == PrimitiveTypeWrapper.BYTE)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Byte));
- ilgen.Emit(OpCodes.Call, byteValue);
- }
- else if (type == PrimitiveTypeWrapper.BOOLEAN)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Boolean));
- ilgen.Emit(OpCodes.Call, booleanValue);
- }
- else if (type == PrimitiveTypeWrapper.CHAR)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Character));
- ilgen.Emit(OpCodes.Call, charValue);
- }
- else if (type == PrimitiveTypeWrapper.SHORT
- || type == PrimitiveTypeWrapper.INT
- || type == PrimitiveTypeWrapper.FLOAT
- || type == PrimitiveTypeWrapper.LONG
- || type == PrimitiveTypeWrapper.DOUBLE)
- {
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Byte));
- CodeEmitterLabel next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Byte));
- ilgen.Emit(OpCodes.Call, byteValue);
- ilgen.Emit(OpCodes.Conv_I1);
- Expand(ilgen, type);
- CodeEmitterLabel done = ilgen.DefineLabel();
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- if (type == PrimitiveTypeWrapper.SHORT)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Short));
- ilgen.Emit(OpCodes.Call, shortValue);
- }
- else
- {
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Short));
- next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Short));
- ilgen.Emit(OpCodes.Call, shortValue);
- Expand(ilgen, type);
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Character));
- next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Character));
- ilgen.Emit(OpCodes.Call, charValue);
- Expand(ilgen, type);
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- if (type == PrimitiveTypeWrapper.INT)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Integer));
- ilgen.Emit(OpCodes.Call, intValue);
- }
- else
- {
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Integer));
- next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Integer));
- ilgen.Emit(OpCodes.Call, intValue);
- Expand(ilgen, type);
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- if (type == PrimitiveTypeWrapper.LONG)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Long));
- ilgen.Emit(OpCodes.Call, longValue);
- }
- else
- {
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Long));
- next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Long));
- ilgen.Emit(OpCodes.Call, longValue);
- Expand(ilgen, type);
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- if (type == PrimitiveTypeWrapper.FLOAT)
- {
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Float));
- ilgen.Emit(OpCodes.Call, floatValue);
- }
- else if (type == PrimitiveTypeWrapper.DOUBLE)
- {
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.Float));
- next = ilgen.DefineLabel();
- ilgen.EmitBrfalse(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Float));
- ilgen.Emit(OpCodes.Call, floatValue);
- ilgen.EmitBr(done);
- ilgen.MarkLabel(next);
- ilgen.Emit(OpCodes.Castclass, typeof(java.lang.Double));
- ilgen.Emit(OpCodes.Call, doubleValue);
- }
- else
- {
- throw new InvalidOperationException();
- }
- }
- }
- }
- ilgen.MarkLabel(done);
- }
- else
- {
- type.EmitCheckcast(ilgen);
- }
- }
-
- internal static void BoxReturnValue(CodeEmitter ilgen, TypeWrapper type)
- {
- if (type == PrimitiveTypeWrapper.VOID)
- {
- ilgen.Emit(OpCodes.Ldnull);
- }
- else if (type == PrimitiveTypeWrapper.BYTE)
- {
- ilgen.Emit(OpCodes.Call, valueOfByte);
- }
- else if (type == PrimitiveTypeWrapper.BOOLEAN)
- {
- ilgen.Emit(OpCodes.Call, valueOfBoolean);
- }
- else if (type == PrimitiveTypeWrapper.CHAR)
- {
- ilgen.Emit(OpCodes.Call, valueOfChar);
- }
- else if (type == PrimitiveTypeWrapper.SHORT)
- {
- ilgen.Emit(OpCodes.Call, valueOfShort);
- }
- else if (type == PrimitiveTypeWrapper.INT)
- {
- ilgen.Emit(OpCodes.Call, valueOfInt);
- }
- else if (type == PrimitiveTypeWrapper.FLOAT)
- {
- ilgen.Emit(OpCodes.Call, valueOfFloat);
- }
- else if (type == PrimitiveTypeWrapper.LONG)
- {
- ilgen.Emit(OpCodes.Call, valueOfLong);
- }
- else if (type == PrimitiveTypeWrapper.DOUBLE)
- {
- ilgen.Emit(OpCodes.Call, valueOfDouble);
- }
- }
-
- private static void Expand(CodeEmitter ilgen, TypeWrapper type)
- {
- if (type == PrimitiveTypeWrapper.FLOAT)
- {
- ilgen.Emit(OpCodes.Conv_R4);
- }
- else if (type == PrimitiveTypeWrapper.LONG)
- {
- ilgen.Emit(OpCodes.Conv_I8);
- }
- else if (type == PrimitiveTypeWrapper.DOUBLE)
- {
- ilgen.Emit(OpCodes.Conv_R8);
- }
- }
- }
-
- private sealed class FastMethodAccessorImpl : sun.reflect.MethodAccessor
- {
- internal static readonly ConstructorInfo invocationTargetExceptionCtor;
- internal static readonly ConstructorInfo illegalArgumentExceptionCtor;
- internal static readonly MethodInfo get_TargetSite;
- internal static readonly MethodInfo GetCurrentMethod;
-
- private delegate object Invoker(object obj, object[] args, ikvm.@internal.CallerID callerID);
- private Invoker invoker;
-
- static FastMethodAccessorImpl()
- {
- invocationTargetExceptionCtor = typeof(java.lang.reflect.InvocationTargetException).GetConstructor(new Type[] { typeof(Exception) });
- illegalArgumentExceptionCtor = typeof(java.lang.IllegalArgumentException).GetConstructor(Type.EmptyTypes);
- get_TargetSite = typeof(Exception).GetMethod("get_TargetSite");
- GetCurrentMethod = typeof(MethodBase).GetMethod("GetCurrentMethod");
- }
-
- private sealed class RunClassInit
- {
- private FastMethodAccessorImpl outer;
- private TypeWrapper tw;
- private Invoker invoker;
-
- internal RunClassInit(FastMethodAccessorImpl outer, TypeWrapper tw, Invoker invoker)
- {
- this.outer = outer;
- this.tw = tw;
- this.invoker = invoker;
- }
-
- [IKVM.Attributes.HideFromJava]
- internal object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID)
- {
- // FXBUG pre-SP1 a DynamicMethod that calls a static method doesn't trigger the cctor, so we do that explicitly.
- // even on .NET 2.0 SP2, interface method invocations don't run the interface cctor
- // NOTE when testing, please test both the x86 and x64 CLR JIT, because they have different bugs (even on .NET 2.0 SP2)
- tw.RunClassInit();
- outer.invoker = invoker;
- return invoker(obj, args, callerID);
- }
- }
-
- internal FastMethodAccessorImpl(MethodWrapper mw)
- {
- TypeWrapper[] parameters;
- try
- {
- mw.DeclaringType.Finish();
- parameters = mw.GetParameters();
- for (int i = 0; i < parameters.Length; i++)
- {
- // the EnsureLoadable shouldn't fail, because we don't allow a java.lang.reflect.Method
- // to "escape" if it has an unloadable type in the signature
- parameters[i] = parameters[i].EnsureLoadable(mw.DeclaringType.GetClassLoader());
- parameters[i].Finish();
- }
- }
- catch (RetargetableJavaException x)
- {
- throw x.ToJava();
- }
- mw.ResolveMethod();
- DynamicMethod dm = DynamicMethodUtils.Create("__<Invoker>", mw.DeclaringType.TypeAsBaseType, !mw.IsPublic || !mw.DeclaringType.IsPublic, typeof(object), new Type[] { typeof(object), typeof(object[]), typeof(ikvm.@internal.CallerID) });
- CodeEmitter ilgen = CodeEmitter.Create(dm);
- CodeEmitterLocal ret = ilgen.DeclareLocal(typeof(object));
- if (!mw.IsStatic)
- {
- // check target for null
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.EmitNullCheck();
- }
-
- // check args length
- CodeEmitterLabel argsLengthOK = ilgen.DefineLabel();
- if (parameters.Length == 0)
- {
- // zero length array may be null
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.EmitBrfalse(argsLengthOK);
- }
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Ldlen);
- ilgen.EmitLdc_I4(parameters.Length);
- ilgen.EmitBeq(argsLengthOK);
- ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.MarkLabel(argsLengthOK);
-
- int thisCount = mw.IsStatic ? 0 : 1;
- CodeEmitterLocal[] args = new CodeEmitterLocal[parameters.Length + thisCount];
- if (!mw.IsStatic)
- {
- args[0] = ilgen.DeclareLocal(mw.DeclaringType.TypeAsSignatureType);
- }
- for (int i = thisCount; i < args.Length; i++)
- {
- args[i] = ilgen.DeclareLocal(parameters[i - thisCount].TypeAsSignatureType);
- }
- ilgen.BeginExceptionBlock();
- if (!mw.IsStatic)
- {
- ilgen.Emit(OpCodes.Ldarg_0);
- mw.DeclaringType.EmitCheckcast(ilgen);
- mw.DeclaringType.EmitConvStackTypeToSignatureType(ilgen, null);
- ilgen.Emit(OpCodes.Stloc, args[0]);
- }
- for (int i = thisCount; i < args.Length; i++)
- {
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.EmitLdc_I4(i - thisCount);
- ilgen.Emit(OpCodes.Ldelem_Ref);
- TypeWrapper tw = parameters[i - thisCount];
- BoxUtil.EmitUnboxArg(ilgen, tw);
- tw.EmitConvStackTypeToSignatureType(ilgen, null);
- ilgen.Emit(OpCodes.Stloc, args[i]);
- }
- CodeEmitterLabel label1 = ilgen.DefineLabel();
- ilgen.EmitLeave(label1);
- ilgen.BeginCatchBlock(typeof(InvalidCastException));
- ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.BeginCatchBlock(typeof(NullReferenceException));
- ilgen.Emit(OpCodes.Newobj, illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
-
- // this is the actual call
- ilgen.MarkLabel(label1);
- ilgen.BeginExceptionBlock();
- for (int i = 0; i < args.Length; i++)
- {
- if (i == 0 && !mw.IsStatic && (mw.DeclaringType.IsNonPrimitiveValueType || mw.DeclaringType.IsGhost))
- {
- ilgen.Emit(OpCodes.Ldloca, args[i]);
- }
- else
- {
- ilgen.Emit(OpCodes.Ldloc, args[i]);
- }
- }
- if (mw.HasCallerID)
- {
- ilgen.Emit(OpCodes.Ldarg_2);
- }
- if (mw.IsStatic)
- {
- mw.EmitCall(ilgen);
- }
- else
- {
- mw.EmitCallvirtReflect(ilgen);
- }
- mw.ReturnType.EmitConvSignatureTypeToStackType(ilgen);
- BoxUtil.BoxReturnValue(ilgen, mw.ReturnType);
- ilgen.Emit(OpCodes.Stloc, ret);
- CodeEmitterLabel label2 = ilgen.DefineLabel();
- ilgen.EmitLeave(label2);
- ilgen.BeginCatchBlock(typeof(Exception));
- CodeEmitterLabel label = ilgen.DefineLabel();
- CodeEmitterLabel labelWrap = ilgen.DefineLabel();
- // If the exception we caught is a java.lang.reflect.InvocationTargetException, we know it must be
- // wrapped, because .NET won't throw that exception and we also cannot check the target site,
- // because it may be the same as us if a method is recursively invoking itself.
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Isinst, typeof(java.lang.reflect.InvocationTargetException));
- ilgen.EmitBrtrue(labelWrap);
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Callvirt, get_TargetSite);
- ilgen.Emit(OpCodes.Call, GetCurrentMethod);
- ilgen.Emit(OpCodes.Ceq);
- ilgen.EmitBrtrue(label);
- ilgen.MarkLabel(labelWrap);
- ilgen.Emit(OpCodes.Ldc_I4_0);
- ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(Types.Exception));
- ilgen.Emit(OpCodes.Newobj, invocationTargetExceptionCtor);
- ilgen.MarkLabel(label);
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
-
- ilgen.MarkLabel(label2);
- ilgen.Emit(OpCodes.Ldloc, ret);
- ilgen.Emit(OpCodes.Ret);
- ilgen.DoEmit();
- invoker = (Invoker)dm.CreateDelegate(typeof(Invoker));
- if ((mw.IsStatic || mw.DeclaringType.IsInterface) && mw.DeclaringType.HasStaticInitializer)
- {
- invoker = new Invoker(new RunClassInit(this, mw.DeclaringType, invoker).invoke);
- }
- }
-
- [IKVM.Attributes.HideFromJava]
- public object invoke(object obj, object[] args, ikvm.@internal.CallerID callerID)
- {
- try
- {
- return invoker(obj, args, callerID);
- }
- catch (MethodAccessException x)
- {
- // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
- }
-
- private sealed class FastConstructorAccessorImpl : sun.reflect.ConstructorAccessor
- {
- private delegate object Invoker(object[] args);
- private Invoker invoker;
-
- internal FastConstructorAccessorImpl(java.lang.reflect.Constructor constructor)
- {
- MethodWrapper mw = MethodWrapper.FromConstructor(constructor);
- TypeWrapper[] parameters;
- try
- {
- mw.DeclaringType.Finish();
- parameters = mw.GetParameters();
- for (int i = 0; i < parameters.Length; i++)
- {
- // the EnsureLoadable shouldn't fail, because we don't allow a java.lang.reflect.Method
- // to "escape" if it has an unloadable type in the signature
- parameters[i] = parameters[i].EnsureLoadable(mw.DeclaringType.GetClassLoader());
- parameters[i].Finish();
- }
- }
- catch (RetargetableJavaException x)
- {
- throw x.ToJava();
- }
- mw.ResolveMethod();
- DynamicMethod dm = DynamicMethodUtils.Create("__<Invoker>", mw.DeclaringType.TypeAsTBD, !mw.IsPublic || !mw.DeclaringType.IsPublic, typeof(object), new Type[] { typeof(object[]) });
- CodeEmitter ilgen = CodeEmitter.Create(dm);
- CodeEmitterLocal ret = ilgen.DeclareLocal(typeof(object));
-
- // check args length
- CodeEmitterLabel argsLengthOK = ilgen.DefineLabel();
- if (parameters.Length == 0)
- {
- // zero length array may be null
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.EmitBrfalse(argsLengthOK);
- }
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.Emit(OpCodes.Ldlen);
- ilgen.EmitLdc_I4(parameters.Length);
- ilgen.EmitBeq(argsLengthOK);
- ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.MarkLabel(argsLengthOK);
-
- CodeEmitterLocal[] args = new CodeEmitterLocal[parameters.Length];
- for (int i = 0; i < args.Length; i++)
- {
- args[i] = ilgen.DeclareLocal(parameters[i].TypeAsSignatureType);
- }
- ilgen.BeginExceptionBlock();
- for (int i = 0; i < args.Length; i++)
- {
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.EmitLdc_I4(i);
- ilgen.Emit(OpCodes.Ldelem_Ref);
- TypeWrapper tw = parameters[i];
- BoxUtil.EmitUnboxArg(ilgen, tw);
- tw.EmitConvStackTypeToSignatureType(ilgen, null);
- ilgen.Emit(OpCodes.Stloc, args[i]);
- }
- CodeEmitterLabel label1 = ilgen.DefineLabel();
- ilgen.EmitLeave(label1);
- ilgen.BeginCatchBlock(typeof(InvalidCastException));
- ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.BeginCatchBlock(typeof(NullReferenceException));
- ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.illegalArgumentExceptionCtor);
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
-
- // this is the actual call
- ilgen.MarkLabel(label1);
- ilgen.BeginExceptionBlock();
- for (int i = 0; i < args.Length; i++)
- {
- ilgen.Emit(OpCodes.Ldloc, args[i]);
- }
- mw.EmitNewobj(ilgen);
- ilgen.Emit(OpCodes.Stloc, ret);
- CodeEmitterLabel label2 = ilgen.DefineLabel();
- ilgen.EmitLeave(label2);
- ilgen.BeginCatchBlock(typeof(Exception));
- ilgen.Emit(OpCodes.Dup);
- ilgen.Emit(OpCodes.Callvirt, FastMethodAccessorImpl.get_TargetSite);
- ilgen.Emit(OpCodes.Call, FastMethodAccessorImpl.GetCurrentMethod);
- ilgen.Emit(OpCodes.Ceq);
- CodeEmitterLabel label = ilgen.DefineLabel();
- ilgen.EmitBrtrue(label);
- ilgen.Emit(OpCodes.Ldc_I4_0);
- ilgen.Emit(OpCodes.Call, ByteCodeHelperMethods.mapException.MakeGenericMethod(Types.Exception));
- ilgen.Emit(OpCodes.Newobj, FastMethodAccessorImpl.invocationTargetExceptionCtor);
- ilgen.MarkLabel(label);
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
-
- ilgen.MarkLabel(label2);
- ilgen.Emit(OpCodes.Ldloc, ret);
- ilgen.Emit(OpCodes.Ret);
- ilgen.DoEmit();
- invoker = (Invoker)dm.CreateDelegate(typeof(Invoker));
- }
-
- [IKVM.Attributes.HideFromJava]
- public object newInstance(object[] args)
- {
- try
- {
- return invoker(args);
- }
- catch (MethodAccessException x)
- {
- // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
- }
-
- private sealed class FastSerializationConstructorAccessorImpl : sun.reflect.ConstructorAccessor
- {
- private static readonly MethodInfo GetTypeFromHandleMethod = typeof(Type).GetMethod("GetTypeFromHandle", new Type[] { typeof(RuntimeTypeHandle) });
- private static readonly MethodInfo GetUninitializedObjectMethod = typeof(FormatterServices).GetMethod("GetUninitializedObject", new Type[] { typeof(Type) });
- private delegate object InvokeCtor();
- private InvokeCtor invoker;
-
- internal FastSerializationConstructorAccessorImpl(java.lang.reflect.Constructor constructorToCall, java.lang.Class classToInstantiate)
- {
- MethodWrapper constructor = MethodWrapper.FromConstructor(constructorToCall);
- if (constructor.GetParameters().Length != 0)
- {
- throw new NotImplementedException("Serialization constructor cannot have parameters");
- }
- constructor.Link();
- constructor.ResolveMethod();
- Type type;
- try
- {
- TypeWrapper wrapper = TypeWrapper.FromClass(classToInstantiate);
- wrapper.Finish();
- type = wrapper.TypeAsBaseType;
- }
- catch (RetargetableJavaException x)
- {
- throw x.ToJava();
- }
- DynamicMethod dm = DynamicMethodUtils.Create("__<SerializationCtor>", constructor.DeclaringType.TypeAsBaseType, true, typeof(object), null);
- CodeEmitter ilgen = CodeEmitter.Create(dm);
- ilgen.Emit(OpCodes.Ldtoken, type);
- ilgen.Emit(OpCodes.Call, GetTypeFromHandleMethod);
- ilgen.Emit(OpCodes.Call, GetUninitializedObjectMethod);
- ilgen.Emit(OpCodes.Dup);
- constructor.EmitCall(ilgen);
- ilgen.Emit(OpCodes.Ret);
- ilgen.DoEmit();
- invoker = (InvokeCtor)dm.CreateDelegate(typeof(InvokeCtor));
- }
-
- [IKVM.Attributes.HideFromJava]
- public object newInstance(object[] args)
- {
- try
- {
- return invoker();
- }
- catch (MethodAccessException x)
- {
- // this can happen if we're calling a non-public method and the call stack doesn't have ReflectionPermission.MemberAccess
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
- }
-#endif // !NO_REF_EMIT
-
- sealed class ActivatorConstructorAccessor : sun.reflect.ConstructorAccessor
- {
- private readonly Type type;
-
- internal ActivatorConstructorAccessor(MethodWrapper mw)
- {
- this.type = mw.DeclaringType.TypeAsBaseType;
- }
-
- public object newInstance(object[] objarr)
- {
- if (objarr != null && objarr.Length != 0)
- {
- throw new java.lang.IllegalArgumentException();
- }
- try
- {
- return Activator.CreateInstance(type);
- }
- catch (TargetInvocationException x)
- {
- throw new java.lang.reflect.InvocationTargetException(ikvm.runtime.Util.mapException(x.InnerException));
- }
- }
-
- internal static bool IsSuitable(MethodWrapper mw)
- {
- MethodBase mb = mw.GetMethod();
- return mb != null
- && mb.IsConstructor
- && mb.IsPublic
- && mb.DeclaringType.IsPublic
- && mb.DeclaringType == mw.DeclaringType.TypeAsBaseType
- && mb.GetParameters().Length == 0;
- }
- }
-
- private abstract class FieldAccessorImplBase : sun.reflect.FieldAccessor, IReflectionException
- {
- protected static readonly ushort inflationThreshold = 15;
- protected readonly FieldWrapper fw;
- protected readonly bool isFinal;
- protected ushort numInvocations;
-
- static FieldAccessorImplBase()
- {
- string str = java.lang.Props.props.getProperty("ikvm.reflect.field.inflationThreshold");
- int value;
- if (str != null && int.TryParse(str, out value))
- {
- if (value >= ushort.MinValue && value <= ushort.MaxValue)
- {
- inflationThreshold = (ushort)value;
- }
- }
- }
-
- private FieldAccessorImplBase(FieldWrapper fw, bool overrideAccessCheck)
- {
- this.fw = fw;
- isFinal = (!overrideAccessCheck || fw.IsStatic) && fw.IsFinal;
- }
-
- private string GetQualifiedFieldName()
- {
- return fw.DeclaringType.Name + "." + fw.Name;
- }
-
- private string GetFieldTypeName()
- {
- return fw.FieldTypeWrapper.ClassObject.getName();
- }
-
- public java.lang.IllegalArgumentException GetIllegalArgumentException(object obj)
- {
- // LAME like JDK 6 we return the wrong exception message (talking about setting the field, instead of getting)
- return SetIllegalArgumentException(obj);
- }
-
- public java.lang.IllegalArgumentException SetIllegalArgumentException(object obj)
- {
- // LAME like JDK 6 we return the wrong exception message (when obj is the object, instead of the value)
- return SetIllegalArgumentException(obj != null ? ikvm.runtime.Util.getClassFromObject(obj).getName() : "", "");
- }
-
- private java.lang.IllegalArgumentException SetIllegalArgumentException(string attemptedType, string attemptedValue)
- {
- return new java.lang.IllegalArgumentException(GetSetMessage(attemptedType, attemptedValue));
- }
-
- protected java.lang.IllegalAccessException FinalFieldIllegalAccessException(object obj)
- {
- return FinalFieldIllegalAccessException(obj != null ? ikvm.runtime.Util.getClassFromObject(obj).getName() : "", "");
- }
-
- private java.lang.IllegalAccessException FinalFieldIllegalAccessException(string attemptedType, string attemptedValue)
- {
- return new java.lang.IllegalAccessException(GetSetMessage(attemptedType, attemptedValue));
- }
-
- private java.lang.IllegalArgumentException GetIllegalArgumentException(string type)
- {
- return new java.lang.IllegalArgumentException("Attempt to get " + GetFieldTypeName() + " field \"" + GetQualifiedFieldName() + "\" with illegal data type conversion to " + type);
- }
-
- // this message comes from sun.reflect.UnsafeFieldAccessorImpl
- private string GetSetMessage(String attemptedType, String attemptedValue)
- {
- String err = "Can not set";
- if (fw.IsStatic)
- err += " static";
- if (isFinal)
- err += " final";
- err += " " + GetFieldTypeName() + " field " + GetQualifiedFieldName() + " to ";
- if (attemptedValue.Length > 0)
- {
- err += "(" + attemptedType + ")" + attemptedValue;
- }
- else
- {
- if (attemptedType.Length > 0)
- err += attemptedType;
- else
- err += "null value";
- }
- return err;
- }
-
- public virtual bool getBoolean(object obj)
- {
- throw GetIllegalArgumentException("boolean");
- }
-
- public virtual byte getByte(object obj)
- {
- throw GetIllegalArgumentException("byte");
- }
-
- public virtual char getChar(object obj)
- {
- throw GetIllegalArgumentException("char");
- }
-
- public virtual short getShort(object obj)
- {
- throw GetIllegalArgumentException("short");
- }
-
- public virtual int getInt(object obj)
- {
- throw GetIllegalArgumentException("int");
- }
-
- public virtual long getLong(object obj)
- {
- throw GetIllegalArgumentException("long");
- }
-
- public virtual float getFloat(object obj)
- {
- throw GetIllegalArgumentException("float");
- }
-
- public virtual double getDouble(object obj)
- {
- throw GetIllegalArgumentException("double");
- }
-
- public virtual void setBoolean(object obj, bool z)
- {
- throw SetIllegalArgumentException("boolean", java.lang.Boolean.toString(z));
- }
-
- public virtual void setByte(object obj, byte b)
- {
- throw SetIllegalArgumentException("byte", java.lang.Byte.toString(b));
- }
-
- public virtual void setChar(object obj, char c)
- {
- throw SetIllegalArgumentException("char", java.lang.Character.toString(c));
- }
-
- public virtual void setShort(object obj, short s)
- {
- throw SetIllegalArgumentException("short", java.lang.Short.toString(s));
- }
-
- public virtual void setInt(object obj, int i)
- {
- throw SetIllegalArgumentException("int", java.lang.Integer.toString(i));
- }
-
- public virtual void setLong(object obj, long l)
- {
- throw SetIllegalArgumentException("long", java.lang.Long.toString(l));
- }
-
- public virtual void setFloat(object obj, float f)
- {
- throw SetIllegalArgumentException("float", java.lang.Float.toString(f));
- }
-
- public virtual void setDouble(object obj, double d)
- {
- throw SetIllegalArgumentException("double", java.lang.Double.toString(d));
- }
-
- public abstract object get(object obj);
- public abstract void set(object obj, object value);
-
- private abstract class FieldAccessor<T> : FieldAccessorImplBase
- {
- protected delegate void Setter(object obj, T value, FieldAccessor<T> acc);
- protected delegate T Getter(object obj, FieldAccessor<T> acc);
- private static readonly Setter initialSetter = lazySet;
- private static readonly Getter initialGetter = lazyGet;
- protected Setter setter = initialSetter;
- protected Getter getter = initialGetter;
-
- internal FieldAccessor(FieldWrapper fw, bool overrideAccessCheck)
- : base(fw, overrideAccessCheck)
- {
- if (!IsSlowPathCompatible(fw))
- {
- // prevent slow path
- numInvocations = inflationThreshold;
- }
- }
-
- private bool IsSlowPathCompatible(FieldWrapper fw)
- {
-#if !NO_REF_EMIT
- if (fw.IsVolatile && (fw.FieldTypeWrapper == PrimitiveTypeWrapper.LONG || fw.FieldTypeWrapper == PrimitiveTypeWrapper.DOUBLE))
- {
- return false;
- }
-#endif
- fw.Link();
- return true;
- }
-
- private static T lazyGet(object obj, FieldAccessor<T> acc)
- {
- return acc.lazyGet(obj);
- }
-
- private static void lazySet(object obj, T value, FieldAccessor<T> acc)
- {
- acc.lazySet(obj, value);
- }
-
- private T lazyGet(object obj)
- {
-#if !NO_REF_EMIT
- if (numInvocations >= inflationThreshold)
- {
- // FXBUG it appears that a ldsfld/stsfld in a DynamicMethod doesn't trigger the class constructor
- // and if we didn't use the slow path, we haven't yet initialized the class
- fw.DeclaringType.RunClassInit();
- getter = (Getter)GenerateFastGetter(typeof(Getter), typeof(T), fw);
- return getter(obj, this);
- }
-#endif // !NO_REF_EMIT
- if (fw.IsStatic)
- {
- obj = null;
- }
- else if (obj == null)
- {
- throw new java.lang.NullPointerException();
- }
- else if (!fw.DeclaringType.IsInstance(obj))
- {
- throw GetIllegalArgumentException(obj);
- }
- else if (fw.DeclaringType.IsRemapped && !fw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj))
- {
- throw GetUnsupportedRemappedFieldException(obj);
- }
- if (numInvocations == 0)
- {
- fw.DeclaringType.RunClassInit();
- fw.DeclaringType.Finish();
- fw.ResolveField();
- }
- numInvocations++;
- return (T)fw.FieldTypeWrapper.GhostUnwrap(fw.GetValue(obj));
- }
-
- private void lazySet(object obj, T value)
- {
- if (isFinal)
- {
- // for some reason Java runs class initialization before checking if the field is final
- fw.DeclaringType.RunClassInit();
- throw FinalFieldIllegalAccessException(JavaBox(value));
- }
-#if !NO_REF_EMIT
- if (numInvocations >= inflationThreshold)
- {
- // FXBUG it appears that a ldsfld/stsfld in a DynamicMethod doesn't trigger the class constructor
- // and if we didn't use the slow path, we haven't yet initialized the class
- fw.DeclaringType.RunClassInit();
- setter = (Setter)GenerateFastSetter(typeof(Setter), typeof(T), fw);
- setter(obj, value, this);
- return;
- }
-#endif // !NO_REF_EMIT
- if (fw.IsStatic)
- {
- obj = null;
- }
- else if (obj == null)
- {
- throw new java.lang.NullPointerException();
- }
- else if (!fw.DeclaringType.IsInstance(obj))
- {
- throw SetIllegalArgumentException(obj);
- }
- else if (fw.DeclaringType.IsRemapped && !fw.DeclaringType.TypeAsBaseType.IsInstanceOfType(obj))
- {
- throw GetUnsupportedRemappedFieldException(obj);
- }
- CheckValue(value);
- if (numInvocations == 0)
- {
- fw.DeclaringType.RunClassInit();
- fw.DeclaringType.Finish();
- fw.ResolveField();
- }
- numInvocations++;
- fw.SetValue(obj, fw.FieldTypeWrapper.GhostWrap(value));
- }
-
- private Exception GetUnsupportedRemappedFieldException(object obj)
- {
- return new java.lang.IllegalAccessException("Accessing field " + fw.DeclaringType.Name + "." + fw.Name + " in an object of type " + ikvm.runtime.Util.getClassFromObject(obj).getName() + " is not supported");
- }
-
- protected virtual void CheckValue(T value)
- {
- }
-
- protected abstract object JavaBox(T value);
- }
-
- private sealed class ByteField : FieldAccessor<byte>
- {
- internal ByteField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override short getShort(object obj)
- {
- return (sbyte)getByte(obj);
- }
-
- public sealed override int getInt(object obj)
- {
- return (sbyte)getByte(obj);
- }
-
- public sealed override long getLong(object obj)
- {
- return (sbyte)getByte(obj);
- }
-
- public sealed override float getFloat(object obj)
- {
- return (sbyte)getByte(obj);
- }
-
- public sealed override double getDouble(object obj)
- {
- return (sbyte)getByte(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Byte.valueOf(getByte(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (!(val is java.lang.Byte))
- {
- throw SetIllegalArgumentException(val);
- }
- setByte(obj, ((java.lang.Byte)val).byteValue());
- }
-
- public sealed override byte getByte(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setByte(object obj, byte value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(byte value)
- {
- return java.lang.Byte.valueOf(value);
- }
- }
-
- private sealed class BooleanField : FieldAccessor<bool>
- {
- internal BooleanField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Boolean.valueOf(getBoolean(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (!(val is java.lang.Boolean))
- {
- throw SetIllegalArgumentException(val);
- }
- setBoolean(obj, ((java.lang.Boolean)val).booleanValue());
- }
-
- public sealed override bool getBoolean(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setBoolean(object obj, bool value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(bool value)
- {
- return java.lang.Boolean.valueOf(value);
- }
- }
-
- private sealed class CharField : FieldAccessor<char>
- {
- internal CharField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override int getInt(object obj)
- {
- return getChar(obj);
- }
-
- public sealed override long getLong(object obj)
- {
- return getChar(obj);
- }
-
- public sealed override float getFloat(object obj)
- {
- return getChar(obj);
- }
-
- public sealed override double getDouble(object obj)
- {
- return getChar(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Character.valueOf(getChar(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Character)
- setChar(obj, ((java.lang.Character)val).charValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override char getChar(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setChar(object obj, char value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(char value)
- {
- return java.lang.Character.valueOf(value);
- }
- }
-
- private sealed class ShortField : FieldAccessor<short>
- {
- internal ShortField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override int getInt(object obj)
- {
- return getShort(obj);
- }
-
- public sealed override long getLong(object obj)
- {
- return getShort(obj);
- }
-
- public sealed override float getFloat(object obj)
- {
- return getShort(obj);
- }
-
- public sealed override double getDouble(object obj)
- {
- return getShort(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Short.valueOf(getShort(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Byte
- || val is java.lang.Short)
- setShort(obj, ((java.lang.Number)val).shortValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override void setByte(object obj, byte b)
- {
- setShort(obj, (sbyte)b);
- }
-
- public sealed override short getShort(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setShort(object obj, short value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(short value)
- {
- return java.lang.Short.valueOf(value);
- }
- }
-
- private sealed class IntField : FieldAccessor<int>
- {
- internal IntField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override long getLong(object obj)
- {
- return getInt(obj);
- }
-
- public sealed override float getFloat(object obj)
- {
- return getInt(obj);
- }
-
- public sealed override double getDouble(object obj)
- {
- return getInt(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Integer.valueOf(getInt(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Byte
- || val is java.lang.Short
- || val is java.lang.Integer)
- setInt(obj, ((java.lang.Number)val).intValue());
- else if (val is java.lang.Character)
- setInt(obj, ((java.lang.Character)val).charValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override void setByte(object obj, byte b)
- {
- setInt(obj, (sbyte)b);
- }
-
- public sealed override void setChar(object obj, char c)
- {
- setInt(obj, c);
- }
-
- public sealed override void setShort(object obj, short s)
- {
- setInt(obj, s);
- }
-
- public sealed override int getInt(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setInt(object obj, int value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(int value)
- {
- return java.lang.Integer.valueOf(value);
- }
- }
-
- private sealed class FloatField : FieldAccessor<float>
- {
- internal FloatField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override double getDouble(object obj)
- {
- return getFloat(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Float.valueOf(getFloat(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Float
- || val is java.lang.Byte
- || val is java.lang.Short
- || val is java.lang.Integer
- || val is java.lang.Long)
- setFloat(obj, ((java.lang.Number)val).floatValue());
- else if (val is java.lang.Character)
- setFloat(obj, ((java.lang.Character)val).charValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override void setByte(object obj, byte b)
- {
- setFloat(obj, (sbyte)b);
- }
-
- public sealed override void setChar(object obj, char c)
- {
- setFloat(obj, c);
- }
-
- public sealed override void setShort(object obj, short s)
- {
- setFloat(obj, s);
- }
-
- public sealed override void setInt(object obj, int i)
- {
- setFloat(obj, i);
- }
-
- public sealed override void setLong(object obj, long l)
- {
- setFloat(obj, l);
- }
-
- public sealed override float getFloat(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setFloat(object obj, float value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(float value)
- {
- return java.lang.Float.valueOf(value);
- }
- }
-
- private sealed class LongField : FieldAccessor<long>
- {
- internal LongField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override float getFloat(object obj)
- {
- return getLong(obj);
- }
-
- public sealed override double getDouble(object obj)
- {
- return getLong(obj);
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Long.valueOf(getLong(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Long
- || val is java.lang.Byte
- || val is java.lang.Short
- || val is java.lang.Integer)
- setLong(obj, ((java.lang.Number)val).longValue());
- else if (val is java.lang.Character)
- setLong(obj, ((java.lang.Character)val).charValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override void setByte(object obj, byte b)
- {
- setLong(obj, (sbyte)b);
- }
-
- public sealed override void setChar(object obj, char c)
- {
- setLong(obj, c);
- }
-
- public sealed override void setShort(object obj, short s)
- {
- setLong(obj, s);
- }
-
- public sealed override void setInt(object obj, int i)
- {
- setLong(obj, i);
- }
-
- public sealed override long getLong(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setLong(object obj, long value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(long value)
- {
- return java.lang.Long.valueOf(value);
- }
- }
-
- private sealed class DoubleField : FieldAccessor<double>
- {
- internal DoubleField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- public sealed override object get(object obj)
- {
- return java.lang.Double.valueOf(getDouble(obj));
- }
-
- public sealed override void set(object obj, object val)
- {
- if (val is java.lang.Double
- || val is java.lang.Float
- || val is java.lang.Byte
- || val is java.lang.Short
- || val is java.lang.Integer
- || val is java.lang.Long)
- setDouble(obj, ((java.lang.Number)val).doubleValue());
- else if (val is java.lang.Character)
- setDouble(obj, ((java.lang.Character)val).charValue());
- else
- throw SetIllegalArgumentException(val);
- }
-
- public sealed override void setByte(object obj, byte b)
- {
- setDouble(obj, (sbyte)b);
- }
-
- public sealed override void setChar(object obj, char c)
- {
- setDouble(obj, c);
- }
-
- public sealed override void setShort(object obj, short s)
- {
- setDouble(obj, s);
- }
-
- public sealed override void setInt(object obj, int i)
- {
- setDouble(obj, i);
- }
-
- public sealed override void setLong(object obj, long l)
- {
- setDouble(obj, l);
- }
-
- public sealed override void setFloat(object obj, float f)
- {
- setDouble(obj, f);
- }
-
- public sealed override double getDouble(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void setDouble(object obj, double value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(double value)
- {
- return java.lang.Double.valueOf(value);
- }
- }
-
- private sealed class ObjectField : FieldAccessor<object>
- {
- internal ObjectField(FieldWrapper field, bool overrideAccessCheck)
- : base(field, overrideAccessCheck)
- {
- }
-
- protected sealed override void CheckValue(object value)
- {
- if (value != null && !fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader()).IsInstance(value))
- {
- throw SetIllegalArgumentException(value);
- }
- }
-
- public sealed override object get(object obj)
- {
- try
- {
- return getter(obj, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- public sealed override void set(object obj, object value)
- {
- try
- {
- setter(obj, value, this);
- }
- catch (FieldAccessException x)
- {
- throw new java.lang.IllegalAccessException().initCause(x);
- }
- }
-
- protected sealed override object JavaBox(object value)
- {
- return value;
- }
- }
-
-#if !NO_REF_EMIT
- private Delegate GenerateFastGetter(Type delegateType, Type fieldType, FieldWrapper fw)
- {
- TypeWrapper fieldTypeWrapper;
- try
- {
- fieldTypeWrapper = fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader());
- fieldTypeWrapper.Finish();
- fw.DeclaringType.Finish();
- }
- catch (RetargetableJavaException x)
- {
- throw x.ToJava();
- }
- fw.ResolveField();
- DynamicMethod dm = DynamicMethodUtils.Create("__<Getter>", fw.DeclaringType.TypeAsBaseType, !fw.IsPublic || !fw.DeclaringType.IsPublic, fieldType, new Type[] { typeof(IReflectionException), typeof(object), typeof(object) });
- CodeEmitter ilgen = CodeEmitter.Create(dm);
- if (fw.IsStatic)
- {
- fw.EmitGet(ilgen);
- fieldTypeWrapper.EmitConvSignatureTypeToStackType(ilgen);
- }
- else
- {
- ilgen.BeginExceptionBlock();
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Castclass, fw.DeclaringType.TypeAsBaseType);
- fw.EmitGet(ilgen);
- fieldTypeWrapper.EmitConvSignatureTypeToStackType(ilgen);
- CodeEmitterLocal local = ilgen.DeclareLocal(fieldType);
- ilgen.Emit(OpCodes.Stloc, local);
- CodeEmitterLabel label = ilgen.DefineLabel();
- ilgen.EmitLeave(label);
- ilgen.BeginCatchBlock(typeof(InvalidCastException));
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("GetIllegalArgumentException"));
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
- ilgen.MarkLabel(label);
- ilgen.Emit(OpCodes.Ldloc, local);
- }
- ilgen.Emit(OpCodes.Ret);
- ilgen.DoEmit();
- return dm.CreateDelegate(delegateType, this);
- }
-
- private Delegate GenerateFastSetter(Type delegateType, Type fieldType, FieldWrapper fw)
- {
- TypeWrapper fieldTypeWrapper;
- try
- {
- fieldTypeWrapper = fw.FieldTypeWrapper.EnsureLoadable(fw.DeclaringType.GetClassLoader());
- fieldTypeWrapper.Finish();
- fw.DeclaringType.Finish();
- }
- catch (RetargetableJavaException x)
- {
- throw x.ToJava();
- }
- fw.ResolveField();
- DynamicMethod dm = DynamicMethodUtils.Create("__<Setter>", fw.DeclaringType.TypeAsBaseType, !fw.IsPublic || !fw.DeclaringType.IsPublic, null, new Type[] { typeof(IReflectionException), typeof(object), fieldType, typeof(object) });
- CodeEmitter ilgen = CodeEmitter.Create(dm);
- if (fw.IsStatic)
- {
- if (fieldType == typeof(object))
- {
- ilgen.BeginExceptionBlock();
- ilgen.Emit(OpCodes.Ldarg_2);
- fieldTypeWrapper.EmitCheckcast(ilgen);
- fieldTypeWrapper.EmitConvStackTypeToSignatureType(ilgen, null);
- fw.EmitSet(ilgen);
- CodeEmitterLabel label = ilgen.DefineLabel();
- ilgen.EmitLeave(label);
- ilgen.BeginCatchBlock(typeof(InvalidCastException));
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("SetIllegalArgumentException"));
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
- ilgen.MarkLabel(label);
- }
- else
- {
- ilgen.Emit(OpCodes.Ldarg_2);
- fw.EmitSet(ilgen);
- }
- }
- else
- {
- ilgen.BeginExceptionBlock();
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Castclass, fw.DeclaringType.TypeAsBaseType);
- ilgen.Emit(OpCodes.Ldarg_2);
- if (fieldType == typeof(object))
- {
- fieldTypeWrapper.EmitCheckcast(ilgen);
- }
- fieldTypeWrapper.EmitConvStackTypeToSignatureType(ilgen, null);
- fw.EmitSet(ilgen);
- CodeEmitterLabel label = ilgen.DefineLabel();
- ilgen.EmitLeave(label);
- ilgen.BeginCatchBlock(typeof(InvalidCastException));
- ilgen.Emit(OpCodes.Ldarg_0);
- ilgen.Emit(OpCodes.Ldarg_1);
- ilgen.Emit(OpCodes.Callvirt, typeof(IReflectionException).GetMethod("SetIllegalArgumentException"));
- ilgen.Emit(OpCodes.Throw);
- ilgen.EndExceptionBlock();
- ilgen.MarkLabel(label);
- }
- ilgen.Emit(OpCodes.Ret);
- ilgen.DoEmit();
- return dm.CreateDelegate(delegateType, this);
- }
-#endif // !NO_REF_EMIT
-
- internal static FieldAccessorImplBase Create(FieldWrapper field, bool overrideAccessCheck)
- {
- TypeWrapper type = field.FieldTypeWrapper;
- if (type.IsPrimitive)
- {
- if (type == PrimitiveTypeWrapper.BYTE)
- {
- return new ByteField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.BOOLEAN)
- {
- return new BooleanField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.CHAR)
- {
- return new CharField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.SHORT)
- {
- return new ShortField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.INT)
- {
- return new IntField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.FLOAT)
- {
- return new FloatField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.LONG)
- {
- return new LongField(field, overrideAccessCheck);
- }
- if (type == PrimitiveTypeWrapper.DOUBLE)
- {
- return new DoubleField(field, overrideAccessCheck);
- }
- throw new InvalidOperationException("field type: " + type);
- }
- else
- {
- return new ObjectField(field, overrideAccessCheck);
- }
- }
- }
-#endif
-
- public static sun.reflect.FieldAccessor newFieldAccessor(object thisFactory, java.lang.reflect.Field field, bool overrideAccessCheck)
- {
-#if FIRST_PASS
- return null;
-#else
- return FieldAccessorImplBase.Create(FieldWrapper.FromField(field), overrideAccessCheck);
-#endif
- }
-
-#if !FIRST_PASS
- internal static sun.reflect.FieldAccessor NewFieldAccessorJNI(FieldWrapper field)
- {
- return FieldAccessorImplBase.Create(field, true);
- }
-#endif
-
- public static sun.reflect.MethodAccessor newMethodAccessor(object thisFactory, java.lang.reflect.Method method)
- {
-#if FIRST_PASS
- return null;
-#else
- MethodWrapper mw = MethodWrapper.FromMethod(method);
-#if !NO_REF_EMIT
- if (!mw.IsDynamicOnly)
- {
- return new FastMethodAccessorImpl(mw);
- }
-#endif
- return new MethodAccessorImpl(mw);
-#endif
- }
-
- public static sun.reflect.ConstructorAccessor newConstructorAccessor0(object thisFactory, java.lang.reflect.Constructor constructor)
- {
-#if FIRST_PASS
- return null;
-#else
- MethodWrapper mw = MethodWrapper.FromConstructor(constructor);
- if (ActivatorConstructorAccessor.IsSuitable(mw))
- {
- // we special case public default constructors, because in that case using Activator.CreateInstance()
- // is almost as fast as FastConstructorAccessorImpl, but it saves us significantly in working set and
- // startup time (because often during startup a sun.nio.cs.* encoder is instantiated using reflection)
- return new ActivatorConstructorAccessor(mw);
- }
- else
- {
-#if NO_REF_EMIT
- return new ConstructorAccessorImpl(mw);
-#else
- return new FastConstructorAccessorImpl(constructor);
-#endif
- }
-#endif
- }
-
- public static sun.reflect.ConstructorAccessor newConstructorAccessorForSerialization(java.lang.Class classToInstantiate, java.lang.reflect.Constructor constructorToCall)
- {
-#if FIRST_PASS
- return null;
-#else
- try
- {
-#if NO_REF_EMIT
- return new SerializationConstructorAccessorImpl(constructorToCall, classToInstantiate);
-#else
- return new FastSerializationConstructorAccessorImpl(constructorToCall, classToInstantiate);
-#endif
- }
- catch (SecurityException x)
- {
- throw new java.lang.SecurityException(x.Message, ikvm.runtime.Util.mapException(x));
- }
-#endif
- }
-}
-
-static class Java_sun_reflect_ConstantPool
-{
- public static int getSize0(object thisConstantPool, object constantPoolOop)
- {
- throw new NotImplementedException();
- }
-
- public static object getClassAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static object getClassAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static object getMethodAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static object getMethodAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static object getFieldAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static object getFieldAtIfLoaded0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static string[] getMemberRefInfoAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static int getIntAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static long getLongAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static float getFloatAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static double getDoubleAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static string getStringAt0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-
- public static string getUTF8At0(object thisConstantPool, object constantPoolOop, int index)
- {
- throw new NotImplementedException();
- }
-}