46 internal AbstractMirandaMethodWrapper(RuntimeJavaType declaringType,
RuntimeJavaMethod ifmethod) :
62 internal DefaultMirandaMethodWrapper(RuntimeJavaType declaringType,
RuntimeJavaMethod ifmethod) :
63 base(declaringType, ifmethod,
Modifiers.Public)
81 internal ErrorMirandaMethodWrapper(RuntimeJavaType declaringType,
RuntimeJavaMethod ifmethod,
string error) :
82 base(declaringType, ifmethod,
Modifiers.Public)
89 error +=
" " + mw.DeclaringType.Name +
"." + mw.Name;
93 internal override string Error
111 this.ifmethod = ifmethod;
116 var dmmw = ifmethod as DefaultMirandaMethodWrapper;
118 return new DefaultMirandaMethodWrapper(declaringType, dmmw.BaseMethod);
120 return ifmethod.IsAbstract ?
new AbstractMirandaMethodWrapper(declaringType, ifmethod) :
new DefaultMirandaMethodWrapper(declaringType, ifmethod);
130 else if (ifmethod.DeclaringType.ImplementsInterface(mw.DeclaringType))
135 else if (mw.DeclaringType.ImplementsInterface(ifmethod.DeclaringType))
137 return Create(DeclaringType, mw);
139 else if (!ifmethod.IsAbstract && !mw.IsAbstract)
143 else if (!ifmethod.IsAbstract && mw.IsAbstract)
145 return new ErrorMirandaMethodWrapper(DeclaringType, mw, DeclaringType.Name +
"." +
Name +
Signature);
155 return new ErrorMirandaMethodWrapper(DeclaringType, ifmethod,
"Conflicting default methods:")
160 internal bool IsConflictError
162 get {
return Error !=
null && Error.StartsWith(
"Conflicting default methods:"); }
165 internal RuntimeJavaMethod BaseMethod
167 get {
return ifmethod; }
170 internal virtual string Error
177 protected override void CallImpl(CodeEmitter ilgen)
179 ilgen.Emit(OpCodes.Call, GetMethod());
182 protected override void CallvirtImpl(CodeEmitter ilgen)
184 ilgen.Emit(OpCodes.Callvirt, GetMethod());