private StaticDeclaredTypeWrapper MakeDeclaredType(ITypeElement typeElementHandle, ISubstitution substitutionHandle) { if (typeElementHandle is ITypeParameter) throw new ArgumentException("This method should never be called with a generic parameter as input.", "typeElementHandle"); ITypeElement declaringTypeElementHandle = typeElementHandle.GetContainingType(); StaticDeclaredTypeWrapper type; if (declaringTypeElementHandle != null) { StaticDeclaredTypeWrapper declaringType = MakeDeclaredType(declaringTypeElementHandle, substitutionHandle); type = new StaticDeclaredTypeWrapper(this, typeElementHandle, declaringType, declaringType.Substitution); } else { type = new StaticDeclaredTypeWrapper(this, typeElementHandle, null, StaticTypeSubstitution.Empty); } #if ! RESHARPER_50_OR_NEWER var typeParameterHandles = new List<ITypeParameter>(typeElementHandle.AllTypeParameters); #else var typeParameterHandles = new List<ITypeParameter>(typeElementHandle.GetAllTypeParameters()); #endif #if RESHARPER_31 || RESHARPER_40 || RESHARPER_41 if (substitutionHandle.IsIdempotent(typeParameterHandles)) #else if (substitutionHandle.IsIdempotentAll(typeParameterHandles)) #endif { return type; } ITypeInfo[] genericArguments = GenericCollectionUtils.ConvertAllToArray<ITypeParameter, ITypeInfo>(typeParameterHandles, delegate(ITypeParameter typeParameterHandle) { IType substitutedType = substitutionHandle.Apply(typeParameterHandle); if (substitutedType.IsUnknown) return MakeGenericParameterType(typeParameterHandle); return MakeType(substitutedType); }); return type.MakeGenericType(genericArguments); }