/// <summary> /// Delegate methods are created unfortunately during the compilation phase in AstCompiler.VisitExpression. /// Model this behaviour here. /// </summary> private DelegateInstanceType GetDelegateInstanceType(TypeEntry typeEntry, ClassReference classRef, AssemblyCompiler compiler, DexTargetPackage targetPackage) { var scopeIds = typeEntry.ScopeId.Split(new[] { ":delegate:" }, StringSplitOptions.None); var typeScopId = scopeIds[0]; var xTypeDef = compiler.Module.GetTypeByScopeID(GetTypeScopeId(typeEntry.Scope, typeScopId, typeEntry.Name)); var delegateType = compiler.GetDelegateType(xTypeDef); var calledMethodId = scopeIds[1]; var calledTypeScopeId = calledMethodId.Split('|')[0]; var calledMethodScope = calledMethodId.Split('|')[1]; var calledTypeDef = compiler.Module.GetTypeByScopeID(calledTypeScopeId); var calledMethod = calledTypeDef.GetMethodByScopeId(calledMethodScope); // NOTE: we are loosing the SequencePoint (DebugInfo) here. I'm not sure if this // was ever valuable anyways. var delInstanceType = delegateType.GetOrCreateInstance(null, targetPackage, calledMethod); return(delInstanceType); }
/// <summary> /// Delegate methods are created unfortunately during the compilation phase in AstCompiler.VisitExpression. /// Model this behaviour here. /// </summary> private DelegateInstanceType GetDelegateInstanceType(TypeEntry typeEntry, ClassReference classRef, AssemblyCompiler compiler, DexTargetPackage targetPackage) { var scopeIds = typeEntry.ScopeId.Split(new[] { ":delegate:" }, StringSplitOptions.None); var typeScopId = scopeIds[0]; var xTypeDef = compiler.Module.GetTypeByScopeID(GetTypeScopeId(typeEntry.Scope, typeScopId, typeEntry.Name)); var delegateType = compiler.GetDelegateType(xTypeDef); var calledMethodId = scopeIds[1]; var calledTypeScopeId = calledMethodId.Split('|')[0]; var calledMethodScope = calledMethodId.Split('|')[1]; var calledTypeDef = compiler.Module.GetTypeByScopeID(calledTypeScopeId); var calledMethod = calledTypeDef.GetMethodByScopeId(calledMethodScope); // NOTE: we are loosing the SequencePoint (DebugInfo) here. I'm not sure if this // was ever valuable anyways. var delInstanceType = delegateType.GetOrCreateInstance(null, targetPackage, calledMethod); return delInstanceType; }