  Line 67) variableDeclarator.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 67) variableDeclarator.getName() ==> com.github.javaparser.ast.body.VariableDeclarator.getName()
  Line 72) getParentNode(parameter).getChildNodes() ==> com.github.javaparser.ast.Node.getChildNodes()
  Line 72) getParentNode(parameter) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 83) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 84) getParentNode(node) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 85) call.getArguments().size() ==> com.github.javaparser.ast.NodeList.size()
  Line 85) call.getArguments() ==> com.github.javaparser.ast.expr.MethodCallExpr.getArguments()
  Line 86) call.getArguments().get(i) ==> com.github.javaparser.ast.NodeList.get(int)
  Line 86) call.getArguments() ==> com.github.javaparser.ast.expr.MethodCallExpr.getArguments()
  Line 126) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 127) getParamPos(parameter) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.getParamPos(com.github.javaparser.ast.body.Parameter)
  Line 128) JavaParserFacade.get(typeSolver).getType(getParentNode(wrappedNode)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getType(com.github.javaparser.ast.Node)
  Line 128) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 128) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 133) wrappedNode.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 133) wrappedNode.getClass() ==> java.lang.Object.getClass()
  Line 136) parameter.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 137) PrimitiveType.byName(((com.github.javaparser.ast.type.PrimitiveType) parameter.getType()).getType().name()) ==> com.github.javaparser.symbolsolver.model.typesystem.PrimitiveType.byName(java.lang.String)
  Line 137) ((com.github.javaparser.ast.type.PrimitiveType) parameter.getType()).getType().name() ==> java.lang.Enum.name()
  Line 137) ((com.github.javaparser.ast.type.PrimitiveType) parameter.getType()).getType() ==> com.github.javaparser.ast.type.PrimitiveType.getType()
  Line 137) parameter.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 139) JavaParserFacade.get(typeSolver).convertToUsage(parameter.getType(), wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convertToUsage(com.github.javaparser.ast.type.Type, com.github.javaparser.ast.Node)
  Line 139) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 139) parameter.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 141) parameter.isVarArgs() ==> com.github.javaparser.ast.body.Parameter.isVarArgs()
  Line 149) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 150) JavaParserFacade.get(typeSolver).convert(variableDeclarator.getType(), JavaParserFactory.getContext(wrappedNode, typeSolver)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert(com.github.javaparser.ast.type.Type, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 150) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 150) variableDeclarator.getType() ==> com.github.javaparser.ast.body.VariableDeclarator.getType()
  Line 150) JavaParserFactory.getContext(wrappedNode, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 152) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 153) JavaParserFacade.get(typeSolver).convert(variableDeclarator.getType(), JavaParserFactory.getContext(wrappedNode, typeSolver)) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert(com.github.javaparser.ast.type.Type, com.github.javaparser.symbolsolver.core.resolution.Context)
  Line 153) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 153) variableDeclarator.getType() ==> com.github.javaparser.ast.body.VariableDeclarator.getType()
  Line 153) JavaParserFactory.getContext(wrappedNode, typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory.getContext(com.github.javaparser.ast.Node, com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 155) getParentNode(wrappedNode).getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 155) getParentNode(wrappedNode).getClass() ==> java.lang.Object.getClass()
  Line 155) getParentNode(wrappedNode) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 158) wrappedNode.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 158) wrappedNode.getClass() ==> java.lang.Object.getClass()
  Line 164) this.getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 164) this.getClass() ==> java.lang.Object.getClass()
  Line 164) this.getWrappedNode().getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 164) this.getWrappedNode().getClass() ==> java.lang.Object.getClass()
  Line 164) this.getWrappedNode() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration.getWrappedNode()
