private async Task <IEnumerable <RelatedSymbolPair> > GetDerivedInterfacesAsync([NotNull] ISymbol symbol) { var namedTypeSymbol = symbol.EnsureType <INamedTypeSymbol>(); var derivedInterfaces = await FindDerivedInterfacesAsync(namedTypeSymbol); return(derivedInterfaces.Select( i => new RelatedSymbolPair( namedTypeSymbol, i, DirectedModelRelationshipTypes.Subtype))); }
private async Task <IEnumerable <RelatedSymbolPair> > GetImplementingTypesAsync([NotNull] ISymbol symbol) { var namedTypeSymbol = symbol.EnsureType <INamedTypeSymbol>(); var implementingTypes = await FindImplementingTypesAsync(namedTypeSymbol); return(implementingTypes.Select( i => new RelatedSymbolPair( namedTypeSymbol, i, DirectedModelRelationshipTypes.ImplementerType))); }
private Task <IEnumerable <RelatedSymbolPair> > GetImplementedInterfacesAsync([NotNull] ISymbol symbol) { var namedTypeSymbol = symbol.EnsureType <INamedTypeSymbol>(); var result = namedTypeSymbol.Interfaces.Where(i => i.TypeKind == TypeKind.Interface) .Select( i => new RelatedSymbolPair( namedTypeSymbol, i, DirectedModelRelationshipTypes.ImplementedInterface)); return(Task.FromResult(result)); }
private Task <IEnumerable <RelatedSymbolPair> > GetMembersAsync([NotNull] ISymbol symbol) { var typeSymbol = symbol.EnsureType <ITypeSymbol>(); var result = typeSymbol.GetMembers() .Where(_roslynSymbolTranslator.IsModeledMember) .Select( i => new RelatedSymbolPair( typeSymbol, i, CommonDirectedModelRelationshipTypes.Contained)); return(Task.FromResult(result)); }
private async Task <IEnumerable <INamedTypeSymbol> > FindDerivedInterfacesAsync([NotNull] ISymbol symbol) { var namedTypeSymbol = symbol.EnsureType <INamedTypeSymbol>(); var result = new List <INamedTypeSymbol>(); foreach (var compilation in await GetCompilationsAsync()) { var visitor = new DerivedInterfacesFinderVisitor(namedTypeSymbol, _symbolEqualityComparer); compilation.Assembly?.Accept(visitor); result.AddRange(visitor.DerivedInterfaces); } return(result); }
private async Task <IEnumerable <RelatedSymbolPair> > GetDerivedTypesAsync([NotNull] ISymbol symbol) { var classSymbol = symbol.EnsureType <INamedTypeSymbol>(); var solution = await GetCurrentSolutionAsync(); var derivedClasses = await SymbolFinder.FindDerivedClassesAsync(classSymbol, solution); return(derivedClasses .Where(i => _symbolEqualityComparer.Equals(classSymbol, i.BaseType.OriginalDefinition) && i.TypeKind == TypeKind.Class) .Select( i => new RelatedSymbolPair( classSymbol, i, DirectedModelRelationshipTypes.Subtype))); }
private Task <IEnumerable <RelatedSymbolPair> > GetAssociatedTypesAsync([NotNull] ISymbol symbol) { var typeSymbol = symbol.EnsureType <ITypeSymbol>(); var result = typeSymbol.GetMembers() .Where(_roslynSymbolTranslator.IsModeledMember) .Where(_roslynSymbolTranslator.IsAssociationMember) .Select(i => _roslynSymbolTranslator.GetTypeSymbolOfMemberSymbol(i)) .Where(i => _roslynSymbolTranslator.IsModeledType(i)) .Select( i => new RelatedSymbolPair( typeSymbol, i, DirectedModelRelationshipTypes.AssociatedType)); return(Task.FromResult(result)); }
private static Task <IEnumerable <RelatedSymbolPair> > GetBaseTypesAsync([NotNull] ISymbol symbol) { var result = new List <RelatedSymbolPair>(); var typeSymbol = symbol.EnsureType <ITypeSymbol>(); var baseSymbol = typeSymbol.BaseType; if (baseSymbol?.TypeKind == TypeKind.Class) { result.Add( new RelatedSymbolPair( typeSymbol, baseSymbol, DirectedModelRelationshipTypes.BaseType)); } return(Task.FromResult((IEnumerable <RelatedSymbolPair>)result)); }