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; } }
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; } }