  Line 49) ((Node) this).tryAddImportToParentCompilationUnit(typeClass) ==> com.github.javaparser.ast.Node.tryAddImportToParentCompilationUnit(java.lang.Class<?>)
  Line 50) addField(typeClass.getSimpleName(), name, modifiers) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.String, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 50) typeClass.getSimpleName() ==> java.lang.Class.getSimpleName()
  Line 62) addField(new ClassOrInterfaceType(type), name, modifiers) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(com.github.javaparser.ast.type.Type<?>, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 75) fieldDeclaration.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 77) fieldDeclaration.getVariables().add(variable) ==> java.util.List.add(E)
  Line 77) fieldDeclaration.getVariables() ==> com.github.javaparser.ast.body.FieldDeclaration.getVariables()
  Line 78) variable.setParentNode(fieldDeclaration) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 79) fieldDeclaration.setModifiers(Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class)))) ==> com.github.javaparser.ast.body.FieldDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 79) Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 79) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 80) toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 80) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 81) variable.setType(type) ==> com.github.javaparser.ast.body.VariableDeclarator.setType(com.github.javaparser.ast.type.Type)
  Line 82) getMembers().add(fieldDeclaration) ==> java.util.List.add(E)
  Line 82) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 94) addField(typeClass, name, Modifier.PRIVATE) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.Class<?>, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 106) addField(type, name, Modifier.PRIVATE) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.String, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 117) addField(typeClass, name, Modifier.PUBLIC) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.Class<?>, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 129) addField(type, name, Modifier.PUBLIC) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.String, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 140) addField(typeClass, name, Modifier.PROTECTED) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.Class<?>, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 152) addField(type, name, Modifier.PROTECTED) ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.addField(java.lang.String, java.lang.String, com.github.javaparser.ast.Modifier...)
  Line 164) methodDeclaration.setName(methodName) ==> com.github.javaparser.ast.body.MethodDeclaration.setName(java.lang.String)
  Line 165) methodDeclaration.setType(VOID_TYPE) ==> com.github.javaparser.ast.body.MethodDeclaration.setType(com.github.javaparser.ast.type.Type)
  Line 166) methodDeclaration.setModifiers(Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class)))) ==> com.github.javaparser.ast.body.MethodDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 166) Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 166) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 167) toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 167) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 168) getMembers().add(methodDeclaration) ==> java.util.List.add(E)
  Line 168) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 169) methodDeclaration.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 181) constructorDeclaration.setModifiers(Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class)))) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 181) Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class))) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 181) Arrays.stream(modifiers) ==> java.util.Arrays.stream(T[])
  Line 182) toCollection(() -> EnumSet.noneOf(Modifier.class)) ==> java.util.stream.Collectors.toCollection(java.util.function.Supplier<C>)
  Line 182) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 183) constructorDeclaration.setName(((TypeDeclaration<?>) this).getName()) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setName(java.lang.String)
  Line 183) ((TypeDeclaration<?>) this).getName() ==> com.github.javaparser.ast.body.TypeDeclaration.getName()
  Line 184) getMembers().add(constructorDeclaration) ==> java.util.List.add(E)
  Line 184) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 185) constructorDeclaration.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 192) getMembers().add(initializerDeclaration) ==> java.util.List.add(E)
  Line 192) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 193) initializerDeclaration.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 200) getMembers().add(initializerDeclaration) ==> java.util.List.add(E)
  Line 200) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 201) initializerDeclaration.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 212) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getName().equals(name)).map(m -> (MethodDeclaration) m).collect(toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 212) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getName().equals(name)).map(m -> (MethodDeclaration) m) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 212) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getName().equals(name)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 212) getMembers().stream() ==> java.util.Collection.stream()
  Line 212) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 213) ((MethodDeclaration) m).getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 213) ((MethodDeclaration) m).getName() ==> com.github.javaparser.ast.body.MethodDeclaration.getName()
  Line 214) toList() ==> java.util.stream.Collectors.toList()
  Line 223) unmodifiableList(getMembers().stream().filter(m -> m instanceof MethodDeclaration).map(m -> (MethodDeclaration) m).collect(toList())) ==> java.util.Collections.unmodifiableList(java.util.List<? extends T>)
  Line 223) getMembers().stream().filter(m -> m instanceof MethodDeclaration).map(m -> (MethodDeclaration) m).collect(toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 223) getMembers().stream().filter(m -> m instanceof MethodDeclaration).map(m -> (MethodDeclaration) m) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 223) getMembers().stream().filter(m -> m instanceof MethodDeclaration) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 223) getMembers().stream() ==> java.util.Collection.stream()
  Line 223) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 226) toList() ==> java.util.stream.Collectors.toList()
  Line 237) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).collect(toSet()))).map(m -> (MethodDeclaration) m).collect(toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 237) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).collect(toSet()))).map(m -> (MethodDeclaration) m) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 237) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).collect(toSet()))) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 237) getMembers().stream() ==> java.util.Collection.stream()
  Line 237) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 239) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).collect(toSet())) ==> java.util.Set.equals(java.lang.Object)
  Line 239) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 239) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 239) ((MethodDeclaration) m).getParameters().stream() ==> java.util.Collection.stream()
  Line 239) ((MethodDeclaration) m).getParameters() ==> com.github.javaparser.ast.body.MethodDeclaration.getParameters()
  Line 239) p.getType().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 239) p.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 240) toSet() ==> java.util.stream.Collectors.toSet()
  Line 240) Stream.of(paramTypes).collect(toSet()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 240) Stream.of(paramTypes) ==> java.util.stream.Stream.of(T...)
  Line 240) toSet() ==> java.util.stream.Collectors.toSet()
  Line 241) toList() ==> java.util.stream.Collectors.toList()
  Line 252) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toSet()))).map(m -> (MethodDeclaration) m).collect(toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 252) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toSet()))).map(m -> (MethodDeclaration) m) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 252) getMembers().stream().filter(m -> m instanceof MethodDeclaration && ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toSet()))) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 252) getMembers().stream() ==> java.util.Collection.stream()
  Line 252) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 254) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()).equals(Stream.of(paramTypes).map(Class::getSimpleName).collect(toSet())) ==> java.util.Set.equals(java.lang.Object)
  Line 254) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()).collect(toSet()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 254) ((MethodDeclaration) m).getParameters().stream().map(p -> p.getType().toString()) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 254) ((MethodDeclaration) m).getParameters().stream() ==> java.util.Collection.stream()
  Line 254) ((MethodDeclaration) m).getParameters() ==> com.github.javaparser.ast.body.MethodDeclaration.getParameters()
  Line 254) p.getType().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 254) p.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 255) toSet() ==> java.util.stream.Collectors.toSet()
  Line 256) Stream.of(paramTypes).map(Class::getSimpleName).collect(toSet()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 256) Stream.of(paramTypes).map(Class::getSimpleName) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 256) Stream.of(paramTypes) ==> java.util.stream.Stream.of(T...)
  Line 256) toSet() ==> java.util.stream.Collectors.toSet()
  Line 257) toList() ==> java.util.stream.Collectors.toList()
  Line 267) getMembers().stream().filter(m -> m instanceof FieldDeclaration && ((FieldDeclaration) m).getVariables().stream().anyMatch(var -> var.getId().getName().equals(name))).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 267) getMembers().stream().filter(m -> m instanceof FieldDeclaration && ((FieldDeclaration) m).getVariables().stream().anyMatch(var -> var.getId().getName().equals(name))).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 267) getMembers().stream().filter(m -> m instanceof FieldDeclaration && ((FieldDeclaration) m).getVariables().stream().anyMatch(var -> var.getId().getName().equals(name))) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 267) getMembers().stream() ==> java.util.Collection.stream()
  Line 267) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 268) ((FieldDeclaration) m).getVariables().stream().anyMatch(var -> var.getId().getName().equals(name)) ==> java.util.stream.Stream.anyMatch(java.util.function.Predicate<? super T>)
  Line 268) ((FieldDeclaration) m).getVariables().stream() ==> java.util.Collection.stream()
  Line 268) ((FieldDeclaration) m).getVariables() ==> com.github.javaparser.ast.body.FieldDeclaration.getVariables()
  Line 269) var.getId().getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 269) var.getId().getName() ==> com.github.javaparser.ast.body.VariableDeclaratorId.getName()
  Line 269) var.getId() ==> com.github.javaparser.ast.body.VariableDeclarator.getId()
  Line 279) unmodifiableList(getMembers().stream().filter(m -> m instanceof FieldDeclaration).map(m -> (FieldDeclaration) m).collect(toList())) ==> java.util.Collections.unmodifiableList(java.util.List<? extends T>)
  Line 279) getMembers().stream().filter(m -> m instanceof FieldDeclaration).map(m -> (FieldDeclaration) m).collect(toList()) ==> java.util.stream.Stream.collect(java.util.stream.Collector<? super T, A, R>)
  Line 279) getMembers().stream().filter(m -> m instanceof FieldDeclaration).map(m -> (FieldDeclaration) m) ==> java.util.stream.Stream.map(java.util.function.Function<? super T, ? extends R>)
  Line 279) getMembers().stream().filter(m -> m instanceof FieldDeclaration) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 279) getMembers().stream() ==> java.util.Collection.stream()
  Line 279) getMembers() ==> com.github.javaparser.ast.nodeTypes.NodeWithMembers.getMembers()
  Line 282) toList() ==> java.util.stream.Collectors.toList()
