  Line 79) setPackage(pakage) ==> com.github.javaparser.ast.CompilationUnit.setPackage(com.github.javaparser.ast.PackageDeclaration)
  Line 80) setImports(imports) ==> com.github.javaparser.ast.CompilationUnit.setImports(java.util.List<com.github.javaparser.ast.ImportDeclaration>)
  Line 81) setTypes(types) ==> com.github.javaparser.ast.CompilationUnit.setTypes(java.util.List<com.github.javaparser.ast.body.TypeDeclaration<?>>)
  Line 87) setPackage(pakage) ==> com.github.javaparser.ast.CompilationUnit.setPackage(com.github.javaparser.ast.PackageDeclaration)
  Line 88) setImports(imports) ==> com.github.javaparser.ast.CompilationUnit.setImports(java.util.List<com.github.javaparser.ast.ImportDeclaration>)
  Line 89) setTypes(types) ==> com.github.javaparser.ast.CompilationUnit.setTypes(java.util.List<com.github.javaparser.ast.body.TypeDeclaration<?>>)
  Line 94) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.GenericVisitor.visit(com.github.javaparser.ast.CompilationUnit, A)
  Line 99) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.VoidVisitor.visit(com.github.javaparser.ast.CompilationUnit, A)
  Line 115) this.getAllContainedComments() ==> com.github.javaparser.ast.Node.getAllContainedComments()
  Line 125) ensureNotNull(imports) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 151) ensureNotNull(types) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 174) setAsParentNodeOf(this.imports) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 187) setAsParentNodeOf(this.pakage) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(com.github.javaparser.ast.Node)
  Line 199) setAsParentNodeOf(this.types) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 210) setPackage(new PackageDeclaration(name(name))) ==> com.github.javaparser.ast.CompilationUnit.setPackage(com.github.javaparser.ast.PackageDeclaration)
  Line 210) name(name) ==> com.github.javaparser.ast.expr.NameExpr.name(java.lang.String)
  Line 222) addImport(name, false, false) ==> com.github.javaparser.ast.CompilationUnit.addImport(java.lang.String, boolean, boolean)
  Line 233) ClassUtils.isPrimitiveOrWrapper(clazz) ==> com.github.javaparser.utils.ClassUtils.isPrimitiveOrWrapper(java.lang.Class<?>)
  Line 233) clazz.getName().startsWith("java.lang") ==> java.lang.String.startsWith(java.lang.String)
  Line 233) clazz.getName() ==> java.lang.Class.getName()
  Line 235) clazz.isArray() ==> java.lang.Class.isArray()
  Line 235) ClassUtils.isPrimitiveOrWrapper(clazz.getComponentType()) ==> com.github.javaparser.utils.ClassUtils.isPrimitiveOrWrapper(java.lang.Class<?>)
  Line 235) clazz.getComponentType() ==> java.lang.Class.getComponentType()
  Line 236) clazz.getComponentType().getName().startsWith("java.lang") ==> java.lang.String.startsWith(java.lang.String)
  Line 236) clazz.getComponentType().getName() ==> java.lang.Class.getName()
  Line 236) clazz.getComponentType() ==> java.lang.Class.getComponentType()
  Line 237) addImport(clazz.getComponentType().getName()) ==> com.github.javaparser.ast.CompilationUnit.addImport(java.lang.String)
  Line 237) clazz.getComponentType().getName() ==> java.lang.Class.getName()
  Line 237) clazz.getComponentType() ==> java.lang.Class.getComponentType()
  Line 238) addImport(clazz.getName()) ==> com.github.javaparser.ast.CompilationUnit.addImport(java.lang.String)
  Line 238) clazz.getName() ==> java.lang.Class.getName()
  Line 251) getImports().stream().anyMatch(i -> i.getName().toString().equals(name)) ==> java.util.stream.Stream.anyMatch(java.util.function.Predicate<? super T>)
  Line 251) getImports().stream() ==> java.util.Collection.stream()
  Line 251) getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 251) i.getName().toString().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 251) i.getName().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 251) i.getName() ==> com.github.javaparser.ast.ImportDeclaration.getName()
  Line 254) name(name) ==> com.github.javaparser.ast.expr.NameExpr.name(java.lang.String)
  Line 256) getImports().add(importDeclaration) ==> java.util.List.add(E)
  Line 256) getImports() ==> com.github.javaparser.ast.CompilationUnit.getImports()
  Line 257) importDeclaration.setParentNode(this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 269) addClass(name, Modifier.PUBLIC) ==> com.github.javaparser.ast.CompilationUnit.addClass(java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 281) Arrays.stream(modifiers).collect(Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 281) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 282) Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 282) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 284) getTypes().add(classOrInterfaceDeclaration) ==> java.util.List.add(E)
  Line 284) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 285) classOrInterfaceDeclaration.setParentNode(this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 296) addInterface(name, Modifier.PUBLIC) ==> com.github.javaparser.ast.CompilationUnit.addInterface(java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 308) Arrays.stream(modifiers).collect(Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 308) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 309) Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 309) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 311) getTypes().add(classOrInterfaceDeclaration) ==> java.util.List.add(E)
  Line 311) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 312) classOrInterfaceDeclaration.setParentNode(this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 323) addEnum(name, Modifier.PUBLIC) ==> com.github.javaparser.ast.CompilationUnit.addEnum(java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 334) Arrays.stream(modifiers).collect(Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 334) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 335) Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 335) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 336) getTypes().add(enumDeclaration) ==> java.util.List.add(E)
  Line 336) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 337) enumDeclaration.setParentNode(this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 348) addAnnotationDeclaration(name, Modifier.PUBLIC) ==> com.github.javaparser.ast.CompilationUnit.addAnnotationDeclaration(java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 359) Arrays.stream(modifiers).collect(Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 359) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 360) Collectors.toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 360) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 361) getTypes().add(annotationDeclaration) ==> java.util.List.add(E)
  Line 361) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 362) annotationDeclaration.setParentNode(this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 373) getTypes().stream().filter(type -> type.getName().equals(className) && type instanceof ClassOrInterfaceDeclaration && !((ClassOrInterfaceDeclaration) type).isInterface()).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 373) getTypes().stream().filter(type -> type.getName().equals(className) && type instanceof ClassOrInterfaceDeclaration && !((ClassOrInterfaceDeclaration) type).isInterface()).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 373) getTypes().stream().filter(type -> type.getName().equals(className) && type instanceof ClassOrInterfaceDeclaration && !((ClassOrInterfaceDeclaration) type).isInterface()) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 373) getTypes().stream() ==> java.util.Collection.stream()
  Line 373) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 373) type.getName().equals(className) ==> java.lang.String.equals(java.lang.Object)
  Line 373) type.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 374) ((ClassOrInterfaceDeclaration) type).isInterface() ==> com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.isInterface()
  Line 385) getTypes().stream().filter(type -> type.getName().equals(interfaceName) && type instanceof ClassOrInterfaceDeclaration && ((ClassOrInterfaceDeclaration) type).isInterface()).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 385) getTypes().stream().filter(type -> type.getName().equals(interfaceName) && type instanceof ClassOrInterfaceDeclaration && ((ClassOrInterfaceDeclaration) type).isInterface()).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 385) getTypes().stream().filter(type -> type.getName().equals(interfaceName) && type instanceof ClassOrInterfaceDeclaration && ((ClassOrInterfaceDeclaration) type).isInterface()) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 385) getTypes().stream() ==> java.util.Collection.stream()
  Line 385) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 385) type.getName().equals(interfaceName) ==> java.lang.String.equals(java.lang.Object)
  Line 385) type.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 386) ((ClassOrInterfaceDeclaration) type).isInterface() ==> com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.isInterface()
  Line 397) getTypes().stream().filter(type -> type.getName().equals(enumName) && type instanceof EnumDeclaration).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 397) getTypes().stream().filter(type -> type.getName().equals(enumName) && type instanceof EnumDeclaration).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 397) getTypes().stream().filter(type -> type.getName().equals(enumName) && type instanceof EnumDeclaration) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 397) getTypes().stream() ==> java.util.Collection.stream()
  Line 397) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 397) type.getName().equals(enumName) ==> java.lang.String.equals(java.lang.Object)
  Line 397) type.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 409) getTypes().stream().filter(type -> type.getName().equals(annotationName) && type instanceof AnnotationDeclaration).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 409) getTypes().stream().filter(type -> type.getName().equals(annotationName) && type instanceof AnnotationDeclaration).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 409) getTypes().stream().filter(type -> type.getName().equals(annotationName) && type instanceof AnnotationDeclaration) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 409) getTypes().stream() ==> java.util.Collection.stream()
  Line 409) getTypes() ==> com.github.javaparser.ast.CompilationUnit.getTypes()
  Line 409) type.getName().equals(annotationName) ==> java.lang.String.equals(java.lang.Object)
  Line 409) type.getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
