static public NamedTypeSymbol AsUnboundGenericType(this NamedTypeSymbol type) { if (!type.IsGenericType) { // This exception is part of the public contract of NamedTypeSymbol.ConstructUnboundGenericType throw new InvalidOperationException(); } var original = type.OriginalDefinition; int n = original.Arity; NamedTypeSymbol originalContainingType = original.ContainingType; var constructedFrom = ((object)originalContainingType == null) ? original : original.AsMember(originalContainingType.IsGenericType ? originalContainingType.AsUnboundGenericType() : originalContainingType); if (n == 0) { return(constructedFrom); } var typeArguments = UnboundArgumentErrorTypeSymbol.CreateTypeArguments( constructedFrom.TypeParameters, n, new CSDiagnosticInfo(ErrorCode.ERR_UnexpectedUnboundGenericName)); return(constructedFrom.Construct(typeArguments, unbound: true)); }
static public NamedTypeSymbol AsUnboundGenericType(this NamedTypeSymbol type) { if (!type.IsGenericType) { return(type); } var original = type.OriginalDefinition; int n = original.Arity; var constructedFrom = ((object)original.ContainingType == null) ? original : original.AsMember(original.ContainingType.AsUnboundGenericType()); if (n == 0) { return(constructedFrom); } var typeArguments = UnboundArgumentErrorTypeSymbol.CreateTypeArguments( constructedFrom.TypeParameters, n, new CSDiagnosticInfo(ErrorCode.ERR_UnexpectedUnboundGenericName)); return(constructedFrom.Construct(typeArguments, unbound: true)); }