public bool TryEnsuringSymbolMapping(SyntaxNode syntax, out SymbolMetadata associatedSymbolMetadata) { associatedSymbolMetadata = null; var identifierSymbol = Model.GetSymbolInfo(syntax).Symbol ?? Model.GetDeclaredSymbol(syntax); if (identifierSymbol == null || identifierSymbol is INamespaceSymbol || _encounteredSymbolsNotInSource.Contains(identifierSymbol)) { return false; } if (TryGettingSymbolMetadata(identifierSymbol, out associatedSymbolMetadata)) { return true; } var declaredInSource = TryGeneratingSymbolMetadata(identifierSymbol, syntax, out associatedSymbolMetadata); if (!declaredInSource) { _encounteredSymbolsNotInSource.Add(identifierSymbol); return false; } _symbolToAssignedId[identifierSymbol] = associatedSymbolMetadata.Id; _symbolIdToMetadata[associatedSymbolMetadata.Id] = associatedSymbolMetadata; return true; }
private bool TryGeneratingSymbolMetadata(ISymbol symbol, SyntaxNode syntax, out SymbolMetadata generatedSymbolMetadata) { generatedSymbolMetadata = null; var filePathsOfSourceDeclarations = symbol .Locations .Where(location => location.IsInSource) .Select(location => location.GetLineSpan().Path) .Select(path => CurrentProject.GetRelativePathToFile(path)) .ToArray(); if (!filePathsOfSourceDeclarations.Any()) { return(false); } var assignedSymbolId = Guid.NewGuid().ToString("N"); generatedSymbolMetadata = new SymbolMetadata( assignedSymbolId, symbol.MetadataName, filePathsOfSourceDeclarations, symbol.Kind); return(true); }
public bool TryEnsuringSymbolMapping(SyntaxNode syntax, out SymbolMetadata associatedSymbolMetadata) { associatedSymbolMetadata = null; var identifierSymbol = Model.GetSymbolInfo(syntax).Symbol ?? Model.GetDeclaredSymbol(syntax); if (identifierSymbol == null || identifierSymbol is INamespaceSymbol || _encounteredSymbolsNotInSource.Contains(identifierSymbol)) { return(false); } if (TryGettingSymbolMetadata(identifierSymbol, out associatedSymbolMetadata)) { return(true); } var declaredInSource = TryGeneratingSymbolMetadata(identifierSymbol, syntax, out associatedSymbolMetadata); if (!declaredInSource) { _encounteredSymbolsNotInSource.Add(identifierSymbol); return(false); } _symbolToAssignedId[identifierSymbol] = associatedSymbolMetadata.Id; _symbolIdToMetadata[associatedSymbolMetadata.Id] = associatedSymbolMetadata; return(true); }
private static bool TryGettingSymbolMetadata(ISymbol symbol, out SymbolMetadata metadata) { metadata = null; string symbolId; if (!_symbolToAssignedId.TryGetValue(symbol, out symbolId)) { return false; } metadata = _symbolIdToMetadata[symbolId]; return true; }
private static bool TryGettingSymbolMetadata(ISymbol symbol, out SymbolMetadata metadata) { metadata = null; string symbolId; if (!_symbolToAssignedId.TryGetValue(symbol, out symbolId)) { return(false); } metadata = _symbolIdToMetadata[symbolId]; return(true); }
// TODO: Extract as extension method public SymbolSyntaxElement(SyntaxToken token, SymbolMetadata metadata) : base(token, SyntaxElementKind.Identifier) { TrackingId = metadata.Id; SymbolKind = metadata.SymbolKind; }
private bool TryGeneratingSymbolMetadata(ISymbol symbol, SyntaxNode syntax, out SymbolMetadata generatedSymbolMetadata) { generatedSymbolMetadata = null; var filePathsOfSourceDeclarations = symbol .Locations .Where(location => location.IsInSource) .Select(location => location.GetLineSpan().Path) .Select(path => CurrentProject.GetRelativePathToFile(path)) .ToArray(); if (!filePathsOfSourceDeclarations.Any()) { return false; } var assignedSymbolId = Guid.NewGuid().ToString("N"); generatedSymbolMetadata = new SymbolMetadata( assignedSymbolId, symbol.MetadataName, filePathsOfSourceDeclarations, symbol.Kind); return true; }