Example #1
0
        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();
            }
        }
Example #2
0
        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]);
        }