  Line 36) modifiers.contains(Modifier.PRIVATE) ==> java.util.AbstractCollection.contains(java.lang.Object)
  Line 38) modifiers.contains(Modifier.PROTECTED) ==> java.util.AbstractCollection.contains(java.lang.Object)
  Line 40) modifiers.contains(Modifier.PUBLIC) ==> java.util.AbstractCollection.contains(java.lang.Object)
  Line 48) getPackageName(container) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getPackageName(com.github.javaparser.ast.Node)
  Line 49) getClassName("", container) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getClassName(java.lang.String, com.github.javaparser.ast.Node)
  Line 51) packageName.isEmpty() ==> java.lang.String.isEmpty()
  Line 51) className.isEmpty() ==> java.lang.String.isEmpty()
  Line 57) ((CompilationUnit) container).getPackageDeclaration() ==> com.github.javaparser.ast.CompilationUnit.getPackageDeclaration()
  Line 58) p.isPresent() ==> java.util.Optional.isPresent()
  Line 59) p.get().getName().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 59) p.get().getName() ==> com.github.javaparser.ast.PackageDeclaration.getName()
  Line 59) p.get() ==> java.util.Optional.get()
  Line 62) getPackageName(getParentNode(container)) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getPackageName(com.github.javaparser.ast.Node)
  Line 62) getParentNode(container) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 69) getClassName(base, getParentNode(container)) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getClassName(java.lang.String, com.github.javaparser.ast.Node)
  Line 69) getParentNode(container) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 70) ((com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) container).getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 70) ((com.github.javaparser.ast.body.ClassOrInterfaceDeclaration) container).getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 71) b.isEmpty() ==> java.lang.String.isEmpty()
  Line 77) getClassName(base, getParentNode(container)) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getClassName(java.lang.String, com.github.javaparser.ast.Node)
  Line 77) getParentNode(container) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
  Line 78) ((com.github.javaparser.ast.body.EnumDeclaration) container).getName().getId() ==> com.github.javaparser.ast.nodeTypes.NodeWithIdentifier.getId()
  Line 78) ((com.github.javaparser.ast.body.EnumDeclaration) container).getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 79) b.isEmpty() ==> java.lang.String.isEmpty()
  Line 85) getClassName(base, getParentNode(container)) ==> com.github.javaparser.symbolsolver.javaparsermodel.declarations.Helper.getClassName(java.lang.String, com.github.javaparser.ast.Node)
  Line 85) getParentNode(container) ==> com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode(com.github.javaparser.ast.Node)
