Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlivier Thomann2015-01-05 05:02:03 +0000
committerManoj Palat2015-01-05 05:02:03 +0000
commit1bf86fe4326efd3891490b85eefffb1c336ab872 (patch)
tree0af8bad4436971eb81c1786d9ffa9ce1759baae1
parent37b18fe3dec30aacdbf97606c4be5a6236865064 (diff)
downloadeclipse.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.java23
-rw-r--r--org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java5
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;

Back to the top