private SDType CreateSDType(ITypeSymbol typeSymbol, bool isProjectStranger) { SDNamespace sdNamespace = null; if (typeSymbol is IArrayTypeSymbol) { sdNamespace = ParserOptions.SDRepository.GetNamespaceByIdentifier(((IArrayTypeSymbol)typeSymbol).ElementType.ContainingNamespace.GetIdentifier()); sdNamespace = sdNamespace ?? new SDNamespace(((IArrayTypeSymbol)typeSymbol).ElementType.ContainingNamespace.GetIdentifier()) { IsProjectStranger = true }; } else { sdNamespace = ParserOptions.SDRepository.GetNamespaceByIdentifier(typeSymbol.ContainingNamespace.GetIdentifier()); sdNamespace = sdNamespace ?? new SDNamespace(typeSymbol.ContainingNamespace.GetIdentifier()) { IsProjectStranger = true }; } var sdType = new SDType(typeSymbol.GetIdentifier(), typeSymbol.Name, sdNamespace) { Accessibility = typeSymbol.DeclaredAccessibility.ToString().ToLower(), IsAbstract = typeSymbol.IsAbstract, IsReferenceType = typeSymbol.IsReferenceType, IsSealed = typeSymbol.IsSealed, IsStatic = typeSymbol.IsStatic, IsProjectStranger = isProjectStranger, Kind = typeSymbol.TypeKind.ToString().ToLower() }; var declaringReferences = !isProjectStranger ? typeSymbol.DeclaringSyntaxReferences.ToList() : new List<SyntaxReference>(); foreach (var reference in declaringReferences) { var region = new SDRegion { Start = reference.Span.Start, End = reference.Span.End, Filename = reference.SyntaxTree.FilePath }; sdType.Regions.Add(region); } ParserOptions.SDRepository.AddType(sdType); return sdType; }
private List<SDRegion> GetRegions(INamedTypeSymbol typeSymbol) { var regions = new List<SDRegion>(); foreach (var reference in typeSymbol.DeclaringSyntaxReferences.ToList()) { var region = new SDRegion { Start = reference.Span.Start, End = reference.Span.End, StartLine = reference.SyntaxTree.GetLineSpan(reference.Span).StartLinePosition.Line + 1, EndLine = reference.SyntaxTree.GetLineSpan(reference.Span).EndLinePosition.Line + 1, FilePath = reference.SyntaxTree.FilePath, Filename = Path.GetFileName(reference.SyntaxTree.FilePath), Content = File.ReadAllText(reference.SyntaxTree.FilePath) }; regions.Add(region); } return regions; }