24using System.Diagnostics;
28#if IMPORTER || EXPORTER
34using System.Reflection;
35using System.Reflection.Emit;
41 partial class RuntimeManagedByteCodeJavaType
44 sealed class RemappedJavaMethod : RuntimeSmartJavaMethod
65 internal RemappedJavaMethod(RuntimeJavaType declaringType,
string name,
string sig,
MethodBase method, RuntimeJavaType returnType, RuntimeJavaType[] parameterTypes, ExModifiers
modifiers,
bool hideFromReflection,
MethodInfo mbHelper,
MethodInfo mbNonvirtualHelper) :
68 this.mbHelper = mbHelper;
70 this.mbNonvirtualHelper = mbNonvirtualHelper;
76 protected override void CallImpl(CodeEmitter ilgen)
82 if (!IsStatic && IsFinal)
91 ilgen.Emit(OpCodes.Call, mi);
96 ilgen.Emit(OpCodes.Call, mb);
100 protected override void CallvirtImpl(CodeEmitter ilgen)
102 Debug.Assert(!mbHelper.IsStatic || mbHelper.Name.StartsWith(
"instancehelper_") || mbHelper.DeclaringType.Name ==
"__Helper");
103 if (mbHelper.IsPublic)
105 ilgen.Emit(mbHelper.IsStatic ? OpCodes.Call : OpCodes.Callvirt, mbHelper);
110 ilgen.Emit(OpCodes.Callvirt, GetMethod());
114 protected override void NewobjImpl(CodeEmitter ilgen)
116 var mb = GetMethod();
120 Debug.Assert(mi.Name ==
"newhelper");
121 ilgen.Emit(OpCodes.Call, mi);
125 ilgen.Emit(OpCodes.Newobj, mb);
131#if !IMPORTER && !FIRST_PASS && !EXPORTER
134 internal override object Invoke(
object obj,
object[] args)
136 var mb = mbHelper ?? GetMethod();
137 if (mb.IsStatic && !IsStatic)
139 args = ArrayUtil.Concat(obj, args);
147 internal override object CreateInstance(
object[] args)
149 var mb = mbHelper ?? GetMethod();
153 return base.CreateInstance(args);
157 internal override object InvokeNonvirtualRemapped(
object obj,
object[] args)
159 var mi = mbNonvirtualHelper ?? mbHelper;
160 return mi.Invoke(
null, ArrayUtil.Concat(obj, args));
167 internal override void EmitCallvirtReflect(CodeEmitter ilgen)
169 var mb = mbHelper ?? GetMethod();
170 ilgen.Emit(mb.IsStatic ? OpCodes.Call : OpCodes.Callvirt, mb);
175 internal string GetGenericSignature()
177 var attr = DeclaringType.Context.
AttributeHelper.GetSignature(mbHelper !=
null ? mbHelper : GetMethod());
IKVM.Reflection.Type Type
IKVM.Reflection.MethodInfo MethodInfo
IKVM.Reflection.MethodBase MethodBase
AttributeHelper AttributeHelper
Gets the AttributeHelper associated with this instance of the runtime.
readonly Modifiers modifiers
static object InvokeAndUnwrapException(MethodBase mb, object obj, object[] args)
Dynamically invokes the method and potentially unwraps any exceptions.
MemberFlags
Describes various options applied to a member.
@ InternalAccess
Member should be generated with "internal" .NET access.
@ HideFromReflection
Member should be hidden from Java reflection.