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()