public static bool ContainsReference(
            SyntaxNode node,
            ISymbol symbol,
            SemanticModel semanticModel,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            bool result = false;
            ContainsLocalOrParameterReferenceWalker walker = null;

            try
            {
                walker = GetInstance(
                    symbol,
                    semanticModel,
                    cancellationToken);

                walker.Visit(node);

                result = walker.Result;
            }
            finally
            {
                if (walker != null)
                {
                    Free(walker);
                }
            }

            return(result);
        }
예제 #2
0
        public static bool GetResultAndFree(ContainsLocalOrParameterReferenceWalker walker)
        {
            bool result = walker.Result;

            Free(walker);

            return(result);
        }
예제 #3
0
 public static void Free(ContainsLocalOrParameterReferenceWalker walker)
 {
     walker.Result            = false;
     walker.Symbol            = default;
     walker.SemanticModel     = default;
     walker.CancellationToken = default;
     _cachedInstance          = walker;
 }
예제 #4
0
        public static ContainsLocalOrParameterReferenceWalker GetInstance(
            ISymbol symbol,
            SemanticModel semanticModel,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            ContainsLocalOrParameterReferenceWalker walker = _cachedInstance;

            if (walker != null)
            {
                _cachedInstance          = null;
                walker.Symbol            = symbol;
                walker.SemanticModel     = semanticModel;
                walker.CancellationToken = cancellationToken;
                return(walker);
            }

            return(new ContainsLocalOrParameterReferenceWalker(symbol, semanticModel, cancellationToken));
        }