  Line 45) wrappedNode.getResources() ==> com.github.javaparser.ast.stmt.TryStmt.getResources()
  Line 46) expr.getVariables() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getVariables()
  Line 47) v.getName().getIdentifier().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 47) v.getName().getIdentifier() ==> com.github.javaparser.ast.expr.SimpleName.getIdentifier()
  Line 47) v.getName() ==> com.github.javaparser.ast.body.VariableDeclarator.getName()
  Line 48) JavaParserSymbolDeclaration.localVar(v, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.localVar(com.github.javaparser.ast.body.VariableDeclarator, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 49) Optional.of(Value.from(decl)) ==> java.util.Optional.of(T)
  Line 49) Value.from(decl) ==> com.github.javaparser.symbolsolver.model.resolution.Value.from(com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration)
  Line 54) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 55) StatementContext.solveInBlockAsValue(name, typeSolver, wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.StatementContext.solveInBlockAsValue(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.ast.stmt.Statement)
  Line 57) getParent().solveSymbolAsValue(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveSymbolAsValue(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 57) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
  Line 63) wrappedNode.getResources() ==> com.github.javaparser.ast.stmt.TryStmt.getResources()
  Line 64) expr.getVariables() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getVariables()
  Line 65) v.getName().getIdentifier().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 65) v.getName().getIdentifier() ==> com.github.javaparser.ast.expr.SimpleName.getIdentifier()
  Line 65) v.getName() ==> com.github.javaparser.ast.body.VariableDeclarator.getName()
  Line 66) SymbolReference.solved(JavaParserSymbolDeclaration.localVar(v, typeSolver)) ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.solved(S2)
  Line 66) JavaParserSymbolDeclaration.localVar(v, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.localVar(com.github.javaparser.ast.body.VariableDeclarator, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 71) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 72) StatementContext.solveInBlock(name, typeSolver, wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.StatementContext.solveInBlock(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver, com.github.javaparser.ast.stmt.Statement)
  Line 74) getParent().solveSymbol(name, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveSymbol(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 74) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
  Line 80) getParent().solveMethod(name, argumentsTypes, false, typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveMethod(java.lang.String, java.util.List<com.github.javaparser.symbolsolver.model.typesystem.Type>, boolean, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 80) getParent() ==> com.github.javaparser.symbolsolver.javaparsermodel.contexts.AbstractJavaParserContext.getParent()
