Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSarika Sinha2020-06-24 11:36:18 +0000
committerSarika Sinha2020-06-24 19:16:08 +0000
commit0602ab3ba9f0f9a6e47da158954a3ce747cb37ce (patch)
treee0236fdd7cdb45daef298d1fc7356ea9a883bec3
parent146cb65b1914537e39f41cc8788466be3a58b585 (diff)
downloadeclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.tar.gz
eclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.tar.xz
eclipse.jdt.core-0602ab3ba9f0f9a6e47da158954a3ce747cb37ce.zip
Bug 564607 - [14] Generate Getters are not added in the right position
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ASTRewritingRecordDeclarationTest.java55
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/internal/core/dom/rewrite/ASTRewriteAnalyzer.java14
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;
}

Back to the top