  Line 51) setTryBlock(tryBlock) ==> com.github.javaparser.ast.stmt.TryStmt.setTryBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 52) setCatchs(catchs) ==> com.github.javaparser.ast.stmt.TryStmt.setCatchs(java.util.List<com.github.javaparser.ast.stmt.CatchClause>)
  Line 53) setFinallyBlock(finallyBlock) ==> com.github.javaparser.ast.stmt.TryStmt.setFinallyBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 59) setResources(resources) ==> com.github.javaparser.ast.stmt.TryStmt.setResources(java.util.List<com.github.javaparser.ast.expr.VariableDeclarationExpr>)
  Line 60) setTryBlock(tryBlock) ==> com.github.javaparser.ast.stmt.TryStmt.setTryBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 61) setCatchs(catchs) ==> com.github.javaparser.ast.stmt.TryStmt.setCatchs(java.util.List<com.github.javaparser.ast.stmt.CatchClause>)
  Line 62) setFinallyBlock(finallyBlock) ==> com.github.javaparser.ast.stmt.TryStmt.setFinallyBlock(com.github.javaparser.ast.stmt.BlockStmt)
  Line 67) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.GenericVisitor.visit(com.github.javaparser.ast.stmt.TryStmt, A)
  Line 72) v.visit(this, arg) ==> com.github.javaparser.ast.visitor.VoidVisitor.visit(com.github.javaparser.ast.stmt.TryStmt, A)
  Line 76) ensureNotNull(catchs) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 89) ensureNotNull(resources) ==> com.github.javaparser.utils.Utils.ensureNotNull(java.util.List<T>)
  Line 95) setAsParentNodeOf(this.catchs) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
  Line 101) setAsParentNodeOf(this.finallyBlock) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(com.github.javaparser.ast.Node)
  Line 107) setAsParentNodeOf(this.tryBlock) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(com.github.javaparser.ast.Node)
  Line 113) setAsParentNodeOf(this.resources) ==> com.github.javaparser.ast.Node.setAsParentNodeOf(java.util.List<? extends com.github.javaparser.ast.Node>)
