Bug 32082 Creation of { } block captures first line
When creating an 'if' or 'for' block, the first line is always captured in the block. I believe this to be a fairly major bug, since it is very possible that when you are writing code you want to insert an if/for/while test into existing code, and definately /not/ end up accidentally capturing a statement. It may have been added in as an idea of productivity recently (don't recall seeing this in 2.1M3 or 4) but it really does not work. 2.1M5 Mac OS X 10.2.4 System.out.println("Before if"); System.out.println("After if"); -> System.out.println("Before if"); if (test) System.out.println("After if"); -> System.out.println("Before if"); if (test) { System.out.println("After if"); } I am reporting this as a major bug; I can't quite feel that it should be a critical bug. However, I do think it should be fixed in 2.1 rather than leaving it, because otherwise people are going to introduce a /lot/ of unneccessary coding errors without realising what is going on.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SmartBracesAutoEditStrategy.java
addReplace(document, command, nextStatement.getOffset(), 0, "}" + outerSpace); 
						} else {
							buffer.append(lineDelimiter);
							buffer.append(lineIndentation);
							buffer.append("}"); 
							
							IRegion region= document.getLineInformation(statementLine);
							addReplace(document, command, region.getOffset() + region.getLength(), 0, buffer.toString());
						}
					}
				}
				break;
		}
	}
	private static Statement getNextStatement(Statement statement) {
		ASTNode node= statement.getParent();
		while (node != null && node.getNodeType() != ASTNode.BLOCK)
			node= node.getParent();
		if (node == null)
			return null;
		Block block= (Block) node;
		List statements= block.statements();
		for (final Iterator iterator= statements.iterator(); iterator.hasNext(); ) {
			final Statement nextStatement= (Statement) iterator.next();
			if (nextStatement.getStartPosition() >= statement.getStartPosition() + statement.getLength())
				return nextStatement;
		}
		return null;
	}
	private static class CompilationUnitInfo{