Beispiel #1
0
        private Type GenericPathType(Type declaringType, Type definitionType, TypeDefinition definition, TypeReference reference, GenericScope genericScope)
        {
            var generic   = reference as GenericInstanceType;
            var arguments = generic != null ? new Type[generic.GenericArguments.Count] : System.Type.EmptyTypes;
            var allArgumentsAreRuntime = true;

            if (generic != null)
            {
                for (var i = 0; i < generic.GenericArguments.Count; i++)
                {
                    var resolved = Type(generic.GenericArguments[i], genericScope);
                    allArgumentsAreRuntime = allArgumentsAreRuntime && TypeSupport.IsRuntime(resolved);
                    arguments[i]           = resolved;
                }
            }

            var  cacheKey = new GenericTypeKey(declaringType, definitionType, arguments);
            Type cached;

            if (_genericTypeCache.TryGetValue(cacheKey, out cached))
            {
                return(cached);
            }

            var resultType = GenericPathTypeUncached(declaringType, definitionType, definition, arguments, allArgumentsAreRuntime, genericScope);

            _genericTypeCache.Add(cacheKey, resultType);
            return(GenericPathType(declaringType, definitionType, definition, arguments, allArgumentsAreRuntime, genericScope));
        }
Beispiel #2
0
        private Type GenericPathType(Type declaringType, Type definitionType, TypeDefinition definition, Type[] arguments, bool allArgumentsAreRuntime, GenericScope genericScope)
        {
            var  cacheKey = new GenericTypeKey(declaringType, definitionType, arguments);
            Type cached;

            if (_genericTypeCache.TryGetValue(cacheKey, out cached))
            {
                return(cached);
            }

            var resultType = GenericPathTypeUncached(declaringType, definitionType, definition, arguments, allArgumentsAreRuntime, genericScope);

            _genericTypeCache.Add(cacheKey, resultType);
            return(resultType);
        }