private Cecil.TypeReference TypeReference(AnalysisNet.Types.IGenericParameterReference genericParameter) { if (genericParameter.Kind == AnalysisNet.Types.GenericParameterKind.Type) { if (typesCache.TryGetValue(genericParameter, out Cecil.TypeReference cecilParam)) { return(cecilParam); } cecilParam = GetGenericParameter(genericParameter); typesCache[genericParameter] = cecilParam; return(cecilParam); } else if (genericParameter.Kind == AnalysisNet.Types.GenericParameterKind.Method) { if (typesCache.TryGetValue(genericParameter, out Cecil.TypeReference cecilParam)) { return(cecilParam); } cecilParam = GetGenericParameter(genericParameter); typesCache[genericParameter] = cecilParam; return(cecilParam); } else { throw new NotImplementedException(); } }
private Cecil.GenericParameter GetGenericParameter(AnalysisNet.Types.IGenericParameterReference analysisNetGP) { if (genericParamsMap.TryGetValue(analysisNetGP.GenericContainer, out GenericParameterMap map)) { return(map[analysisNetGP.Index]); } // populates map if (analysisNetGP.Kind == AnalysisNet.Types.GenericParameterKind.Method) { MethodReference(analysisNetGP.GenericContainer as AnalysisNet.Types.IMethodReference); } else { TypeReference(analysisNetGP.GenericContainer as AnalysisNet.Types.IBasicType); } map = genericParamsMap[analysisNetGP.GenericContainer]; return(map[analysisNetGP.Index]); }