### 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"
+ );
+}
}