### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: buildnotes_jdt-core.html =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/buildnotes_jdt-core.html,v retrieving revision 1.7204 diff -u -r1.7204 buildnotes_jdt-core.html --- buildnotes_jdt-core.html 16 Nov 2009 15:08:02 -0000 1.7204 +++ buildnotes_jdt-core.html 16 Nov 2009 16:48:03 -0000 @@ -48,6 +48,7 @@
Project org.eclipse.jdt.core v_A22 (cvs).

What's new in this drop

+Patch v01 for bug 295238

Problem Reports Fixed

295175 Index: formatter/org/eclipse/jdt/internal/formatter/Scribe.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java,v retrieving revision 1.181 diff -u -r1.181 Scribe.java --- formatter/org/eclipse/jdt/internal/formatter/Scribe.java 15 Nov 2009 19:35:07 -0000 1.181 +++ formatter/org/eclipse/jdt/internal/formatter/Scribe.java 16 Nov 2009 16:48:04 -0000 @@ -1561,6 +1561,7 @@ boolean hasMultiLines = false; boolean hasTokens = false; boolean bufferHasTokens = false; + boolean bufferHasNewLine = false; boolean lineHasTokens = false; int hasTextOnFirstLine = 0; boolean firstWord = true; @@ -1595,6 +1596,7 @@ this.column += tokensBuffer.length(); tokensBuffer.setLength(0); bufferHasTokens = true; + bufferHasNewLine = false; } if (previousToken == -1) { // do not remember the first whitespace @@ -1710,6 +1712,7 @@ this.column += BLOCK_LINE_PREFIX_LENGTH; firstWord = true; multiLines = true; + bufferHasNewLine = true; } insertSpace = insertSpace && linesGap == 0; } @@ -1744,8 +1747,10 @@ buffer.append(tokensString); this.column += tokensString.length(); tokensBuffer.setLength(0); + bufferHasNewLine = false; + bufferHasTokens = true; } - if (bufferHasTokens) { + if (bufferHasTokens && !bufferHasNewLine) { buffer.append(this.lineSeparator); this.column = 1; printIndentationIfNecessary(buffer); @@ -1759,6 +1764,7 @@ } buffer.append(this.scanner.source, tokenStart, tokenLength); bufferHasTokens = true; + bufferHasNewLine = false; this.column += tokenLength; multiLines = true; hasTextOnFirstLine = -1; #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java,v retrieving revision 1.9 diff -u -r1.9 FormatterBugsTests.java --- src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java 15 Nov 2009 19:35:09 -0000 1.9 +++ src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java 16 Nov 2009 16:48:05 -0000 @@ -1976,4 +1976,140 @@ "}\n" ); } + +/** + * @bug 295238: [formatter] The comment formatter add an unexpected new line in block comment + * @test Verify that formatting a block comment with a tag does not add an unexpected new line + * when the 'Never join lines' option is set + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=295238" + */ +public void testBug295238() { + this.formatterPrefs.join_lines_in_comments = false; + String source = + "package wksp1;\n" + + "\n" + + "public interface X03 {\n" + + " \n" + + " class Inner {\n" + + " \n" + + " /* (non-Javadoc)\n" + + " * @see org.eclipse.jface.text.TextViewer#customizeDocumentCommand(org.eclipse.jface.text.DocumentCommand)\n" + + " */\n" + + " protected void foo() {\n" + + " }\n" + + " }\n" + + "}\n"; + formatSource(source, + "package wksp1;\n" + + "\n" + + "public interface X03 {\n" + + "\n" + + " class Inner {\n" + + "\n" + + " /*\n" + + " * (non-Javadoc)\n" + + " * \n" + + " * @see\n" + + " * org.eclipse.jface.text.TextViewer#customizeDocumentCommand(org.eclipse\n" + + " * .jface.text.DocumentCommand)\n" + + " */\n" + + " protected void foo() {\n" + + " }\n" + + " }\n" + + "}\n" + ); +} +// the following test already passed with v_A21, but failed with first version of the patch +public void testBug295238b1() { + this.formatterPrefs.join_lines_in_comments = false; + String source = + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + "/* if ((operatorSignature & CompareMASK) == (alternateOperatorSignature & CompareMASK)) { // same promotions and result\n" + + " scope.problemReporter().unnecessaryCastForArgument((CastExpression)expression, TypeBinding.wellKnownType(scope, expression.implicitConversion >> 4)); \n" + + " }\n" + + "*/ \n" + + " }\n" + + "}\n"; + formatSource(source, + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + " /*\n" + + " * if ((operatorSignature & CompareMASK) == (alternateOperatorSignature\n" + + " * & CompareMASK)) { // same promotions and result\n" + + " * scope.problemReporter().unnecessaryCastForArgument((CastExpression)\n" + + " * expression, TypeBinding.wellKnownType(scope,\n" + + " * expression.implicitConversion >> 4));\n" + + " * }\n" + + " */\n" + + " }\n" + + "}\n" + ); +} +// the following test failed with v_A21 and with the version v00 of the patch +public void testBug295238b2() { + this.formatterPrefs.join_lines_in_comments = false; + String source = + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + "/* scope.problemReporter().unnecessaryCastForArgument((CastExpression)expression, TypeBinding.wellKnownType(scope, expression.implicitConversion >> 4)); \n" + + "*/ \n" + + " }\n" + + "}\n"; + formatSource(source, + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + " /*\n" + + " * scope.problemReporter().unnecessaryCastForArgument((CastExpression)\n" + + " * expression, TypeBinding.wellKnownType(scope,\n" + + " * expression.implicitConversion >> 4));\n" + + " * }\n" + + " */\n" + + " }\n" + + "}\n" + ); +} +// the following test failed with v_A21 and with the version v00 of the patch +public void testBug295238b3() { + this.formatterPrefs.join_lines_in_comments = false; + String source = + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + "/*\n" + + " scope.problemReporter().unnecessaryCastForArgument((CastExpression)expression, TypeBinding.wellKnownType(scope, expression.implicitConversion >> 4)); \n" + + " }\n" + + "*/ \n" + + " }\n" + + "}\n"; + formatSource(source, + "package wksp1;\n" + + "\n" + + "public class X02 {\n" + + "\n" + + " void foo() {\n" + + " /*\n" + + " * scope.problemReporter().unnecessaryCastForArgument((CastExpression)\n" + + " * expression, TypeBinding.wellKnownType(scope,\n" + + " * expression.implicitConversion >> 4));\n" + + " * }\n" + + " */\n" + + " }\n" + + "}\n" + ); +} }