  Line 41) Logger.getLogger(TypeExtractor.class.getCanonicalName()) ==> java.util.logging.Logger.getLogger(java.lang.String)
  Line 41) TypeExtractor.class.getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 44) logger.setLevel(Level.INFO) ==> java.util.logging.Logger.setLevel(java.util.logging.Level)
  Line 46) consoleHandler.setLevel(Level.INFO) ==> java.util.logging.Handler.setLevel(java.util.logging.Level)
  Line 47) logger.addHandler(consoleHandler) ==> java.util.logging.Logger.addHandler(java.util.logging.Handler)
  Line 60) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 62) facade.convertToUsageVariableType(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsageVariableType(com.github.javaparser.ast.body.VariableDeclarator)
  Line 63) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 65) facade.convertToUsageVariableType(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsageVariableType(com.github.javaparser.ast.body.VariableDeclarator)
  Line 67) getParentNode(node).getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 67) getParentNode(node).getClass() ==> java.lang.Object.getClass()
  Line 67) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 73) node.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 76) facade.convertToUsage(node.getType(), node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.ast.Node)
  Line 76) node.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 82) node.getName().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 82) node.getName() ==> com.github.javaparser.ast.expr.ArrayAccessExpr.getName()
  Line 83) arrayUsageType.isArray() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isArray()
  Line 84) ((ArrayType) arrayUsageType).getComponentType() ==> com.github.javaparser.symbolsolver.model.typesystem.ArrayType.getComponentType()
  Line 91) facade.convertToUsage(node.getElementType(), JavaParserFactory.getContext(node, typeSolver)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 91) node.getElementType() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getElementType()
  Line 91) JavaParserFactory.getContext(node, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 92) node.getLevels().size() ==> com.github.javaparser.ast.NodeList.size()
  Line 92) node.getLevels() ==> com.github.javaparser.ast.expr.ArrayCreationExpr.getLevels()
  Line 100) node.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 100) node.getClass() ==> java.lang.Object.getClass()
  Line 105) node.getTarget().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 105) node.getTarget() ==> com.github.javaparser.ast.expr.AssignExpr.getTarget()
  Line 110) node.getOperator() ==> com.github.javaparser.ast.expr.BinaryExpr.getOperator()
  Line 115) facade.getBinaryTypeConcrete(node.getLeft(), node.getRight(), solveLambdas) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getBinaryTypeConcrete(com.github.javaparser.ast.Node, com.github.javaparser.ast.Node, boolean)
  Line 115) node.getLeft() ==> com.github.javaparser.ast.expr.BinaryExpr.getLeft()
  Line 115) node.getRight() ==> com.github.javaparser.ast.expr.BinaryExpr.getRight()
  Line 132) node.getLeft().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 132) node.getLeft() ==> com.github.javaparser.ast.expr.BinaryExpr.getLeft()
  Line 134) node.getOperator().name() ==> java.lang.Enum.name()
  Line 134) node.getOperator() ==> com.github.javaparser.ast.expr.BinaryExpr.getOperator()
  Line 140) facade.convertToUsage(node.getType(), JavaParserFactory.getContext(node, typeSolver)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 140) node.getType() ==> com.github.javaparser.ast.expr.CastExpr.getType()
  Line 140) JavaParserFactory.getContext(node, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 146) node.getType() ==> com.github.javaparser.ast.expr.ClassExpr.getType()
  Line 147) facade.convertToUsage(astType, node.getType()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.ast.Node)
  Line 147) node.getType() ==> com.github.javaparser.ast.expr.ClassExpr.getType()
  Line 148) ImmutableList.of(jssType) ==> com.google.common.collect.ImmutableList.of(E)
  Line 153) node.getThenExpr().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 153) node.getThenExpr() ==> com.github.javaparser.ast.expr.ConditionalExpr.getThenExpr()
  Line 158) node.getInner().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 158) node.getInner() ==> com.github.javaparser.ast.expr.EnclosedExpr.getInner()
  Line 168) parentType.hasField(node.getName().getId()) ==> com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.hasField(java.lang.String)
  Line 168) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 168) node.getName() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getName()
  Line 169) parentType.getField(node.getName().getId()).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 169) parentType.getField(node.getName().getId()) ==> com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration.getField(java.lang.String)
  Line 169) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 169) node.getName() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getName()
  Line 170) parentType.hasInternalType(node.getName().getId()) ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.hasInternalType(java.lang.String)
  Line 170) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 170) node.getName() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getName()
  Line 171) parentType.getInternalType(node.getName().getId()) ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.getInternalType(java.lang.String)
  Line 171) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 171) node.getName() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getName()
  Line 173) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 173) node.getName() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getName()
  Line 180) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 181) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 182) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 183) JavaParserFactory.getContext(node, typeSolver).solveType(staticValue.toString(), typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 183) JavaParserFactory.getContext(node, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 183) staticValue.toString() ==> com.github.javaparser.ast.Node.toString()
  Line 184) typeAccessedStatically.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 186) solveDotExpressionType(typeAccessedStatically.getCorrespondingDeclaration().asReferenceType(), node) ==> com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.solveDotExpressionType(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration, com.github.javaparser.ast.expr.FieldAccessExpr)
  Line 187) typeAccessedStatically.getCorrespondingDeclaration().asReferenceType() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.asReferenceType()
  Line 187) typeAccessedStatically.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 189) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 192) facade.solve((ThisExpr) node.getScope()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(com.github.javaparser.ast.expr.ThisExpr)
  Line 192) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 194) solve.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 195) solve.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 197) solveDotExpressionType(correspondingDeclaration.asReferenceType(), node) ==> com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.solveDotExpressionType(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration, com.github.javaparser.ast.expr.FieldAccessExpr)
  Line 197) correspondingDeclaration.asReferenceType() ==> com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration.asReferenceType()
  Line 201) node.getScope().toString().indexOf('.') ==> java.lang.String.indexOf(int)
  Line 201) node.getScope().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 201) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 203) typeSolver.tryToSolveType(node.getScope().toString()) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 203) node.getScope().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 203) node.getScope() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getScope()
  Line 204) sr.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 205) solveDotExpressionType(sr.getCorrespondingDeclaration(), node) ==> com.github.javaparser.symbolsolver.javaparsermodel.TypeExtractor.solveDotExpressionType(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration, com.github.javaparser.ast.expr.FieldAccessExpr)
  Line 205) sr.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 210) new SymbolSolver(typeSolver).solveSymbolAsValue(node.getField().getId(), node) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue(java.lang.String, com.github.javaparser.ast.Node)
  Line 210) node.getField().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 210) node.getField() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getField()
  Line 214) typeSolver.tryToSolveType(node.toString()) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 214) node.toString() ==> com.github.javaparser.ast.Node.toString()
  Line 215) sref.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 216) sref.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 219) value.isPresent() ==> java.util.Optional.isPresent()
  Line 220) value.get().getType() ==> com.github.javaparser.symbolsolver.model.resolution.Value.getType()
  Line 220) value.get() ==> java.util.Optional.get()
  Line 222) node.getField().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 222) node.getField() ==> com.github.javaparser.ast.expr.FieldAccessExpr.getField()
  Line 233) new ReflectionTypeSolver().solveType("java.lang.String") ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.solveType(java.lang.String)
  Line 253) node.getValue().toLowerCase().endsWith("f") ==> java.lang.String.endsWith(java.lang.String)
  Line 253) node.getValue().toLowerCase() ==> java.lang.String.toLowerCase()
  Line 253) node.getValue() ==> com.github.javaparser.ast.expr.LiteralStringValueExpr.getValue()
  Line 271) logger.finest("getType on method call " + node) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 273) facade.solveMethodAsUsage(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveMethodAsUsage(com.github.javaparser.ast.expr.MethodCallExpr)
  Line 274) logger.finest("getType on method call " + node + " resolved to " + ref) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 275) logger.finest("getType on method call " + node + " return type is " + ref.returnType()) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 275) ref.returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 276) ref.returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 282) logger.finest("getType on name expr " + node) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 283) new SymbolSolver(typeSolver).solveSymbolAsValue(node.getName().getId(), node) ==> com.github.javaparser.symbolsolver.resolution.SymbolSolver.solveSymbolAsValue(java.lang.String, com.github.javaparser.ast.Node)
  Line 283) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 283) node.getName() ==> com.github.javaparser.ast.expr.NameExpr.getName()
  Line 284) value.isPresent() ==> java.util.Optional.isPresent()
  Line 285) node.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 285) node.getName() ==> com.github.javaparser.ast.expr.NameExpr.getName()
  Line 287) value.get().getType() ==> com.github.javaparser.symbolsolver.model.resolution.Value.getType()
  Line 287) value.get() ==> java.util.Optional.get()
  Line 293) facade.convertToUsage(node.getType(), node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.ast.Node)
  Line 293) node.getType() ==> com.github.javaparser.ast.expr.ObjectCreationExpr.getType()
  Line 300) node.getClassExpr().isPresent() ==> java.util.Optional.isPresent()
  Line 300) node.getClassExpr() ==> com.github.javaparser.ast.expr.ThisExpr.getClassExpr()
  Line 302) node.getClassExpr().get().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 302) node.getClassExpr().get() ==> java.util.Optional.get()
  Line 302) node.getClassExpr() ==> com.github.javaparser.ast.expr.ThisExpr.getClassExpr()
  Line 304) typeSolver.tryToSolveType(className) ==> com.github.javaparser.symbolsolver.model.resolution.TypeSolver.tryToSolveType(java.lang.String)
  Line 305) clazz.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 306) clazz.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 309) node.getAncestorOfType(CompilationUnit.class) ==> com.github.javaparser.HasParentNode.getAncestorOfType(java.lang.Class<N>)
  Line 310) cu.isPresent() ==> java.util.Optional.isPresent()
  Line 311) cu.get().getClassByName(className) ==> com.github.javaparser.ast.CompilationUnit.getClassByName(java.lang.String)
  Line 311) cu.get() ==> java.util.Optional.get()
  Line 312) classByName.isPresent() ==> java.util.Optional.isPresent()
  Line 313) facade.getTypeDeclaration(classByName.get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.ClassOrInterfaceDeclaration)
  Line 313) classByName.get() ==> java.util.Optional.get()
  Line 318) facade.getTypeDeclaration(facade.findContainingTypeDecl(node)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 318) facade.findContainingTypeDecl(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.findContainingTypeDecl(com.github.javaparser.ast.Node)
  Line 323) facade.getTypeDeclaration(facade.findContainingTypeDecl(node)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 323) facade.findContainingTypeDecl(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.findContainingTypeDecl(com.github.javaparser.ast.Node)
  Line 325) ((ClassDeclaration) typeOfNode).getSuperClass() ==> com.github.javaparser.symbolsolver.model.declarations.ClassDeclaration.getSuperClass()
  Line 327) node.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 327) node.getClass() ==> java.lang.Object.getClass()
  Line 333) node.getOperator() ==> com.github.javaparser.ast.expr.UnaryExpr.getOperator()
  Line 336) node.getExpression().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 336) node.getExpression() ==> com.github.javaparser.ast.expr.UnaryExpr.getExpression()
  Line 343) node.getExpression().accept(this, solveLambdas) ==> com.github.javaparser.ast.visitor.Visitable.accept(com.github.javaparser.ast.visitor.GenericVisitor<R, A>, A)
  Line 343) node.getExpression() ==> com.github.javaparser.ast.expr.UnaryExpr.getExpression()
  Line 345) node.getOperator().name() ==> java.lang.Enum.name()
  Line 345) node.getOperator() ==> com.github.javaparser.ast.expr.UnaryExpr.getOperator()
  Line 351) node.getVariables().size() ==> com.github.javaparser.ast.NodeList.size()
  Line 351) node.getVariables() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getVariables()
  Line 354) facade.convertToUsageVariableType(node.getVariables().get(0)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsageVariableType(com.github.javaparser.ast.body.VariableDeclarator)
  Line 354) node.getVariables().get(0) ==> com.github.javaparser.ast.NodeList.get(int)
  Line 354) node.getVariables() ==> com.github.javaparser.ast.expr.VariableDeclarationExpr.getVariables()
  Line 360) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 361) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 362) JavaParserSymbolDeclaration.getParamPos(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.getParamPos(com.github.javaparser.ast.Node)
  Line 363) facade.solve(callExpr) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(com.github.javaparser.ast.expr.MethodCallExpr)
  Line 364) refMethod.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 365) getParentNode(node).toString() ==> com.github.javaparser.ast.Node.toString()
  Line 365) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 365) callExpr.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 365) callExpr.getName() ==> com.github.javaparser.ast.expr.MethodCallExpr.getName()
  Line 367) logger.finest("getType on lambda expr " + refMethod.getCorrespondingDeclaration().getName()) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 367) refMethod.getCorrespondingDeclaration().getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 367) refMethod.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 371) refMethod.getCorrespondingDeclaration().getParam(pos).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 371) refMethod.getCorrespondingDeclaration().getParam(pos) ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getParam(int)
  Line 371) refMethod.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 373) callExpr.getScope().isPresent() ==> java.util.Optional.isPresent()
  Line 373) callExpr.getScope() ==> com.github.javaparser.ast.expr.MethodCallExpr.getScope()
  Line 374) callExpr.getScope().get() ==> java.util.Optional.get()
  Line 374) callExpr.getScope() ==> com.github.javaparser.ast.expr.MethodCallExpr.getScope()
  Line 381) JavaParserFactory.getContext(nameExpr, typeSolver).solveType(nameExpr.getName().getId(), typeSolver) ==> com.github.javaparser.symbolsolver.core.resolution.Context.solveType(java.lang.String, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 381) JavaParserFactory.getContext(nameExpr, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 381) nameExpr.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 381) nameExpr.getName() ==> com.github.javaparser.ast.expr.NameExpr.getName()
  Line 382) type.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 391) facade.getType(scope) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(com.github.javaparser.ast.Node)
  Line 392) scopeType.isReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isReferenceType()
  Line 393) scopeType.asReferenceType().useThisTypeParametersOnTheGivenType(result) ==> com.github.javaparser.symbolsolver.model.typesystem.parametrization.TypeParameterValueProvider.useThisTypeParametersOnTheGivenType(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 393) scopeType.asReferenceType() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.asReferenceType()
  Line 399) JavaParserFactory.getContext(node, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 400) facade.solveGenericTypes(result, ctx, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveGenericTypes(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.core.resolution.Context, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 405) FunctionalInterfaceLogic.getFunctionalMethod(result) ==> com.github.javaparser.symbolsolver.logic.FunctionalInterfaceLogic.getFunctionalMethod(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 406) functionalMethod.isPresent() ==> java.util.Optional.isPresent()
  Line 415) ReferenceTypeImpl.undeterminedParameters(functionalMethod.get().getDeclaration().declaringType(), typeSolver) ==> com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl.undeterminedParameters(com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 415) functionalMethod.get().getDeclaration().declaringType() ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.declaringType()
  Line 415) functionalMethod.get().getDeclaration() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.getDeclaration()
  Line 415) functionalMethod.get() ==> java.util.Optional.get()
  Line 417) lambdaCtx.addPair(result, functionalInterfaceType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addPair(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 421) lambdaExpr.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 422) facade.getType(((ExpressionStmt) lambdaExpr.getBody()).getExpression()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(com.github.javaparser.ast.Node)
  Line 422) ((ExpressionStmt) lambdaExpr.getBody()).getExpression() ==> com.github.javaparser.ast.stmt.ExpressionStmt.getExpression()
  Line 422) lambdaExpr.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 423) lambdaExpr.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 424) lambdaExpr.getBody() ==> com.github.javaparser.ast.expr.LambdaExpr.getBody()
  Line 425) blockStmt.getStatements() ==> com.github.javaparser.ast.stmt.BlockStmt.getStatements()
  Line 428) blockStmt.getNodesByType(ReturnStmt.class) ==> com.github.javaparser.ast.Node.getNodesByType(java.lang.Class<N>)
  Line 430) returnStmts.size() ==> java.util.List.size()
  Line 432) returnStmts.stream().map(returnStmt -> {
    Optional<Expression> expression = returnStmt.getExpression();
    if (expression.isPresent()) {
        return facade.getType(expression.get());
    } else {
        return VoidType.INSTANCE;
    }
}).filter(x -> x != null && !x.isVoid() && !x.isNull()).findFirst().orElse(VoidType.INSTANCE) ==> java.util.Optional.orElse(T)
  Line 432) returnStmts.stream().map(returnStmt -> {
    Optional<Expression> expression = returnStmt.getExpression();
    if (expression.isPresent()) {
        return facade.getType(expression.get());
    } else {
        return VoidType.INSTANCE;
    }
}).filter(x -> x != null && !x.isVoid() && !x.isNull()).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 432) returnStmts.stream().map(returnStmt -> {
    Optional<Expression> expression = returnStmt.getExpression();
    if (expression.isPresent()) {
        return facade.getType(expression.get());
    } else {
        return VoidType.INSTANCE;
    }
}).filter(x -> x != null && !x.isVoid() && !x.isNull()) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 432) returnStmts.stream().map(returnStmt -> {
    Optional<Expression> expression = returnStmt.getExpression();
    if (expression.isPresent()) {
        return facade.getType(expression.get());
    } else {
        return VoidType.INSTANCE;
    }
}) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 432) returnStmts.stream() ==> java.util.Collection.stream()
  Line 434) returnStmt.getExpression() ==> com.github.javaparser.ast.stmt.ReturnStmt.getExpression()
  Line 435) expression.isPresent() ==> java.util.Optional.isPresent()
  Line 436) facade.getType(expression.get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(com.github.javaparser.ast.Node)
  Line 436) expression.get() ==> java.util.Optional.get()
  Line 441) x.isVoid() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isVoid()
  Line 441) x.isNull() ==> com.github.javaparser.symbolsolver.model.typesystem.Type.isNull()
  Line 454) functionalMethod.get().returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 454) functionalMethod.get() ==> java.util.Optional.get()
  Line 457) funcInterfaceCtx.addPair(formalType, actualType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addPair(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 459) funcInterfaceCtx.resolve(funcInterfaceCtx.addSingle(functionalInterfaceType)) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.resolve(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 459) funcInterfaceCtx.addSingle(functionalInterfaceType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addSingle(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 464) lambdaCtx.addPair(result, functionalTypeWithReturn) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addPair(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 465) lambdaCtx.resolve(lambdaCtx.addSingle(result)) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.resolve(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 465) lambdaCtx.addSingle(result) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addSingle(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 471) refMethod.getCorrespondingDeclaration().getParam(pos).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 471) refMethod.getCorrespondingDeclaration().getParam(pos) ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getParam(int)
  Line 471) refMethod.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 480) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 481) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 482) JavaParserSymbolDeclaration.getParamPos(node) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.getParamPos(com.github.javaparser.ast.Node)
  Line 483) facade.solve(callExpr, false) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(com.github.javaparser.ast.expr.MethodCallExpr, boolean)
  Line 484) refMethod.isSolved() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.isSolved()
  Line 485) getParentNode(node).toString() ==> com.github.javaparser.ast.Node.toString()
  Line 485) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 485) callExpr.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 485) callExpr.getName() ==> com.github.javaparser.ast.expr.MethodCallExpr.getName()
  Line 487) logger.finest("getType on method reference expr " + refMethod.getCorrespondingDeclaration().getName()) ==> java.util.logging.Logger.finest(java.lang.String)
  Line 487) refMethod.getCorrespondingDeclaration().getName() ==> com.github.javaparser.symbolsolver.model.declarations.Declaration.getName()
  Line 487) refMethod.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
  Line 490) facade.solveMethodAsUsage(callExpr) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveMethodAsUsage(com.github.javaparser.ast.expr.MethodCallExpr)
  Line 491) usage.getParamType(pos) ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.getParamType(int)
  Line 493) JavaParserFactory.getContext(node, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 494) facade.solveGenericTypes(result, ctx, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solveGenericTypes(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.core.resolution.Context, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 499) FunctionalInterfaceLogic.getFunctionalMethod(result) ==> com.github.javaparser.symbolsolver.logic.FunctionalInterfaceLogic.getFunctionalMethod(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 500) functionalMethod.isPresent() ==> java.util.Optional.isPresent()
  Line 504) facade.toMethodUsage(methodReferenceExpr).returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 504) facade.toMethodUsage(methodReferenceExpr) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.toMethodUsage(com.github.javaparser.ast.expr.MethodReferenceExpr)
  Line 505) functionalMethod.get().returnType() ==> com.github.javaparser.symbolsolver.model.methods.MethodUsage.returnType()
  Line 505) functionalMethod.get() ==> java.util.Optional.get()
  Line 508) inferenceContext.addPair(formalType, actualType) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addPair(com.github.javaparser.symbolsolver.model.typesystem.Type, com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 509) inferenceContext.resolve(inferenceContext.addSingle(result)) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.resolve(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 509) inferenceContext.addSingle(result) ==> com.github.javaparser.symbolsolver.logic.InferenceContext.addSingle(com.github.javaparser.symbolsolver.model.typesystem.Type)
  Line 515) refMethod.getCorrespondingDeclaration().getParam(pos).getType() ==> com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration.getType()
  Line 515) refMethod.getCorrespondingDeclaration().getParam(pos) ==> com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration.getParam(int)
  Line 515) refMethod.getCorrespondingDeclaration() ==> com.github.javaparser.symbolsolver.model.resolution.SymbolReference.getCorrespondingDeclaration()
