  Line 51) getParentNode(variableDeclarator) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 52) getParentNode(variableDeclarator).getClass().getCanonicalName() ==> java.lang.Class.getCanonicalName()
  Line 52) getParentNode(variableDeclarator).getClass() ==> java.lang.Object.getClass()
  Line 52) getParentNode(variableDeclarator) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 54) getParentNode(variableDeclarator) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 68) getParentNode(enumConstantDeclaration) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 71) JavaParserFacade.get(typeSolver).convert(variableDeclarator.getType(), wrappedNode) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.convert(com.github.javaparser.ast.type.Type, com.github.javaparser.ast.Node)
  Line 71) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 71) variableDeclarator.getType() ==> com.github.javaparser.ast.body.VariableDeclarator.getType()
  Line 79) enumConstantDeclaration.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 79) enumConstantDeclaration.getName() ==> com.github.javaparser.ast.body.EnumConstantDeclaration.getName()
  Line 81) variableDeclarator.getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 81) variableDeclarator.getName() ==> com.github.javaparser.ast.body.VariableDeclarator.getName()
  Line 87) wrappedNode.getModifiers().contains(Modifier.STATIC) ==> java.util.AbstractCollection.contains(java.lang.Object)
  Line 87) wrappedNode.getModifiers() ==> com.github.javaparser.ast.body.FieldDeclaration.getModifiers()
  Line 106) getName() ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration.getName()
  Line 111) Helper.toAccessLevel(wrappedNode.getModifiers()) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.toAccessLevel(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 111) wrappedNode.getModifiers() ==> com.github.javaparser.ast.body.FieldDeclaration.getModifiers()
  Line 116) Navigator.findAncestor(wrappedNode, com.github.javaparser.ast.body.TypeDeclaration.class) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.findAncestor(com.github.javaparser.ast.Node, java.lang.Class<N>)
  Line 117) typeDeclaration.isPresent() ==> java.util.Optional.isPresent()
  Line 118) JavaParserFacade.get(typeSolver).getTypeDeclaration(typeDeclaration.get()) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.getTypeDeclaration(com.github.javaparser.ast.body.TypeDeclaration<?>)
  Line 118) JavaParserFacade.get(typeSolver) ==> com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.get(com.github.javaparser.symbolsolver.model.resolution.TypeSolver)
  Line 118) typeDeclaration.get() ==> java.util.Optional.get()
