diff options
author | Sarika Sinha | 2020-06-24 11:36:18 +0000 |
---|---|---|
committer | Sarika Sinha | 2020-06-24 19:16:08 +0000 |
commit | 0602ab3ba9f0f9a6e47da158954a3ce747cb37ce (patch) | |
tree | e0236fdd7cdb45daef298d1fc7356ea9a883bec3 | |
parent | 146cb65b1914537e39f41cc8788466be3a58b585 (diff) | |
download | eclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.tar.gz eclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.tar.xz eclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.zip |
in Record
Change-Id: Id9dcbcb11f75ab2de569095e358533220695f12a
2 files changed, 68 insertions, 1 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingRecordDeclarationTest.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingRecordDeclarationTest.java index c8d96c7aea..7d8d862e0e 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingRecordDeclarationTest.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingRecordDeclarationTest.java @@ -31,6 +31,7 @@ import org.eclipse.jdt.core.dom.MethodDeclaration; import org.eclipse.jdt.core.dom.Modifier; import org.eclipse.jdt.core.dom.PrimitiveType; import org.eclipse.jdt.core.dom.RecordDeclaration; +import org.eclipse.jdt.core.dom.ReturnStatement; import org.eclipse.jdt.core.dom.SingleVariableDeclaration; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jdt.core.dom.rewrite.ListRewrite; @@ -184,6 +185,60 @@ public class ASTRewritingRecordDeclarationTest extends ASTRewritingTest { } + @SuppressWarnings("deprecation") + public void testRecord_003() throws Exception { + if (this.apiLevel != 14) { + System.err.println("Test "+getName()+" requires a JRE 14"); + return; + } + IPackageFragment pack1= this.sourceFolder.createPackageFragment("test1", false, null); + StringBuffer buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("public record C(int age) {\n"); + buf.append("\n"); + buf.append("}\n"); + ICompilationUnit cu= pack1.createCompilationUnit("C.java", buf.toString(), false, null); + + CompilationUnit astRoot= createAST(cu); + ASTRewrite rewrite= ASTRewrite.create(astRoot.getAST()); + + AST ast= astRoot.getAST(); + + assertTrue("Parse errors", (astRoot.getFlags() & ASTNode.MALFORMED) == 0); + AbstractTypeDeclaration type= findAbstractTypeDeclaration(astRoot, "C"); + assertTrue("Not a record", type instanceof RecordDeclaration); + RecordDeclaration record = (RecordDeclaration)type; + { // rename first param & last throw statement + MethodDeclaration methodDecl1 = ast.newMethodDeclaration(); + methodDecl1.setName(ast.newSimpleName("age")); + methodDecl1.modifiers().addAll(ast.newModifiers( Modifier.PUBLIC)); + methodDecl1.setReturnType2(ast.newPrimitiveType(PrimitiveType.INT)); + Block body= ast.newBlock(); + ReturnStatement returnStatement = ast.newReturnStatement(); + returnStatement.setExpression(ast.newSimpleName("age")); + body.statements().add(returnStatement); + methodDecl1.setBody(body); + ListRewrite listRewrite= rewrite.getListRewrite(record, RecordDeclaration.BODY_DECLARATIONS_PROPERTY); + listRewrite.insertLast(methodDecl1, null); + + } + + String preview= evaluateRewrite(cu, rewrite); + + buf= new StringBuffer(); + buf.append("package test1;\n"); + buf.append("public record C(int age) {\n\n"); + buf.append(" public int age() {\n"); + buf.append(" return age;\n"); + buf.append(" }\n"); + buf.append("\n"); + buf.append("}\n"); + assertEqualString(preview, buf.toString()); + + assertEqualString(preview, buf.toString()); + + } + } diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java index 9bb0afd033..ce7044cb56 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java @@ -1417,6 +1417,17 @@ public final class ASTRewriteAnalyzer extends ASTVisitor { } /* + * Next token is a right parenthesis. Returns the offset after the parenthesis. For incomplete code, return the start offset. + */ + private int getPosAfterRightParenthesis(int pos) { + try { + return getPosAfterToken(pos, TerminalTokens.TokenNameRPAREN); + } catch (IllegalArgumentException e) { + return pos; + } + } + + /* * Next token is try keyword. Returns the offset after 'try' keyword. For incomplete code, return the start offset. */ private int getPosAfterTry(int pos) { @@ -2267,7 +2278,8 @@ public final class ASTRewriteAnalyzer extends ASTVisitor { // type members // startPos : find position after left brace of type, be aware that bracket might be missing int startIndent= getIndent(node.getStartPosition()) + 1; - int startPos= getPosAfterLeftBrace(pos); + int startPos= getPosAfterRightParenthesis(pos); + startPos= getPosAfterLeftBrace(startPos); rewriteParagraphList(node, RecordDeclaration.BODY_DECLARATIONS_PROPERTY, startPos, startIndent, -1, 2); return false; } |