diff options
| author | Olivier Thomann | 2015-01-05 05:02:03 +0000 |
|---|---|---|
| committer | Manoj Palat | 2015-01-05 05:02:03 +0000 |
| commit | 1bf86fe4326efd3891490b85eefffb1c336ab872 (patch) | |
| tree | 0af8bad4436971eb81c1786d9ffa9ce1759baae1 | |
| parent | 37b18fe3dec30aacdbf97606c4be5a6236865064 (diff) | |
| download | eclipse.jdt.core-1bf86fe4326efd3891490b85eefffb1c336ab872.tar.gz eclipse.jdt.core-1bf86fe4326efd3891490b85eefffb1c336ab872.tar.xz eclipse.jdt.core-1bf86fe4326efd3891490b85eefffb1c336ab872.zip | |
Fix for [Bug][455986]
ASTParser ignores call to super() in K_STATEMENTS mode
| -rw-r--r-- | org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterTestAST3_2.java | 23 | ||||
| -rw-r--r-- | org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java | 5 |
2 files changed, 28 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterTestAST3_2.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterTestAST3_2.java index 29a079dd7b..463e65a43a 100644 --- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterTestAST3_2.java +++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/dom/ASTConverterTestAST3_2.java @@ -92,6 +92,7 @@ import org.eclipse.jdt.core.dom.SimpleType; import org.eclipse.jdt.core.dom.SingleVariableDeclaration; import org.eclipse.jdt.core.dom.Statement; import org.eclipse.jdt.core.dom.StringLiteral; +import org.eclipse.jdt.core.dom.SuperConstructorInvocation; import org.eclipse.jdt.core.dom.SuperFieldAccess; import org.eclipse.jdt.core.dom.SuperMethodInvocation; import org.eclipse.jdt.core.dom.SwitchCase; @@ -10646,4 +10647,26 @@ public class ASTConverterTestAST3_2 extends ConverterTestSetup { Object o = resultCompilationUnit.types().get(0); assertEquals(o.toString(), source); } + /** + * https://bugs.eclipse.org/bugs/show_bug.cgi?id=455986 + */ + public void test0723() { + String src = "super();"; + char[] source = src.toCharArray(); + ASTParser parser = ASTParser.newParser(getJLS3()); + parser.setKind (ASTParser.K_STATEMENTS); + parser.setIgnoreMethodBodies(true); + parser.setSource (source); + ASTNode result = parser.createAST (null); + assertNotNull("no result", result); + assertEquals("Wrong type", ASTNode.BLOCK, result.getNodeType()); + Block block = (Block) result; + List statements = block.statements(); + assertNotNull("No statements", statements); + assertEquals("Wrong size", 1, statements.size()); + final ASTNode node = (ASTNode) statements.get(0); + assertEquals("Not a super constructor call", ASTNode.SUPER_CONSTRUCTOR_INVOCATION, node.getNodeType()); + SuperConstructorInvocation statement = (SuperConstructorInvocation) node; + checkSourceRange(statement, "super();", source); + } }
\ No newline at end of file diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java index cf75c8a3eb..6a382cde98 100644 --- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java +++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java @@ -30,6 +30,7 @@ import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration; import org.eclipse.jdt.internal.compiler.ast.ConstructorDeclaration; +import org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall; import org.eclipse.jdt.internal.compiler.batch.Main; import org.eclipse.jdt.internal.compiler.env.IBinaryType; import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner; @@ -1343,6 +1344,10 @@ public class ASTParser { compilationUnit.setLineEndTable(recordedParsingInformation.lineEnds); Block block = ast.newBlock(); block.setSourceRange(this.sourceOffset, this.sourceOffset + this.sourceLength); + ExplicitConstructorCall constructorCall = constructorDeclaration.constructorCall; + if (constructorCall != null && constructorCall.accessMode != org.eclipse.jdt.internal.compiler.ast.ExplicitConstructorCall.ImplicitSuper) { + block.statements().add(converter.convert(constructorCall)); + } org.eclipse.jdt.internal.compiler.ast.Statement[] statements = constructorDeclaration.statements; if (statements != null) { int statementsLength = statements.length; |
