Bug 582198 - Body of blockless within statement has invalid sourceStart
diff --git a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/objectteams/otdt/internal/core/compiler/ast/WithinStatement.java b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/objectteams/otdt/internal/core/compiler/ast/WithinStatement.java
index ac4fef2..b2fb1d1 100644
--- a/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/objectteams/otdt/internal/core/compiler/ast/WithinStatement.java
+++ b/org.eclipse.jdt.core.compiler.batch/src/org/eclipse/objectteams/otdt/internal/core/compiler/ast/WithinStatement.java
@@ -123,6 +123,8 @@
} else {
actionBlock = new Block(0); // no declarations
actionBlock.statements = new Statement[]{action};
+ actionBlock.sourceStart = action.sourceStart;
+ actionBlock.sourceEnd = action.sourceEnd;
}
/* GEN resetter block:
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
index 8057d8e..5ede4bd 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTConverter.java
@@ -7493,7 +7493,8 @@
org.eclipse.jdt.internal.compiler.ast.Statement[] statements = statement.statements;
if (statements != null)
{
- // for within statements use statements inside try block
+ // for within block use the try block (after team-var-local and activate()-call:
+ // (this is for convenience so we don't need to distinguish block / non-block statements)
for (int idx = 0; idx < statements.length; idx++) {
if (statements[idx] instanceof org.eclipse.jdt.internal.compiler.ast.TryStatement)
{
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/WithinStatementTest.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/WithinStatementTest.java
index 279ee0a..857da1a 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/WithinStatementTest.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/WithinStatementTest.java
@@ -103,6 +103,7 @@
Statement testObj = (Statement) statements.get(0);
assertTrue("Statement is not an instance of WithinStatement",
testObj instanceof WithinStatement);
+ assertTrue("block should have valid start position", ((WithinStatement) testObj).getBody().getStartPosition() > 0);
}
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/withinstatement/basepkg/MyClass.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/withinstatement/basepkg/MyClass.java
index a9a8dcd..21f62fc 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/withinstatement/basepkg/MyClass.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/withinstatement/basepkg/MyClass.java
@@ -23,9 +23,8 @@
}
void withinSimple() {
- within(myTeam) {
+ within(myTeam)
foo();
- }
}
void withinViaMethod()