public override object VisitNamedType(INamedTypeSymbol namedTypeSymbol) { if (namedTypeSymbol.TypeKind == TypeKind.Error) { WriteType(SymbolKeyType.ErrorType); ErrorTypeSymbolKey.Create(namedTypeSymbol, this); } else if (namedTypeSymbol.IsTupleType) { WriteType(SymbolKeyType.TupleType); TupleTypeSymbolKey.Create(namedTypeSymbol, this); } else if (namedTypeSymbol.IsAnonymousType) { if (namedTypeSymbol.IsAnonymousDelegateType()) { WriteType(SymbolKeyType.AnonymousFunctionOrDelegate); AnonymousFunctionOrDelegateSymbolKey.Create(namedTypeSymbol, this); } else { WriteType(SymbolKeyType.AnonymousType); AnonymousTypeSymbolKey.Create(namedTypeSymbol, this); } } else { WriteType(SymbolKeyType.NamedType); NamedTypeSymbolKey.Create(namedTypeSymbol, this); } return(null); }
public override object VisitMethod(IMethodSymbol methodSymbol) { if (!methodSymbol.Equals(methodSymbol.ConstructedFrom)) { WriteType(SymbolKeyType.ConstructedMethod); ConstructedMethodSymbolKey.Create(methodSymbol, this); } else { switch (methodSymbol.MethodKind) { case MethodKind.ReducedExtension: WriteType(SymbolKeyType.ReducedExtensionMethod); ReducedExtensionMethodSymbolKey.Create(methodSymbol, this); break; case MethodKind.AnonymousFunction: WriteType(SymbolKeyType.AnonymousFunctionOrDelegate); AnonymousFunctionOrDelegateSymbolKey.Create(methodSymbol, this); break; case MethodKind.LocalFunction: WriteType(SymbolKeyType.BodyLevel); BodyLevelSymbolKey.Create(methodSymbol, this); break; default: WriteType(SymbolKeyType.Method); MethodSymbolKey.Create(methodSymbol, this); break; } } return(null); }
public override object VisitMethod(IMethodSymbol methodSymbol) { if (!methodSymbol.Equals(methodSymbol.ConstructedFrom)) { WriteType(SymbolKeyType.ConstructedMethod); ConstructedMethodSymbolKey.Create(methodSymbol, this); } else if (methodSymbol.MethodKind == MethodKind.ReducedExtension) { WriteType(SymbolKeyType.ReducedExtensionMethod); ReducedExtensionMethodSymbolKey.Create(methodSymbol, this); } else if (methodSymbol.MethodKind == MethodKind.AnonymousFunction) { WriteType(SymbolKeyType.AnonymousFunctionOrDelegate); AnonymousFunctionOrDelegateSymbolKey.Create(methodSymbol, this); } else { WriteType(SymbolKeyType.Method); MethodSymbolKey.Create(methodSymbol, this); } return(null); }
public override void VisitMethod(IMethodSymbol methodSymbol) { if (!methodSymbol.Equals(methodSymbol.ConstructedFrom)) { WriteType(SymbolKeyType.ConstructedMethod); ConstructedMethodSymbolKey.Create(methodSymbol, this); } else { switch (methodSymbol.MethodKind) { case MethodKind.ReducedExtension: WriteType(SymbolKeyType.ReducedExtensionMethod); ReducedExtensionMethodSymbolKey.Create(methodSymbol, this); break; case MethodKind.AnonymousFunction: WriteType(SymbolKeyType.AnonymousFunctionOrDelegate); AnonymousFunctionOrDelegateSymbolKey.Create(methodSymbol, this); break; case MethodKind.LocalFunction: throw ExceptionUtilities.Unreachable; default: WriteType(SymbolKeyType.Method); MethodSymbolKey.Create(methodSymbol, this); break; } } }
private SymbolKeyResolution ReadWorker(SymbolKeyType type) { switch (type) { case SymbolKeyType.Alias: return(AliasSymbolKey.Resolve(this)); case SymbolKeyType.BodyLevel: return(BodyLevelSymbolKey.Resolve(this)); case SymbolKeyType.ConstructedMethod: return(ConstructedMethodSymbolKey.Resolve(this)); case SymbolKeyType.NamedType: return(NamedTypeSymbolKey.Resolve(this)); case SymbolKeyType.ErrorType: return(ErrorTypeSymbolKey.Resolve(this)); case SymbolKeyType.Field: return(FieldSymbolKey.Resolve(this)); case SymbolKeyType.DynamicType: return(DynamicTypeSymbolKey.Resolve(this)); case SymbolKeyType.Method: return(MethodSymbolKey.Resolve(this)); case SymbolKeyType.Namespace: return(NamespaceSymbolKey.Resolve(this)); case SymbolKeyType.PointerType: return(PointerTypeSymbolKey.Resolve(this)); case SymbolKeyType.Parameter: return(ParameterSymbolKey.Resolve(this)); case SymbolKeyType.Property: return(PropertySymbolKey.Resolve(this)); case SymbolKeyType.ArrayType: return(ArrayTypeSymbolKey.Resolve(this)); case SymbolKeyType.Assembly: return(AssemblySymbolKey.Resolve(this)); case SymbolKeyType.TupleType: return(TupleTypeSymbolKey.Resolve(this)); case SymbolKeyType.Module: return(ModuleSymbolKey.Resolve(this)); case SymbolKeyType.Event: return(EventSymbolKey.Resolve(this)); case SymbolKeyType.ReducedExtensionMethod: return(ReducedExtensionMethodSymbolKey.Resolve(this)); case SymbolKeyType.TypeParameter: return(TypeParameterSymbolKey.Resolve(this)); case SymbolKeyType.AnonymousType: return(AnonymousTypeSymbolKey.Resolve(this)); case SymbolKeyType.AnonymousFunctionOrDelegate: return(AnonymousFunctionOrDelegateSymbolKey.Resolve(this)); case SymbolKeyType.TypeParameterOrdinal: return(TypeParameterOrdinalSymbolKey.Resolve(this)); } throw new NotImplementedException(); }
public override object VisitNamedType(INamedTypeSymbol namedTypeSymbol) { if (namedTypeSymbol.TypeKind == TypeKind.Error) { WriteType(SymbolKeyType.ErrorType); ErrorTypeSymbolKey.Create(namedTypeSymbol, this); } else if (namedTypeSymbol.IsTupleType && namedTypeSymbol.TupleUnderlyingType != namedTypeSymbol) { // A tuple is a named type with some added information // We only need to store this extra information if there is some // (ie. the current type differs from the underlying type, which has no element names) WriteType(SymbolKeyType.TupleType); TupleTypeSymbolKey.Create(namedTypeSymbol, this); } else if (namedTypeSymbol.IsAnonymousType) { if (namedTypeSymbol.IsAnonymousDelegateType()) { WriteType(SymbolKeyType.AnonymousFunctionOrDelegate); AnonymousFunctionOrDelegateSymbolKey.Create(namedTypeSymbol, this); } else { WriteType(SymbolKeyType.AnonymousType); AnonymousTypeSymbolKey.Create(namedTypeSymbol, this); } } else { WriteType(SymbolKeyType.NamedType); NamedTypeSymbolKey.Create(namedTypeSymbol, this); } return(null); }