Пример #1
0
        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;
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
        }
Пример #5
0
        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);
        }
Пример #6
0
 // TODO: Extract as extension method
 public SymbolSyntaxElement(SyntaxToken token, SymbolMetadata metadata)
     : base(token, SyntaxElementKind.Identifier)
 {
     TrackingId = metadata.Id;
     SymbolKind = metadata.SymbolKind;
 }
Пример #7
0
        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;
        }