public void testCatchClause() throws Exception { IPackageFragment pack1 = this.sourceFolder.createPackageFragment("test1", false, null); StringBuffer buf = new StringBuffer(); buf.append("function foo() {\n"); buf.append(" try {\n"); buf.append(" } catch (e) {\n"); buf.append(" }\n"); buf.append("}\n"); IJavaScriptUnit cu = pack1.createCompilationUnit("E.js", buf.toString(), false, null); JavaScriptUnit astRoot = createAST(cu); ASTRewrite rewrite = ASTRewrite.create(astRoot.getAST()); AST ast = astRoot.getAST(); assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); FunctionDeclaration methodDecl = findMethodDeclaration(astRoot, "foo"); Block block = methodDecl.getBody(); List statements = block.statements(); assertTrue("Number of statements not 3", statements.size() == 1); List catchClauses = ((TryStatement) statements.get(0)).catchClauses(); assertTrue("Number of catchClauses not 1", catchClauses.size() == 1); { // change exception type CatchClause clause = (CatchClause) catchClauses.get(0); SingleVariableDeclaration exception = clause.getException(); SingleVariableDeclaration newException = ast.newSingleVariableDeclaration(); newException.setName(ast.newSimpleName("ex")); rewrite.replace(exception, newException, null); } { // change body CatchClause clause = (CatchClause) catchClauses.get(0); Block body = clause.getBody(); Block newBody = ast.newBlock(); ReturnStatement returnStatement = ast.newReturnStatement(); newBody.statements().add(returnStatement); rewrite.replace(body, newBody, null); } String preview = evaluateRewrite(cu, rewrite); buf = new StringBuffer(); buf.append("function foo() {\n"); buf.append(" try {\n"); buf.append(" } catch (ex) {\n"); buf.append(" return;\n"); buf.append(" }\n"); buf.append("}\n"); assertEqualString(preview, buf.toString()); }
/* * @see ASTVisitor#visit(FunctionDeclaration) */ public boolean visit(FunctionDeclaration node) { if (node.getJavadoc() != null) { node.getJavadoc().accept(this); } if (node.getAST().apiLevel() == AST.JLS2) { printModifiers(node.getModifiers()); } if (node.getAST().apiLevel() >= AST.JLS3) { printModifiers(node.modifiers()); } // if (!node.isConstructor()) { // if (node.getAST().apiLevel() == AST.JLS2) { // node.getReturnType().accept(this); // } else { // if (node.getReturnType2() != null) { // node.getReturnType2().accept(this); // } else { // // methods really ought to have a return type // this.fBuffer.append("void");//$NON-NLS-1$ // } // } // this.fBuffer.append(" ");//$NON-NLS-1$ // } if (node.getName() != null) node.getName().accept(this); this.fBuffer.append("("); // $NON-NLS-1$ for (Iterator it = node.parameters().iterator(); it.hasNext(); ) { SingleVariableDeclaration v = (SingleVariableDeclaration) it.next(); v.accept(this); if (it.hasNext()) { this.fBuffer.append(","); // $NON-NLS-1$ } } this.fBuffer.append(")"); // $NON-NLS-1$ for (int i = 0; i < node.getExtraDimensions(); i++) { this.fBuffer.append("[]"); // $NON-NLS-1$ } if (!node.thrownExceptions().isEmpty()) { this.fBuffer.append(" throws "); // $NON-NLS-1$ for (Iterator it = node.thrownExceptions().iterator(); it.hasNext(); ) { Name n = (Name) it.next(); n.accept(this); if (it.hasNext()) { this.fBuffer.append(", "); // $NON-NLS-1$ } } this.fBuffer.append(" "); // $NON-NLS-1$ } if (node.getBody() == null) { this.fBuffer.append(";"); // $NON-NLS-1$ } else { node.getBody().accept(this); } return false; }
/* * @see ASTVisitor#visit(SingleVariableDeclaration) */ public boolean visit(SingleVariableDeclaration node) { if (node.getAST().apiLevel() == AST.JLS2) { printModifiers(node.getModifiers()); } if (node.getAST().apiLevel() >= AST.JLS3) { printModifiers(node.modifiers()); } // node.getType().accept(this); if (node.getAST().apiLevel() >= AST.JLS3) { if (node.isVarargs()) { this.fBuffer.append("..."); // $NON-NLS-1$ } } this.fBuffer.append(" "); // $NON-NLS-1$ node.getName().accept(this); for (int i = 0; i < node.getExtraDimensions(); i++) { this.fBuffer.append("[]"); // $NON-NLS-1$ } if (node.getInitializer() != null) { this.fBuffer.append("="); // $NON-NLS-1$ node.getInitializer().accept(this); } return false; }
/** @deprecated using deprecated code */ public void testMethodParamsRenameReorder() throws Exception { if (true) return; IPackageFragment pack1 = this.sourceFolder.createPackageFragment("test1", false, null); StringBuffer buf = new StringBuffer(); buf.append(" function m( y, a) {\n"); buf.append(" m(y, a);\n"); buf.append(" }\n"); IJavaScriptUnit cu = pack1.createCompilationUnit("E.js", buf.toString(), false, null); JavaScriptUnit astRoot = createAST(cu); ASTRewrite rewrite = ASTRewrite.create(astRoot.getAST()); AST ast = astRoot.getAST(); assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); // TypeDeclaration type= findTypeDeclaration(astRoot, "E"); FunctionDeclaration methodDecl = findMethodDeclaration(astRoot, "m"); Block block = methodDecl.getBody(); List statements = block.statements(); assertTrue("Number of statements not 1", statements.size() == 1); { // params List params = methodDecl.parameters(); SingleVariableDeclaration firstParam = (SingleVariableDeclaration) params.get(0); SingleVariableDeclaration secondParam = (SingleVariableDeclaration) params.get(1); // args ExpressionStatement stmt = (ExpressionStatement) statements.get(0); FunctionInvocation invocation = (FunctionInvocation) stmt.getExpression(); List arguments = invocation.arguments(); SimpleName first = (SimpleName) arguments.get(0); SimpleName second = (SimpleName) arguments.get(1); // rename args SimpleName newFirstArg = methodDecl.getAST().newSimpleName("yyy"); SimpleName newSecondArg = methodDecl.getAST().newSimpleName("bb"); rewrite.replace(first, newFirstArg, null); rewrite.replace(second, newSecondArg, null); // rename params SimpleName newFirstName = methodDecl.getAST().newSimpleName("yyy"); SimpleName newSecondName = methodDecl.getAST().newSimpleName("bb"); rewrite.replace(firstParam.getName(), newFirstName, null); rewrite.replace(secondParam.getName(), newSecondName, null); // reoder params ASTNode paramplaceholder1 = rewrite.createCopyTarget(firstParam); ASTNode paramplaceholder2 = rewrite.createCopyTarget(secondParam); rewrite.replace(firstParam, paramplaceholder2, null); rewrite.replace(secondParam, paramplaceholder1, null); // reorder args ASTNode placeholder1 = rewrite.createCopyTarget(first); ASTNode placeholder2 = rewrite.createCopyTarget(second); rewrite.replace(first, placeholder2, null); rewrite.replace(second, placeholder1, null); } String preview = evaluateRewrite(cu, rewrite); buf = new StringBuffer(); buf.append(" function m(bb, yyy) {\n"); buf.append(" m(bb, yyy);\n"); buf.append(" }\n"); assertEqualString(preview, buf.toString()); }