minimize isBlock() method declarations
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
index e90ea58..018f47f 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
@@ -28,26 +28,22 @@
 	public ArrayInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (items != null)
-			{
-				for (ASTNode node : items)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (items != null) {
+				for (ASTNode node : items) {
 					node.traverse(visitor);
 				}
 			}
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public List<ASTNode> getItems() {
 		return this.items;
 	}
@@ -105,8 +101,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
index 77d2f2d..b965563 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
@@ -20,23 +20,17 @@
 	public AsteriskExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toSourceString(String indentationString) {
 		return "*";
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
index 1cb1d26..c104373 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
@@ -25,17 +25,17 @@
 	public BinaryOperation(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (left != null) left.traverse(visitor);
-			if (right != null) right.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (left != null)
+				left.traverse(visitor);
+			if (right != null)
+				right.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -93,7 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
index a2b8179..4eace4c 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
@@ -23,15 +23,13 @@
 	public BooleanLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,8 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BreakStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
index 0c773a7..a67ac64 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
@@ -25,22 +25,21 @@
 	public BreakStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (breakKeyword != null) breakKeyword.traverse(visitor);
-			if (label != null) label.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (breakKeyword != null)
+				breakKeyword.traverse(visitor);
+			if (label != null)
+				label.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getBreakKeyword() {
 		return breakKeyword;
 	}
@@ -85,8 +84,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CallExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CallExpression.java
index e6d8893..148d849 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CallExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CallExpression.java
@@ -21,7 +21,7 @@
 public class CallExpression extends Expression {
 
 	private ASTNode expression;
-	private List<ASTNode>  arguments;
+	private List<ASTNode> arguments;
 	private List<Integer> commas;
 	private int LP = -1;
 	private int RP = -1;
@@ -29,21 +29,18 @@
 	public CallExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
-			
-			if (arguments != null)
-			{
-				for (ASTNode node : arguments)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
+
+			if (arguments != null) {
+				for (ASTNode node : arguments) {
 					node.traverse(visitor);
 				}
 			}
@@ -51,7 +48,6 @@
 		}
 	}
 
-
 	public ASTNode getExpression() {
 		return this.expression;
 	}
@@ -60,11 +56,11 @@
 		this.expression = expression;
 	}
 
-	public List<ASTNode>  getArguments() {
+	public List<ASTNode> getArguments() {
 		return this.arguments;
 	}
 
-	public void setArguments(List<ASTNode>  arguments) {
+	public void setArguments(List<ASTNode> arguments) {
 		this.arguments = arguments;
 	}
 
@@ -121,7 +117,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CaseClause.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CaseClause.java
index 9b67577..bedda4a 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CaseClause.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CaseClause.java
@@ -26,23 +26,21 @@
 	public CaseClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (caseKeyword != null) caseKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (caseKeyword != null)
+				caseKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+
 			List<Statement> statements = getStatements();
-			if (statements != null)
-			{
-				for (Statement statement : statements)
-				{
+			if (statements != null) {
+				for (Statement statement : statements) {
 					statement.traverse(visitor);
 				}
 			}
@@ -50,7 +48,6 @@
 		}
 	}
 
-
 	public Expression getCondition() {
 		return this.condition;
 	}
@@ -87,10 +84,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 	@Override
 	public Keyword getKeyword() {
 		return getCaseKeyword();
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CatchClause.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CatchClause.java
index 7dbdff1..b8b87e7 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CatchClause.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CatchClause.java
@@ -28,20 +28,22 @@
 	public CatchClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (catchKeyword != null) catchKeyword.traverse(visitor);
-			if (exception != null) exception.traverse(visitor);
-			if (exceptionFilter != null) exceptionFilter.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (catchKeyword != null)
+				catchKeyword.traverse(visitor);
+			if (exception != null)
+				exception.traverse(visitor);
+			if (exceptionFilter != null)
+				exceptionFilter.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
@@ -118,7 +120,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CommaExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
index d120a12..250fba3 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
@@ -26,19 +26,15 @@
 	public CommaExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (items != null)
-			{
-				for (ASTNode node : items)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (items != null) {
+				for (ASTNode node : items) {
 					node.traverse(visitor);
 				}
 			}
@@ -46,7 +42,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getItems() {
 		return this.items;
 	}
@@ -82,8 +77,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
index 89ba4e8..0e825a5 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
@@ -27,23 +27,23 @@
 	public ConditionalOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (condition != null) condition.traverse(visitor);
-			if (trueValue != null) trueValue.traverse(visitor);
-			if (falseValue != null) falseValue.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (condition != null)
+				condition.traverse(visitor);
+			if (trueValue != null)
+				trueValue.traverse(visitor);
+			if (falseValue != null)
+				falseValue.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getCondition() {
 		return this.condition;
 	}
@@ -102,8 +102,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
index d983b09..152af77 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
@@ -28,30 +28,26 @@
 	public ConstDeclaration(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (constKeyword != null) constKeyword.traverse(visitor);
-			
-			if (consts != null)
-			{
-				for (ASTNode constNode : consts)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (constKeyword != null)
+				constKeyword.traverse(visitor);
+
+			if (consts != null) {
+				for (ASTNode constNode : consts) {
 					constNode.traverse(visitor);
 				}
 			}
-			
+
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public List<ASTNode> getConsts() {
 		return this.consts;
 	}
@@ -109,8 +105,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
index 766a5f5..8a9f005 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (continueKeyword != null) continueKeyword.traverse(visitor);
-			if (label != null) label.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (continueKeyword != null)
+				continueKeyword.traverse(visitor);
+			if (label != null)
+				label.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Keyword getContinueKeyword() {
 		return continueKeyword;
 	}
@@ -85,8 +85,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
index b239c83..7ae8005 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
@@ -23,15 +23,13 @@
 	public DecimalLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,7 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultClause.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
index 8b8ec78..78ecc57 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
@@ -25,22 +25,19 @@
 	public DefaultClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (defaultKeyword != null) defaultKeyword.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (defaultKeyword != null)
+				defaultKeyword.traverse(visitor);
+
 			List<Statement> statements = getStatements();
-			if (statements != null)
-			{
-				for (Statement statement : statements)
-				{
+			if (statements != null) {
+				for (Statement statement : statements) {
 					statement.traverse(visitor);
 				}
 			}
@@ -74,10 +71,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	@Override
 	public Keyword getKeyword() {
 		return getDefaultKeyword();
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
index 3ccc3aa..c6a0004 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
@@ -28,20 +28,22 @@
 	public DefaultXmlNamespaceStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (defaultKeyword != null) defaultKeyword.traverse(visitor);
-			if (xmlKeyword != null) xmlKeyword.traverse(visitor);
-			if (namespaceKeyword != null) namespaceKeyword.traverse(visitor);
-			if (value != null) value.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (defaultKeyword != null)
+				defaultKeyword.traverse(visitor);
+			if (xmlKeyword != null)
+				xmlKeyword.traverse(visitor);
+			if (namespaceKeyword != null)
+				namespaceKeyword.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
@@ -118,8 +120,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
index 233f8ef..acca550 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
@@ -74,8 +74,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
index 93e571e..3dd7f74 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
@@ -24,22 +24,22 @@
 	public DoWhileStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.javascript.ast.Statement#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (getWhileKeyword() != null) getWhileKeyword().traverse(visitor);
-			if (getCondition() != null) getCondition().traverse(visitor);
-			if (doKeyword != null) doKeyword.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (getWhileKeyword() != null)
+				getWhileKeyword().traverse(visitor);
+			if (getCondition() != null)
+				getCondition().traverse(visitor);
+			if (doKeyword != null)
+				doKeyword.traverse(visitor);
 
 			Statement body = getBody();
-			if (body != null)
-			{
+			if (body != null) {
 				body.traverse(visitor);
 			}
 			visitor.endvisit(this);
@@ -78,9 +78,4 @@
 		return buffer.toString();
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
index 8994231..764fc39 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
@@ -24,15 +24,13 @@
 		setStart(-1);
 		setEnd(-1);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -42,9 +40,4 @@
 		return JSLiterals.EMPTY;
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
index 434a654..343db12 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
@@ -25,22 +25,21 @@
 	public ExceptionFilter(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (ifKeyword != null) ifKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (ifKeyword != null)
+				ifKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -72,9 +71,4 @@
 		return buffer.toString();
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Expression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Expression.java
index 8a1a5ca..16c6103 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Expression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Expression.java
@@ -35,7 +35,5 @@
 		return toSourceString(JSLiterals.EMPTY);
 	}
 
-	public abstract boolean isBlock();
-
 	public abstract String toSourceString(String indentationString);
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FinallyClause.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
index 876694a..7820be9 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
@@ -25,17 +25,17 @@
 	public FinallyClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (finallyKeyword != null) finallyKeyword.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (finallyKeyword != null)
+				finallyKeyword.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -72,8 +72,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
index c6b0d6b..e717529 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
@@ -18,7 +18,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class FunctionStatement extends Expression {
+public class FunctionStatement extends Expression implements ISourceableBlock {
 
 	private Keyword functionKeyword;
 	private Identifier name;
@@ -31,31 +31,29 @@
 	public FunctionStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (functionKeyword != null) functionKeyword.traverse(visitor);
-			if (name != null) name.traverse(visitor);
-			
-			if (arguments != null)
-			{
-				for (ASTNode node : arguments)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (functionKeyword != null)
+				functionKeyword.traverse(visitor);
+			if (name != null)
+				name.traverse(visitor);
+
+			if (arguments != null) {
+				for (ASTNode node : arguments) {
 					node.traverse(visitor);
 				}
 			}
-			if (body != null) body.traverse(visitor);
+			if (body != null)
+				body.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getFunctionKeyword() {
 		return this.functionKeyword;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
index 97625cf..64faaee 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
@@ -25,22 +25,21 @@
 	public GetAllChildrenExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (object != null) object.traverse(visitor);
-			if (property != null) property.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (object != null)
+				object.traverse(visitor);
+			if (property != null)
+				property.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getObject() {
 		return this.object;
 	}
@@ -80,8 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
index fb68714..96eb86e 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
@@ -26,22 +26,21 @@
 	public GetArrayItemExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (array != null) array.traverse(visitor);
-			if (index != null) index.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (array != null)
+				array.traverse(visitor);
+			if (index != null)
+				index.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getArray() {
 		return this.array;
 	}
@@ -91,8 +90,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
index f95081a..7788876 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
@@ -25,22 +25,21 @@
 	public GetLocalNameExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (namespace != null) namespace.traverse(visitor);
-			if (localName != null) localName.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (namespace != null)
+				namespace.traverse(visitor);
+			if (localName != null)
+				localName.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getNamespace() {
 		return this.namespace;
 	}
@@ -80,8 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceable.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceable.java
index e2b4eed..490008a 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceable.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceable.java
@@ -13,8 +13,5 @@
 package org.eclipse.dltk.javascript.ast;
 
 public interface ISourceable {
-
-	public boolean isBlock();
-	
 	public String toSourceString(String indentationString);
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java
new file mode 100644
index 0000000..2e2a1c3
--- /dev/null
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2009 xored software, Inc.  
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html  
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.javascript.ast;
+
+public interface ISourceableBlock {
+	boolean isBlock();
+}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Identifier.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Identifier.java
index 26afde1..6609acc 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Identifier.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Identifier.java
@@ -23,15 +23,13 @@
 	public Identifier(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,8 +50,4 @@
 		return name;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/IfStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/IfStatement.java
index 175b4f0..337e10e 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/IfStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/IfStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class IfStatement extends Statement {
+public class IfStatement extends Statement implements ISourceableBlock {
 
 	private Keyword ifKeyword;
 	private Keyword elseKeyword;
@@ -29,20 +29,23 @@
 	public IfStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.javascript.ast.Statement#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (ifKeyword != null) ifKeyword.traverse(visitor);
-			if (elseKeyword != null) elseKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			if (thenStatement != null) thenStatement.traverse(visitor);
-			if (elseStatement != null) elseStatement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (ifKeyword != null)
+				ifKeyword.traverse(visitor);
+			if (elseKeyword != null)
+				elseKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+			if (thenStatement != null)
+				thenStatement.traverse(visitor);
+			if (elseStatement != null)
+				elseStatement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -119,7 +122,7 @@
 		buffer.append(")\n");
 
 		buffer.append(getThenStatement().toSourceString(
-				getThenStatement().isBlock() ? indentationString
+				isBlock(getThenStatement()) ? indentationString
 						: indentationString + INDENT));
 
 		if (getElseStatement() != null) {
@@ -127,13 +130,18 @@
 			buffer.append(Keywords.ELSE);
 			buffer.append("\n");
 			buffer.append(getElseStatement().toSourceString(
-					getElseStatement().isBlock() ? indentationString
+					isBlock(getElseStatement()) ? indentationString
 							: indentationString + INDENT));
 		}
 
 		return buffer.toString();
 	}
 
+	private static boolean isBlock(ASTNode node) {
+		return (node instanceof ISourceableBlock)
+				&& ((ISourceableBlock) node).isBlock();
+	}
+
 	public boolean isBlock() {
 		return true;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Label.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Label.java
index adbf45d..bded4f2 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Label.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Label.java
@@ -38,16 +38,11 @@
 	}
 
 	public void traverse(ASTVisitor visitor) throws Exception {
-		if (visitor.visit(this))
-		{
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toString() {
 		return toSourceString("");
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
index 5e53a21..2fed756 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class LabelledStatement extends Statement {
+public class LabelledStatement extends Statement implements ISourceableBlock {
 
 	private Label label;
 	private int colon = -1;
@@ -25,18 +25,18 @@
 	public LabelledStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (label != null) label.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (label != null)
+				label.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LoopStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
index 0da276e..f04f829 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
@@ -14,14 +14,15 @@
 
 import org.eclipse.dltk.ast.ASTNode;
 
-public abstract class LoopStatement extends Statement {
+public abstract class LoopStatement extends Statement implements
+		ISourceableBlock {
 
 	private Statement body = null;
 
 	public LoopStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	public Statement getBody() {
 		return this.body;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Method.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Method.java
index 04e951a..073b393 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Method.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Method.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.dltk.ast.ASTNode;
 
-public abstract class Method extends Expression {
+public abstract class Method extends Expression implements ISourceableBlock {
 
 	private Identifier name;
 	private StatementBlock body;
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NewExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NewExpression.java
index acdc54c..5f842d2 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NewExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NewExpression.java
@@ -24,22 +24,21 @@
 	public NewExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (newKeyword != null) newKeyword.traverse(visitor);
-			if (objectClass != null) objectClass.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (newKeyword != null)
+				newKeyword.traverse(visitor);
+			if (objectClass != null)
+				objectClass.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	/**
 	 * @since 2.0
 	 */
@@ -76,7 +75,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NullExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NullExpression.java
index 06e7441..9a95152 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NullExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/NullExpression.java
@@ -25,15 +25,13 @@
 	public String getText() {
 		return Keywords.NULL;
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -46,8 +44,4 @@
 		return Keywords.NULL;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
index 61e8ac9..3dfdc4f 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
@@ -29,19 +29,15 @@
 	public ObjectInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (initializers != null)
-			{
-				for (ASTNode node : initializers)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (initializers != null) {
+				for (ASTNode node : initializers) {
 					node.traverse(visitor);
 				}
 			}
@@ -49,7 +45,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getInitializers() {
 		return this.initializers;
 	}
@@ -114,8 +109,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
index b10aa76..a6b69ec 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
@@ -25,21 +25,19 @@
 	public ParenthesizedExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -80,8 +78,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
index b2357c6..a08f0cb 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
@@ -25,22 +25,21 @@
 	public PropertyExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (object != null) object.traverse(visitor);
-			if (property != null) property.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (object != null)
+				object.traverse(visitor);
+			if (property != null)
+				property.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getObject() {
 		return this.object;
 	}
@@ -80,7 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
index e3bca9d..fa5458a 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
@@ -25,22 +25,21 @@
 	public PropertyInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (name != null) name.traverse(visitor);
-			if (value != null) value.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (name != null)
+				name.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getName() {
 		return this.name;
 	}
@@ -80,7 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
index 929b9e2..78a3a95 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
@@ -23,20 +23,17 @@
 	public RegExpLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public String getText() {
 		return this.text;
 	}
@@ -53,8 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
index 69e270d..e2b06bf 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (returnKeyword != null) returnKeyword.traverse(visitor);
-			if (value != null) value.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (returnKeyword != null)
+				returnKeyword.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getValue() {
 		return this.value;
 	}
@@ -87,8 +87,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Script.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Script.java
index 5654fee..d010499 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Script.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/Script.java
@@ -41,10 +41,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 	public List<Comment> getComments() {
 		return this.comments;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StatementBlock.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
index cd4d330..2aeec60 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
@@ -20,7 +20,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class StatementBlock extends Statement {
+public class StatementBlock extends Statement implements ISourceableBlock {
 
 	private final List<Statement> statements = new ArrayList<Statement>();
 	private int LC = -1;
@@ -29,7 +29,7 @@
 	public StatementBlock(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	public void traverse(ASTVisitor visitor) throws Exception {
 		if (visitor.visit(this)) {
 			Iterator<Statement> it = statements.iterator();
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StringLiteral.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
index 05dc0e2..3ea3e01 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
@@ -24,15 +24,13 @@
 	public StringLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -57,8 +55,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
index 7acad98..5b34e0b 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
@@ -32,22 +32,20 @@
 	public SwitchStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (switchKeyword != null) switchKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			
-			if (caseClauses != null)
-			{
-				for (SwitchComponent comp : caseClauses)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (switchKeyword != null)
+				switchKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+
+			if (caseClauses != null) {
+				for (SwitchComponent comp : caseClauses) {
 					comp.traverse(visitor);
 				}
 			}
@@ -144,8 +142,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThisExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
index 42703a0..5dcebb5 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
@@ -23,21 +23,19 @@
 	public ThisExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (thisKeyword != null) thisKeyword.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (thisKeyword != null)
+				thisKeyword.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getThisKeyword() {
 		return this.thisKeyword;
 	}
@@ -54,8 +52,4 @@
 		return Keywords.THIS;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
index 378dea8..178a7fc 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (throwKeyword != null) throwKeyword.traverse(visitor);
-			if (exception != null) exception.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (throwKeyword != null)
+				throwKeyword.traverse(visitor);
+			if (exception != null)
+				exception.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getException() {
 		return this.exception;
 	}
@@ -86,7 +86,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TryStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TryStatement.java
index 95d33a5..8427e24 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TryStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TryStatement.java
@@ -29,27 +29,25 @@
 	public TryStatement(ASTNode parent) {
 		super(parent);
 	}
-	
 
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (tryKeyword != null) tryKeyword.traverse(visitor);
-			if (body != null) body.traverse(visitor);
-			
-			if (catchClauses != null)
-			{
-				for (CatchClause ctch : catchClauses)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (tryKeyword != null)
+				tryKeyword.traverse(visitor);
+			if (body != null)
+				body.traverse(visitor);
+
+			if (catchClauses != null) {
+				for (CatchClause ctch : catchClauses) {
 					ctch.traverse(visitor);
 				}
 			}
-			if (finallyClause != null) finallyClause.traverse(visitor);
+			if (finallyClause != null)
+				finallyClause.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -106,7 +104,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
index e767617..4a53c7a 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
@@ -24,22 +24,21 @@
 	public TypeOfExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (typeofKeyword != null) typeofKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (typeofKeyword != null)
+				typeofKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -70,8 +69,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
index df003e2..c2f1542 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
@@ -26,21 +26,19 @@
 	public UnaryOperation(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -95,8 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
index eb3b484..1005f85 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
@@ -27,21 +27,18 @@
 	public VariableDeclaration(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (varKeyword != null) varKeyword.traverse(visitor);
-			
-			if (variables != null)
-			{
-				for (ASTNode node : variables)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (varKeyword != null)
+				varKeyword.traverse(visitor);
+
+			if (variables != null) {
+				for (ASTNode node : variables) {
 					node.traverse(visitor);
 				}
 			}
@@ -49,7 +46,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getVariables() {
 		return this.variables;
 	}
@@ -97,8 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidExpression.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
index dcd6517..08e4d7a 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
@@ -25,20 +25,18 @@
 		super(parent);
 	}
 
-
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -73,8 +71,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidOperator.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
index b256bf6..af21720 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
@@ -24,17 +24,17 @@
 	public VoidOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (voidKeyword != null) voidKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (voidKeyword != null)
+				voidKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -70,7 +70,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/WithStatement.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/WithStatement.java
index b9a204e..d74df6b 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/WithStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/WithStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class WithStatement extends Statement {
+public class WithStatement extends Statement implements ISourceableBlock {
 
 	private Keyword withKeyword;
 	private Expression expression;
@@ -27,18 +27,19 @@
 	public WithStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (withKeyword != null) withKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (withKeyword != null)
+				withKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
index 1b3c6e2..db0a490 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
@@ -22,15 +22,13 @@
 	public XmlLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -43,10 +41,6 @@
 		this.xml = xml;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toSourceString(String indentationString) {
 		return this.xml;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/YieldOperator.java b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
index 88e8d06..1c18248 100644
--- a/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.formatter/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
@@ -24,17 +24,17 @@
 	public YieldOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (yieldKeyword != null) yieldKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (yieldKeyword != null)
+				yieldKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -70,8 +70,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
index e90ea58..018f47f 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ArrayInitializer.java
@@ -28,26 +28,22 @@
 	public ArrayInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (items != null)
-			{
-				for (ASTNode node : items)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (items != null) {
+				for (ASTNode node : items) {
 					node.traverse(visitor);
 				}
 			}
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public List<ASTNode> getItems() {
 		return this.items;
 	}
@@ -105,8 +101,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
index 77d2f2d..b965563 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/AsteriskExpression.java
@@ -20,23 +20,17 @@
 	public AsteriskExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toSourceString(String indentationString) {
 		return "*";
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
index 1cb1d26..c104373 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BinaryOperation.java
@@ -25,17 +25,17 @@
 	public BinaryOperation(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (left != null) left.traverse(visitor);
-			if (right != null) right.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (left != null)
+				left.traverse(visitor);
+			if (right != null)
+				right.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -93,7 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
index a2b8179..4eace4c 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BooleanLiteral.java
@@ -23,15 +23,13 @@
 	public BooleanLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,8 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BreakStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
index 0c773a7..a67ac64 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/BreakStatement.java
@@ -25,22 +25,21 @@
 	public BreakStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (breakKeyword != null) breakKeyword.traverse(visitor);
-			if (label != null) label.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (breakKeyword != null)
+				breakKeyword.traverse(visitor);
+			if (label != null)
+				label.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getBreakKeyword() {
 		return breakKeyword;
 	}
@@ -85,8 +84,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CallExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CallExpression.java
index e6d8893..148d849 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CallExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CallExpression.java
@@ -21,7 +21,7 @@
 public class CallExpression extends Expression {
 
 	private ASTNode expression;
-	private List<ASTNode>  arguments;
+	private List<ASTNode> arguments;
 	private List<Integer> commas;
 	private int LP = -1;
 	private int RP = -1;
@@ -29,21 +29,18 @@
 	public CallExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
-			
-			if (arguments != null)
-			{
-				for (ASTNode node : arguments)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
+
+			if (arguments != null) {
+				for (ASTNode node : arguments) {
 					node.traverse(visitor);
 				}
 			}
@@ -51,7 +48,6 @@
 		}
 	}
 
-
 	public ASTNode getExpression() {
 		return this.expression;
 	}
@@ -60,11 +56,11 @@
 		this.expression = expression;
 	}
 
-	public List<ASTNode>  getArguments() {
+	public List<ASTNode> getArguments() {
 		return this.arguments;
 	}
 
-	public void setArguments(List<ASTNode>  arguments) {
+	public void setArguments(List<ASTNode> arguments) {
 		this.arguments = arguments;
 	}
 
@@ -121,7 +117,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CaseClause.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CaseClause.java
index 9b67577..bedda4a 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CaseClause.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CaseClause.java
@@ -26,23 +26,21 @@
 	public CaseClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (caseKeyword != null) caseKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (caseKeyword != null)
+				caseKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+
 			List<Statement> statements = getStatements();
-			if (statements != null)
-			{
-				for (Statement statement : statements)
-				{
+			if (statements != null) {
+				for (Statement statement : statements) {
 					statement.traverse(visitor);
 				}
 			}
@@ -50,7 +48,6 @@
 		}
 	}
 
-
 	public Expression getCondition() {
 		return this.condition;
 	}
@@ -87,10 +84,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 	@Override
 	public Keyword getKeyword() {
 		return getCaseKeyword();
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CatchClause.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CatchClause.java
index 7dbdff1..b8b87e7 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CatchClause.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CatchClause.java
@@ -28,20 +28,22 @@
 	public CatchClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (catchKeyword != null) catchKeyword.traverse(visitor);
-			if (exception != null) exception.traverse(visitor);
-			if (exceptionFilter != null) exceptionFilter.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (catchKeyword != null)
+				catchKeyword.traverse(visitor);
+			if (exception != null)
+				exception.traverse(visitor);
+			if (exceptionFilter != null)
+				exceptionFilter.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
@@ -118,7 +120,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CommaExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
index d120a12..250fba3 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/CommaExpression.java
@@ -26,19 +26,15 @@
 	public CommaExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (items != null)
-			{
-				for (ASTNode node : items)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (items != null) {
+				for (ASTNode node : items) {
 					node.traverse(visitor);
 				}
 			}
@@ -46,7 +42,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getItems() {
 		return this.items;
 	}
@@ -82,8 +77,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
index 89ba4e8..0e825a5 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConditionalOperator.java
@@ -27,23 +27,23 @@
 	public ConditionalOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (condition != null) condition.traverse(visitor);
-			if (trueValue != null) trueValue.traverse(visitor);
-			if (falseValue != null) falseValue.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (condition != null)
+				condition.traverse(visitor);
+			if (trueValue != null)
+				trueValue.traverse(visitor);
+			if (falseValue != null)
+				falseValue.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getCondition() {
 		return this.condition;
 	}
@@ -102,8 +102,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
index d983b09..152af77 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ConstDeclaration.java
@@ -28,30 +28,26 @@
 	public ConstDeclaration(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (constKeyword != null) constKeyword.traverse(visitor);
-			
-			if (consts != null)
-			{
-				for (ASTNode constNode : consts)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (constKeyword != null)
+				constKeyword.traverse(visitor);
+
+			if (consts != null) {
+				for (ASTNode constNode : consts) {
 					constNode.traverse(visitor);
 				}
 			}
-			
+
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public List<ASTNode> getConsts() {
 		return this.consts;
 	}
@@ -109,8 +105,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
index 766a5f5..8a9f005 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ContinueStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (continueKeyword != null) continueKeyword.traverse(visitor);
-			if (label != null) label.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (continueKeyword != null)
+				continueKeyword.traverse(visitor);
+			if (label != null)
+				label.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Keyword getContinueKeyword() {
 		return continueKeyword;
 	}
@@ -85,8 +85,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
index b239c83..7ae8005 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DecimalLiteral.java
@@ -23,15 +23,13 @@
 	public DecimalLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,7 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultClause.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
index 8b8ec78..78ecc57 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultClause.java
@@ -25,22 +25,19 @@
 	public DefaultClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (defaultKeyword != null) defaultKeyword.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (defaultKeyword != null)
+				defaultKeyword.traverse(visitor);
+
 			List<Statement> statements = getStatements();
-			if (statements != null)
-			{
-				for (Statement statement : statements)
-				{
+			if (statements != null) {
+				for (Statement statement : statements) {
 					statement.traverse(visitor);
 				}
 			}
@@ -74,10 +71,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	@Override
 	public Keyword getKeyword() {
 		return getDefaultKeyword();
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
index 3ccc3aa..c6a0004 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DefaultXmlNamespaceStatement.java
@@ -28,20 +28,22 @@
 	public DefaultXmlNamespaceStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (defaultKeyword != null) defaultKeyword.traverse(visitor);
-			if (xmlKeyword != null) xmlKeyword.traverse(visitor);
-			if (namespaceKeyword != null) namespaceKeyword.traverse(visitor);
-			if (value != null) value.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (defaultKeyword != null)
+				defaultKeyword.traverse(visitor);
+			if (xmlKeyword != null)
+				xmlKeyword.traverse(visitor);
+			if (namespaceKeyword != null)
+				namespaceKeyword.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
@@ -118,8 +120,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
index 233f8ef..acca550 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DeleteStatement.java
@@ -74,8 +74,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
index 93e571e..3dd7f74 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/DoWhileStatement.java
@@ -24,22 +24,22 @@
 	public DoWhileStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.javascript.ast.Statement#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (getWhileKeyword() != null) getWhileKeyword().traverse(visitor);
-			if (getCondition() != null) getCondition().traverse(visitor);
-			if (doKeyword != null) doKeyword.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (getWhileKeyword() != null)
+				getWhileKeyword().traverse(visitor);
+			if (getCondition() != null)
+				getCondition().traverse(visitor);
+			if (doKeyword != null)
+				doKeyword.traverse(visitor);
 
 			Statement body = getBody();
-			if (body != null)
-			{
+			if (body != null) {
 				body.traverse(visitor);
 			}
 			visitor.endvisit(this);
@@ -78,9 +78,4 @@
 		return buffer.toString();
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
index 8994231..764fc39 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/EmptyExpression.java
@@ -24,15 +24,13 @@
 		setStart(-1);
 		setEnd(-1);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -42,9 +40,4 @@
 		return JSLiterals.EMPTY;
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
index 434a654..343db12 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ExceptionFilter.java
@@ -25,22 +25,21 @@
 	public ExceptionFilter(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (ifKeyword != null) ifKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (ifKeyword != null)
+				ifKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -72,9 +71,4 @@
 		return buffer.toString();
 	}
 
-	@Override
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Expression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Expression.java
index 8a1a5ca..16c6103 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Expression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Expression.java
@@ -35,7 +35,5 @@
 		return toSourceString(JSLiterals.EMPTY);
 	}
 
-	public abstract boolean isBlock();
-
 	public abstract String toSourceString(String indentationString);
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FinallyClause.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
index 876694a..7820be9 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FinallyClause.java
@@ -25,17 +25,17 @@
 	public FinallyClause(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (finallyKeyword != null) finallyKeyword.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (finallyKeyword != null)
+				finallyKeyword.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -72,8 +72,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
index c6b0d6b..e717529 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/FunctionStatement.java
@@ -18,7 +18,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class FunctionStatement extends Expression {
+public class FunctionStatement extends Expression implements ISourceableBlock {
 
 	private Keyword functionKeyword;
 	private Identifier name;
@@ -31,31 +31,29 @@
 	public FunctionStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (functionKeyword != null) functionKeyword.traverse(visitor);
-			if (name != null) name.traverse(visitor);
-			
-			if (arguments != null)
-			{
-				for (ASTNode node : arguments)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (functionKeyword != null)
+				functionKeyword.traverse(visitor);
+			if (name != null)
+				name.traverse(visitor);
+
+			if (arguments != null) {
+				for (ASTNode node : arguments) {
 					node.traverse(visitor);
 				}
 			}
-			if (body != null) body.traverse(visitor);
+			if (body != null)
+				body.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getFunctionKeyword() {
 		return this.functionKeyword;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
index 97625cf..64faaee 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetAllChildrenExpression.java
@@ -25,22 +25,21 @@
 	public GetAllChildrenExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (object != null) object.traverse(visitor);
-			if (property != null) property.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (object != null)
+				object.traverse(visitor);
+			if (property != null)
+				property.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getObject() {
 		return this.object;
 	}
@@ -80,8 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
index fb68714..96eb86e 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetArrayItemExpression.java
@@ -26,22 +26,21 @@
 	public GetArrayItemExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (array != null) array.traverse(visitor);
-			if (index != null) index.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (array != null)
+				array.traverse(visitor);
+			if (index != null)
+				index.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getArray() {
 		return this.array;
 	}
@@ -91,8 +90,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
index f95081a..7788876 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/GetLocalNameExpression.java
@@ -25,22 +25,21 @@
 	public GetLocalNameExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (namespace != null) namespace.traverse(visitor);
-			if (localName != null) localName.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (namespace != null)
+				namespace.traverse(visitor);
+			if (localName != null)
+				localName.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getNamespace() {
 		return this.namespace;
 	}
@@ -80,8 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceable.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceable.java
index e2b4eed..490008a 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceable.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceable.java
@@ -13,8 +13,5 @@
 package org.eclipse.dltk.javascript.ast;
 
 public interface ISourceable {
-
-	public boolean isBlock();
-	
 	public String toSourceString(String indentationString);
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java
new file mode 100644
index 0000000..2e2a1c3
--- /dev/null
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ISourceableBlock.java
@@ -0,0 +1,16 @@
+/*******************************************************************************
+ * Copyright (c) 2009 xored software, Inc.  
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html  
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.javascript.ast;
+
+public interface ISourceableBlock {
+	boolean isBlock();
+}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Identifier.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Identifier.java
index 26afde1..6609acc 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Identifier.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Identifier.java
@@ -23,15 +23,13 @@
 	public Identifier(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -52,8 +50,4 @@
 		return name;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/IfStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/IfStatement.java
index 175b4f0..337e10e 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/IfStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/IfStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class IfStatement extends Statement {
+public class IfStatement extends Statement implements ISourceableBlock {
 
 	private Keyword ifKeyword;
 	private Keyword elseKeyword;
@@ -29,20 +29,23 @@
 	public IfStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.javascript.ast.Statement#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (ifKeyword != null) ifKeyword.traverse(visitor);
-			if (elseKeyword != null) elseKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			if (thenStatement != null) thenStatement.traverse(visitor);
-			if (elseStatement != null) elseStatement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (ifKeyword != null)
+				ifKeyword.traverse(visitor);
+			if (elseKeyword != null)
+				elseKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+			if (thenStatement != null)
+				thenStatement.traverse(visitor);
+			if (elseStatement != null)
+				elseStatement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -119,7 +122,7 @@
 		buffer.append(")\n");
 
 		buffer.append(getThenStatement().toSourceString(
-				getThenStatement().isBlock() ? indentationString
+				isBlock(getThenStatement()) ? indentationString
 						: indentationString + INDENT));
 
 		if (getElseStatement() != null) {
@@ -127,13 +130,18 @@
 			buffer.append(Keywords.ELSE);
 			buffer.append("\n");
 			buffer.append(getElseStatement().toSourceString(
-					getElseStatement().isBlock() ? indentationString
+					isBlock(getElseStatement()) ? indentationString
 							: indentationString + INDENT));
 		}
 
 		return buffer.toString();
 	}
 
+	private static boolean isBlock(ASTNode node) {
+		return (node instanceof ISourceableBlock)
+				&& ((ISourceableBlock) node).isBlock();
+	}
+
 	public boolean isBlock() {
 		return true;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Label.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Label.java
index adbf45d..bded4f2 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Label.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Label.java
@@ -38,16 +38,11 @@
 	}
 
 	public void traverse(ASTVisitor visitor) throws Exception {
-		if (visitor.visit(this))
-		{
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toString() {
 		return toSourceString("");
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
index 5e53a21..2fed756 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LabelledStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class LabelledStatement extends Statement {
+public class LabelledStatement extends Statement implements ISourceableBlock {
 
 	private Label label;
 	private int colon = -1;
@@ -25,18 +25,18 @@
 	public LabelledStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (label != null) label.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (label != null)
+				label.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LoopStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
index 0da276e..f04f829 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/LoopStatement.java
@@ -14,14 +14,15 @@
 
 import org.eclipse.dltk.ast.ASTNode;
 
-public abstract class LoopStatement extends Statement {
+public abstract class LoopStatement extends Statement implements
+		ISourceableBlock {
 
 	private Statement body = null;
 
 	public LoopStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	public Statement getBody() {
 		return this.body;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Method.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Method.java
index 04e951a..073b393 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Method.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Method.java
@@ -14,7 +14,7 @@
 
 import org.eclipse.dltk.ast.ASTNode;
 
-public abstract class Method extends Expression {
+public abstract class Method extends Expression implements ISourceableBlock {
 
 	private Identifier name;
 	private StatementBlock body;
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NewExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NewExpression.java
index acdc54c..5f842d2 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NewExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NewExpression.java
@@ -24,22 +24,21 @@
 	public NewExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (newKeyword != null) newKeyword.traverse(visitor);
-			if (objectClass != null) objectClass.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (newKeyword != null)
+				newKeyword.traverse(visitor);
+			if (objectClass != null)
+				objectClass.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	/**
 	 * @since 2.0
 	 */
@@ -76,7 +75,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NullExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NullExpression.java
index 06e7441..9a95152 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NullExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/NullExpression.java
@@ -25,15 +25,13 @@
 	public String getText() {
 		return Keywords.NULL;
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -46,8 +44,4 @@
 		return Keywords.NULL;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
index 61e8ac9..3dfdc4f 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ObjectInitializer.java
@@ -29,19 +29,15 @@
 	public ObjectInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (initializers != null)
-			{
-				for (ASTNode node : initializers)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (initializers != null) {
+				for (ASTNode node : initializers) {
 					node.traverse(visitor);
 				}
 			}
@@ -49,7 +45,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getInitializers() {
 		return this.initializers;
 	}
@@ -114,8 +109,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
index b10aa76..a6b69ec 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ParenthesizedExpression.java
@@ -25,21 +25,19 @@
 	public ParenthesizedExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -80,8 +78,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
index b2357c6..a08f0cb 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyExpression.java
@@ -25,22 +25,21 @@
 	public PropertyExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (object != null) object.traverse(visitor);
-			if (property != null) property.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (object != null)
+				object.traverse(visitor);
+			if (property != null)
+				property.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getObject() {
 		return this.object;
 	}
@@ -80,7 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
index e3bca9d..fa5458a 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/PropertyInitializer.java
@@ -25,22 +25,21 @@
 	public PropertyInitializer(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (name != null) name.traverse(visitor);
-			if (value != null) value.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (name != null)
+				name.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getName() {
 		return this.name;
 	}
@@ -80,7 +79,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
index 929b9e2..78a3a95 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/RegExpLiteral.java
@@ -23,20 +23,17 @@
 	public RegExpLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public String getText() {
 		return this.text;
 	}
@@ -53,8 +50,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
index 69e270d..e2b06bf 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ReturnStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (returnKeyword != null) returnKeyword.traverse(visitor);
-			if (value != null) value.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (returnKeyword != null)
+				returnKeyword.traverse(visitor);
+			if (value != null)
+				value.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getValue() {
 		return this.value;
 	}
@@ -87,8 +87,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Script.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Script.java
index 5654fee..d010499 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Script.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/Script.java
@@ -41,10 +41,6 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 	public List<Comment> getComments() {
 		return this.comments;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StatementBlock.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
index cd4d330..2aeec60 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StatementBlock.java
@@ -20,7 +20,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class StatementBlock extends Statement {
+public class StatementBlock extends Statement implements ISourceableBlock {
 
 	private final List<Statement> statements = new ArrayList<Statement>();
 	private int LC = -1;
@@ -29,7 +29,7 @@
 	public StatementBlock(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	public void traverse(ASTVisitor visitor) throws Exception {
 		if (visitor.visit(this)) {
 			Iterator<Statement> it = statements.iterator();
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StringLiteral.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
index 05dc0e2..3ea3e01 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/StringLiteral.java
@@ -24,15 +24,13 @@
 	public StringLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -57,8 +55,4 @@
 		return text;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
index 7acad98..5b34e0b 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/SwitchStatement.java
@@ -32,22 +32,20 @@
 	public SwitchStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (switchKeyword != null) switchKeyword.traverse(visitor);
-			if (condition != null) condition.traverse(visitor);
-			
-			if (caseClauses != null)
-			{
-				for (SwitchComponent comp : caseClauses)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (switchKeyword != null)
+				switchKeyword.traverse(visitor);
+			if (condition != null)
+				condition.traverse(visitor);
+
+			if (caseClauses != null) {
+				for (SwitchComponent comp : caseClauses) {
 					comp.traverse(visitor);
 				}
 			}
@@ -144,8 +142,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThisExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
index 42703a0..5dcebb5 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThisExpression.java
@@ -23,21 +23,19 @@
 	public ThisExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (thisKeyword != null) thisKeyword.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (thisKeyword != null)
+				thisKeyword.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Keyword getThisKeyword() {
 		return this.thisKeyword;
 	}
@@ -54,8 +52,4 @@
 		return Keywords.THIS;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
index 378dea8..178a7fc 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/ThrowStatement.java
@@ -30,17 +30,17 @@
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (throwKeyword != null) throwKeyword.traverse(visitor);
-			if (exception != null) exception.traverse(visitor);
-			
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (throwKeyword != null)
+				throwKeyword.traverse(visitor);
+			if (exception != null)
+				exception.traverse(visitor);
+
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getException() {
 		return this.exception;
 	}
@@ -86,7 +86,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TryStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TryStatement.java
index 95d33a5..8427e24 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TryStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TryStatement.java
@@ -29,27 +29,25 @@
 	public TryStatement(ASTNode parent) {
 		super(parent);
 	}
-	
 
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (tryKeyword != null) tryKeyword.traverse(visitor);
-			if (body != null) body.traverse(visitor);
-			
-			if (catchClauses != null)
-			{
-				for (CatchClause ctch : catchClauses)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (tryKeyword != null)
+				tryKeyword.traverse(visitor);
+			if (body != null)
+				body.traverse(visitor);
+
+			if (catchClauses != null) {
+				for (CatchClause ctch : catchClauses) {
 					ctch.traverse(visitor);
 				}
 			}
-			if (finallyClause != null) finallyClause.traverse(visitor);
+			if (finallyClause != null)
+				finallyClause.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -106,7 +104,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return true;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
index e767617..4a53c7a 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/TypeOfExpression.java
@@ -24,22 +24,21 @@
 	public TypeOfExpression(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (typeofKeyword != null) typeofKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (typeofKeyword != null)
+				typeofKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -70,8 +69,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
index df003e2..c2f1542 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/UnaryOperation.java
@@ -26,21 +26,19 @@
 	public UnaryOperation(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
 
-
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -95,8 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
index eb3b484..1005f85 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VariableDeclaration.java
@@ -27,21 +27,18 @@
 	public VariableDeclaration(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (varKeyword != null) varKeyword.traverse(visitor);
-			
-			if (variables != null)
-			{
-				for (ASTNode node : variables)
-				{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (varKeyword != null)
+				varKeyword.traverse(visitor);
+
+			if (variables != null) {
+				for (ASTNode node : variables) {
 					node.traverse(visitor);
 				}
 			}
@@ -49,7 +46,6 @@
 		}
 	}
 
-
 	public List<ASTNode> getVariables() {
 		return this.variables;
 	}
@@ -97,8 +93,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidExpression.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
index dcd6517..08e4d7a 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidExpression.java
@@ -25,20 +25,18 @@
 		super(parent);
 	}
 
-
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
-	
+
 	public Expression getExpression() {
 		return this.expression;
 	}
@@ -73,8 +71,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidOperator.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
index b256bf6..af21720 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/VoidOperator.java
@@ -24,17 +24,17 @@
 	public VoidOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (voidKeyword != null) voidKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (voidKeyword != null)
+				voidKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -70,7 +70,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
 }
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/WithStatement.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/WithStatement.java
index b9a204e..d74df6b 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/WithStatement.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/WithStatement.java
@@ -16,7 +16,7 @@
 import org.eclipse.dltk.ast.ASTNode;
 import org.eclipse.dltk.ast.ASTVisitor;
 
-public class WithStatement extends Statement {
+public class WithStatement extends Statement implements ISourceableBlock {
 
 	private Keyword withKeyword;
 	private Expression expression;
@@ -27,18 +27,19 @@
 	public WithStatement(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (withKeyword != null) withKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
-			if (statement != null) statement.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (withKeyword != null)
+				withKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
+			if (statement != null)
+				statement.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
index 1b3c6e2..db0a490 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/XmlLiteral.java
@@ -22,15 +22,13 @@
 	public XmlLiteral(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
 			visitor.endvisit(this);
 		}
 	}
@@ -43,10 +41,6 @@
 		this.xml = xml;
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 	public String toSourceString(String indentationString) {
 		return this.xml;
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/YieldOperator.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
index 88e8d06..1c18248 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/ast/YieldOperator.java
@@ -24,17 +24,17 @@
 	public YieldOperator(ASTNode parent) {
 		super(parent);
 	}
-	
+
 	/**
 	 * @see org.eclipse.dltk.ast.ASTNode#traverse(org.eclipse.dltk.ast.ASTVisitor)
 	 */
 	@Override
-	public void traverse(ASTVisitor visitor) throws Exception
-	{
-		if (visitor.visit(this))
-		{
-			if (yieldKeyword != null) yieldKeyword.traverse(visitor);
-			if (expression != null) expression.traverse(visitor);
+	public void traverse(ASTVisitor visitor) throws Exception {
+		if (visitor.visit(this)) {
+			if (yieldKeyword != null)
+				yieldKeyword.traverse(visitor);
+			if (expression != null)
+				expression.traverse(visitor);
 			visitor.endvisit(this);
 		}
 	}
@@ -70,8 +70,4 @@
 		return buffer.toString();
 	}
 
-	public boolean isBlock() {
-		return false;
-	}
-
 }