private void VisitVariableAccessSyntaxInternal(VariableAccessSyntax syntax)
        {
            if (currentDeclaration == null)
            {
                return;
            }

            if (shouldInlineCache[currentDeclaration])
            {
                // we've already made a decision
                return;
            }

            switch (model.GetSymbolInfo(syntax))
            {
            case VariableSymbol variableSymbol:
                if (!shouldInlineCache.TryGetValue(variableSymbol, out var shouldInline))
                {
                    // recursively visit dependent variables
                    this.Visit(variableSymbol.DeclaringSyntax);

                    shouldInline = shouldInlineCache[variableSymbol];
                }

                // if we depend on a variable that requires inlining, then we also require inlining
                shouldInlineCache[currentDeclaration] |= shouldInline;
                return;
            }
        }
示例#2
0
        private void VisitVariableAccessSyntaxInternal(VariableAccessSyntax syntax)
        {
            if (currentDeclaration == null)
            {
                return;
            }

            switch (model.GetSymbolInfo(syntax))
            {
            case VariableSymbol variableSymbol:
                if (!resourceDependencies.TryGetValue(variableSymbol, out var dependencies))
                {
                    // recursively visit dependent variables
                    this.Visit(variableSymbol.DeclaringSyntax);

                    dependencies = resourceDependencies[variableSymbol];
                }

                foreach (var dependency in dependencies)
                {
                    resourceDependencies[currentDeclaration].Add(dependency);
                }
                return;

            case ResourceSymbol resourceSymbol:
                resourceDependencies[currentDeclaration].Add(resourceSymbol);
                return;

            case ModuleSymbol moduleSymbol:
                resourceDependencies[currentDeclaration].Add(moduleSymbol);
                return;
            }
        }