  Line 51) EnumSet.noneOf(Modifier.class) ==> java.util.EnumSet.noneOf(java.lang.Class<E>)
  Line 67) setModifiers(modifiers) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 68) setName(name) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setName(java.lang.String)
  Line 76) setModifiers(modifiers) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 77) setTypeParameters(typeParameters) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setTypeParameters(java.util.List<com.github.javaparser.ast.type.TypeParameter>)
  Line 78) setName(name) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setName(java.lang.String)
  Line 79) setParameters(parameters) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setParameters(java.util.List<com.github.javaparser.ast.body.Parameter>)
  Line 80) setThrows(throws_) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setThrows(java.util.List<com.github.javaparser.ast.type.ReferenceType>)
  Line 81) setBody(block) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 88) setModifiers(modifiers) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setModifiers(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 89) setTypeParameters(typeParameters) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setTypeParameters(java.util.List<com.github.javaparser.ast.type.TypeParameter>)
  Line 90) setName(name) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setName(java.lang.String)
  Line 91) setParameters(parameters) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setParameters(java.util.List<com.github.javaparser.ast.body.Parameter>)
  Line 92) setThrows(throws_) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setThrows(java.util.List<com.github.javaparser.ast.type.ReferenceType>)
  Line 93) setBody(block) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setBody(com.github.javaparser.ast.stmt.BlockStmt)
  Line 98) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.GenericVisitor.visit(com.github.javaparser.ast.body.ConstructorDeclaration, A)
  Line 103) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.VoidVisitor.visit(com.github.javaparser.ast.body.ConstructorDeclaration, A)
  Line 119) name.getName() ==> com.github.javaparser.ast.expr.NameExpr.getName()
  Line 128) ensureNotNull(parameters) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 134) ensureNotNull(throws_) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 139) ensureNotNull(typeParameters) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 151) setNameExpr(new NameExpr(name)) ==> com.github.javaparser.ast.body.ConstructorDeclaration.setNameExpr(com.github.javaparser.ast.expr.NameExpr)
  Line 157) setAsParentNodeOf(this.name) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(com.github.javaparser.ast.Node)
  Line 164) setAsParentNodeOf(this.parameters) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 171) setAsParentNodeOf(this.throws_) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 177) setAsParentNodeOf(this.typeParameters) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 192) Modifier.getAccessSpecifier(getModifiers()) ==> com.github.javaparser.ast.Modifier.getAccessSpecifier(java.util.EnumSet<com.github.javaparser.ast.Modifier>)
  Line 192) getModifiers() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getModifiers()
  Line 193) sb.append(accessSpecifier.getCodeRepresenation()) ==> java.lang.StringBuilder.append(java.lang.String)
  Line 193) accessSpecifier.getCodeRepresenation() ==> com.github.javaparser.ast.AccessSpecifier.getCodeRepresenation()
  Line 194) sb.append(accessSpecifier == AccessSpecifier.DEFAULT ? "" : " ") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 196) sb.append(getName()) ==> java.lang.StringBuilder.append(java.lang.String)
  Line 196) getName() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getName()
  Line 197) sb.append("(") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 199) getParameters() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getParameters()
  Line 203) sb.append(", ") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 206) sb.append(param.toStringWithoutComments()) ==> java.lang.StringBuilder.append(java.lang.String)
  Line 206) param.toStringWithoutComments() ==> com.github.javaparser.ast.Node.toStringWithoutComments()
  Line 208) sb.append(param.getElementType().toStringWithoutComments()) ==> java.lang.StringBuilder.append(java.lang.String)
  Line 208) param.getElementType().toStringWithoutComments() ==> com.github.javaparser.ast.Node.toStringWithoutComments()
  Line 208) param.getElementType() ==> com.github.javaparser.ast.body.Parameter.getElementType()
  Line 211) sb.append(")") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 214) getThrows() ==> com.github.javaparser.ast.body.ConstructorDeclaration.getThrows()
  Line 217) sb.append(" throws ") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 219) sb.append(", ") ==> java.lang.StringBuilder.append(java.lang.String)
  Line 221) sb.append(thr.toStringWithoutComments()) ==> java.lang.StringBuilder.append(java.lang.String)
  Line 221) thr.toStringWithoutComments() ==> com.github.javaparser.ast.Node.toStringWithoutComments()
  Line 224) sb.toString() ==> java.lang.StringBuilder.toString()
  Line 229) getDeclarationAsString(includingModifiers, includingThrows, true) ==> com.github.javaparser.ast.body.ConstructorDeclaration.getDeclarationAsString(boolean, boolean, boolean)
  Line 234) getDeclarationAsString(true, true, true) ==> com.github.javaparser.ast.body.ConstructorDeclaration.getDeclarationAsString(boolean, boolean, boolean)
  Line 239) getComment() ==> com.github.javaparser.ast.Node.getComment()
  Line 240) getComment() ==> com.github.javaparser.ast.Node.getComment()
  Line 253) setAsParentNodeOf(body) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(com.github.javaparser.ast.Node)
