  Line 17) addParameter(new Parameter(type, new VariableDeclaratorId(name))) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addParameter(com.github.javaparser.ast.body.Parameter)
  Line 21) ((Node) this).tryAddImportToParentCompilationUnit(paramClass) ==> com.github.javaparser.ast.Node.tryAddImportToParentCompilationUnit(java.lang.Class<?>)
  Line 22) addParameter(new ClassOrInterfaceType(paramClass.getSimpleName()), name) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addParameter(com.github.javaparser.ast.type.Type, java.lang.String)
  Line 22) paramClass.getSimpleName() ==> java.lang.Class.getSimpleName()
  Line 32) addParameter(new ClassOrInterfaceType(className), name) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addParameter(com.github.javaparser.ast.type.Type, java.lang.String)
  Line 37) getParameters().add(parameter) ==> java.util.List.add(E)
  Line 37) getParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.getParameters()
  Line 38) parameter.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 43) addAndGetParameter(new Parameter(type, new VariableDeclaratorId(name))) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addAndGetParameter(com.github.javaparser.ast.body.Parameter)
  Line 47) ((Node) this).tryAddImportToParentCompilationUnit(paramClass) ==> com.github.javaparser.ast.Node.tryAddImportToParentCompilationUnit(java.lang.Class<?>)
  Line 48) addAndGetParameter(new ClassOrInterfaceType(paramClass.getSimpleName()), name) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addAndGetParameter(com.github.javaparser.ast.type.Type, java.lang.String)
  Line 48) paramClass.getSimpleName() ==> java.lang.Class.getSimpleName()
  Line 59) addAndGetParameter(new ClassOrInterfaceType(className), name) ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.addAndGetParameter(com.github.javaparser.ast.type.Type, java.lang.String)
  Line 63) getParameters().add(parameter) ==> java.util.List.add(E)
  Line 63) getParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.getParameters()
  Line 64) parameter.setParentNode((Node) this) ==> com.github.javaparser.ast.Node.setParentNode(com.github.javaparser.ast.Node)
  Line 75) getParameters().stream().filter(p -> p.getName().equals(name)).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 75) getParameters().stream().filter(p -> p.getName().equals(name)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 75) getParameters().stream().filter(p -> p.getName().equals(name)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 75) getParameters().stream() ==> java.util.Collection.stream()
  Line 75) getParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.getParameters()
  Line 76) p.getName().equals(name) ==> java.lang.String.equals(java.lang.Object)
  Line 76) p.getName() ==> com.github.javaparser.ast.body.Parameter.getName()
  Line 86) getParameters().stream().filter(p -> p.getType().toString().equals(type)).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 86) getParameters().stream().filter(p -> p.getType().toString().equals(type)).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 86) getParameters().stream().filter(p -> p.getType().toString().equals(type)) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 86) getParameters().stream() ==> java.util.Collection.stream()
  Line 86) getParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.getParameters()
  Line 87) p.getType().toString().equals(type) ==> java.lang.String.equals(java.lang.Object)
  Line 87) p.getType().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 87) p.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 97) getParameters().stream().filter(p -> p.getType().toString().equals(type.getSimpleName())).findFirst().orElse(null) ==> java.util.Optional.orElse(T)
  Line 97) getParameters().stream().filter(p -> p.getType().toString().equals(type.getSimpleName())).findFirst() ==> java.util.stream.Stream.findFirst()
  Line 97) getParameters().stream().filter(p -> p.getType().toString().equals(type.getSimpleName())) ==> java.util.stream.Stream.filter(java.util.function.Predicate<? super T>)
  Line 97) getParameters().stream() ==> java.util.Collection.stream()
  Line 97) getParameters() ==> com.github.javaparser.ast.nodeTypes.NodeWithParameters.getParameters()
  Line 98) p.getType().toString().equals(type.getSimpleName()) ==> java.lang.String.equals(java.lang.Object)
  Line 98) p.getType().toString() ==> com.github.javaparser.ast.Node.toString()
  Line 98) p.getType() ==> com.github.javaparser.ast.body.Parameter.getType()
  Line 98) type.getSimpleName() ==> java.lang.Class.getSimpleName()
