Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 151423 Details for
Bug 199265
[formatter] 3.3 Code Formatter mis-places commented-out import statements
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
v08.txt (text/plain), 74.36 KB, created by
Frederic Fusier
on 2009-11-05 09:42:33 EST
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Frederic Fusier
Created:
2009-11-05 09:42:33 EST
Size:
74.36 KB
patch
obsolete
>### 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.7185 >diff -u -r1.7185 buildnotes_jdt-core.html >--- buildnotes_jdt-core.html 3 Nov 2009 15:54:17 -0000 1.7185 >+++ buildnotes_jdt-core.html 5 Nov 2009 14:26:05 -0000 >@@ -48,6 +48,7 @@ > <br>Project org.eclipse.jdt.core v_A21 > (<a href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/?only_with_tag=v_A21">cvs</a>). > <h2>What's new in this drop</h2> >+Patch v08 for bug 199265 > > <h3>Problem Reports Fixed</h3> > <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=241549">241549</a> >Index: formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java,v >retrieving revision 1.220 >diff -u -r1.220 CodeFormatterVisitor.java >--- formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java 25 Oct 2009 15:59:51 -0000 1.220 >+++ formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java 5 Nov 2009 14:26:07 -0000 >@@ -16,6 +16,7 @@ > import org.eclipse.jdt.core.JavaCore; > import org.eclipse.jdt.core.compiler.IProblem; > import org.eclipse.jdt.core.compiler.InvalidInputException; >+import org.eclipse.jdt.core.formatter.CodeFormatter; > import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; > import org.eclipse.jdt.internal.compiler.ASTVisitor; > import org.eclipse.jdt.internal.compiler.ast.AND_AND_Expression; >@@ -169,7 +170,6 @@ > TerminalTokens.TokenNameUNSIGNED_RIGHT_SHIFT, > TerminalTokens.TokenNameGREATER > }; >- private int chunkKind; > public int lastLocalDeclarationSourceStart; > private Scanner localScanner; > public DefaultCodeFormatterOptions preferences; >@@ -261,13 +261,6 @@ > messageSend.traverse(builder, scope); > return builder; > } >- public boolean checkChunkStart(int kind) { >- if (this.chunkKind != kind) { >- this.chunkKind = kind; >- return true; >- } >- return false; >- } > > private boolean commentStartsBlock(int start, int end) { > this.localScanner.resetTo(start, end); >@@ -439,9 +432,9 @@ > for (int i = 0; i < fragmentsSize - 1; i++) { > ASTNode fragment = fragments[i]; > fragment.traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (this.scribe.lastNumberOfNewLines == 1) { >- // a new line has been inserted by printTrailingComment() >+ // a new line has been inserted by printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT) > this.scribe.indentationLevel = binaryExpressionAlignment.breakIndentationLevel; > } > if (this.preferences.wrap_before_binary_operator) { >@@ -460,7 +453,7 @@ > } > } > fragments[fragmentsSize - 1].traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > ok = true; > } catch(AlignmentException e){ > this.scribe.redoAlignment(e); >@@ -616,16 +609,16 @@ > > if (memberAlignment != null) { > this.scribe.alignFragment(memberAlignment, 2); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } else { > this.scribe.space(); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > > private void format(ImportReference importRef, boolean isLast) { > this.scribe.printNextToken(TerminalTokens.TokenNameimport); >- this.preferences.number_of_empty_lines_to_preserve = this.preferences.blank_lines_between_import_groups; >+ if (!isLast) this.scribe.blank_lines_between_import_groups = this.preferences.blank_lines_between_import_groups; > this.scribe.space(); > if (importRef.isStatic()) { > this.scribe.printNextToken(TerminalTokens.TokenNamestatic); >@@ -641,9 +634,11 @@ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); > } > if (isLast) { >- this.scribe.printTrailingComment(); >+ this.scribe.blank_lines_between_import_groups = -1; >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.IMPORT_TRAILING_COMMENT); > } else { >- this.scribe.printTrailingComment(this.preferences.blank_lines_between_import_groups); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.NO_TRAILING_COMMENT); >+ this.scribe.blank_lines_between_import_groups = -1; > } > this.scribe.printNewLine(); > } >@@ -726,7 +721,7 @@ > > if (i != length - 1) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_multiple_field_declarations); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.alignFragment(multiFieldDeclarationsAlignment, i); > > if (this.preferences.insert_space_after_comma_in_multiple_field_declarations) { >@@ -735,7 +730,7 @@ > } else { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); > this.scribe.alignFragment(fieldAlignment, 2); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > ok = true; >@@ -1048,7 +1043,7 @@ > for (int i = 0; i < superInterfaceLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_superinterfaces); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.alignFragment(interfaceAlignment, i+1); > if (this.preferences.insert_space_after_comma_in_superinterfaces) { > this.scribe.space(); >@@ -1143,7 +1138,7 @@ > if (this.preferences.insert_space_after_comma_in_enum_declarations) { > this.scribe.space(); > } >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (fieldDeclaration.initialization instanceof QualifiedAllocationExpression) { > this.scribe.printNewLine(); > } >@@ -1164,7 +1159,7 @@ > if (this.preferences.insert_space_after_comma_in_enum_declarations) { > this.scribe.space(); > } >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (fieldDeclaration.initialization instanceof QualifiedAllocationExpression) { > this.scribe.printNewLine(); > } >@@ -1173,7 +1168,7 @@ > } > if (isNextToken(TerminalTokens.TokenNameSEMICOLON)) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (hasConstants > || ((enumConstantsLength - length) != 0) > || typeDeclaration.methods != null >@@ -1210,7 +1205,7 @@ > } > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (class_declaration_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { > this.scribe.unIndent(); > } >@@ -1305,7 +1300,7 @@ > } > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED.equals(block_brace_position)) { > this.scribe.unIndent(); > } >@@ -1367,7 +1362,7 @@ > for (int j = 0; j < argumentLength; j++) { > if (j > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_method_invocation_arguments); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, j); > if (j > 0 && this.preferences.insert_space_after_comma_in_method_invocation_arguments) { >@@ -1452,7 +1447,7 @@ > for (int j = 0; j < argumentLength; j++) { > if (j > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_method_invocation_arguments); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, j); > if (j > 0 && this.preferences.insert_space_after_comma_in_method_invocation_arguments) { >@@ -1532,7 +1527,7 @@ > } > if (isNextToken(TerminalTokens.TokenNameSEMICOLON)) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (i != max - 1) { > this.scribe.printNewLine(); >@@ -1556,7 +1551,7 @@ > while(isNextToken(TerminalTokens.TokenNameSEMICOLON)) { > this.scribe.printComment(); > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (hasSemiColon && isFirst) { > this.scribe.printNewLine(); >@@ -1571,7 +1566,7 @@ > final Statement[] statements = block.statements; > statements[0].traverse(this, scope); > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, true); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > > private void formatLeftCurlyBrace(final int line, final String bracePosition) { >@@ -1657,7 +1652,7 @@ > if (insertSpaceAfterComma) { > this.scribe.space(); > } >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > >@@ -1714,7 +1709,7 @@ > for (int i = 0; i < argumentsLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_method_invocation_arguments); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && this.preferences.insert_space_after_comma_in_method_invocation_arguments) { >@@ -1732,7 +1727,7 @@ > for (int i = 0; i < argumentsLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_method_invocation_arguments); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (i > 0 && this.preferences.insert_space_after_comma_in_method_invocation_arguments) { > this.scribe.space(); >@@ -1776,7 +1771,7 @@ > for (int i = 0; i < argumentLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, spaceBeforeComma); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && spaceAfterComma) { >@@ -1830,7 +1825,7 @@ > for (int i = 0; i < argumentLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, spaceBeforeComma); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && spaceAfterComma) { >@@ -1856,11 +1851,11 @@ > this.scribe.printNewLine(); > this.scribe.indent(); > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.unIndent(); > } else { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > >@@ -1873,7 +1868,7 @@ > this.scribe.indent(); > } > this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, insertSpaceBeforeBrace); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > private void formatStatements(BlockScope scope, final Statement[] statements, boolean insertNewLineAfterLastStatement) { > int statementsLength = statements.length; >@@ -1885,7 +1880,7 @@ > statement.traverse(this, scope); > if (statement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (i != statementsLength - 1) { > if (!(statement instanceof EmptyStatement) && !(statements[i + 1] instanceof EmptyStatement)) { > this.scribe.printNewLine(); >@@ -1903,7 +1898,7 @@ > LocalDeclaration nextLocal = (LocalDeclaration) statements[i + 1]; > if (currentLocal.declarationSourceStart != nextLocal.declarationSourceStart) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (i != statementsLength - 1) { > if (!(statement instanceof EmptyStatement) && !(statements[i + 1] instanceof EmptyStatement)) { > this.scribe.printNewLine(); >@@ -1914,7 +1909,7 @@ > } > } else { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (i != statementsLength - 1) { > if (!(statement instanceof EmptyStatement) && !(statements[i + 1] instanceof EmptyStatement)) { > this.scribe.printNewLine(); >@@ -1925,7 +1920,7 @@ > } > } else { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (i != statementsLength - 1) { > if (!(statement instanceof EmptyStatement) && !(statements[i + 1] instanceof EmptyStatement)) { > this.scribe.printNewLine(); >@@ -1969,7 +1964,7 @@ > for (int i = 0; i < thrownExceptionsLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, spaceBeforeComma); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.alignFragment(throwsAlignment, i); > if (spaceAfterComma) { > this.scribe.space(); >@@ -2047,7 +2042,7 @@ > } > if (isNextToken(TerminalTokens.TokenNameSEMICOLON)) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.printNewLine(); > // realign to the proper value >@@ -2065,7 +2060,7 @@ > } else if (isNextToken(TerminalTokens.TokenNameSEMICOLON)) { > // the only body declaration is an empty declaration (';') > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.printComment(); > this.scribe.exitMemberAlignment(memberAlignment); >@@ -2296,7 +2291,7 @@ > case TerminalTokens.TokenNameCOMMENT_JAVADOC : > case TerminalTokens.TokenNameCOMMENT_BLOCK : > case TerminalTokens.TokenNameCOMMENT_LINE : >- this.scribe.printComment(token); >+ this.scribe.printComment(token, Scribe.NO_TRAILING_COMMENT); > break; > } > } catch(InvalidInputException e) { >@@ -2364,7 +2359,7 @@ > for (int i = 0; i < argumentLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_allocation_expression); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && this.preferences.insert_space_after_comma_in_allocation_expression) { >@@ -2441,7 +2436,7 @@ > defaultValue.traverse(this, (BlockScope) null); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -2577,7 +2572,7 @@ > expressions[0].traverse(this, scope); > for (int i = 1; i < expressionsLength; i++) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.alignFragment(arrayInitializerAlignment, i); > if (this.preferences.insert_space_after_comma_in_array_initializer) { > this.scribe.space(); >@@ -2586,7 +2581,7 @@ > if (i == expressionsLength - 1) { > if (isNextToken(TerminalTokens.TokenNameCOMMA)) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > } >@@ -2610,7 +2605,7 @@ > expressions[0].traverse(this, scope); > if (isNextToken(TerminalTokens.TokenNameCOMMA)) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (insert_new_line_after_opening_brace) { > this.scribe.unIndent(); >@@ -2632,14 +2627,14 @@ > this.scribe.printNextToken(TerminalTokens.TokenNameLBRACE, this.preferences.insert_space_before_opening_brace_in_array_initializer); > if (isNextToken(TerminalTokens.TokenNameCOMMA)) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer); > } else { > formatOpeningBrace(array_initializer_brace_position, this.preferences.insert_space_before_opening_brace_in_array_initializer); > if (isNextToken(TerminalTokens.TokenNameCOMMA)) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_array_initializer); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE, this.preferences.insert_space_between_empty_braces_in_array_initializer); > if (array_initializer_brace_position.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { >@@ -2808,7 +2803,7 @@ > assertStatement.exceptionArgument.traverse(this, scope); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -2906,7 +2901,7 @@ > this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier, true); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -3034,7 +3029,7 @@ > this.scribe.space(); > this.scribe.printQualifiedReference(compilationUnitDeclaration.currentPackage.sourceEnd, false/*do not expect parenthesis*/); > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > int blankLinesAfterPackage = this.preferences.blank_lines_after_package; > if (blankLinesAfterPackage > 0) { > this.scribe.printEmptyLines(blankLinesAfterPackage); >@@ -3057,18 +3052,15 @@ > } > } > int importLength = imports.length; >- int savedNumberOfLineToPreserve = this.preferences.number_of_empty_lines_to_preserve; > if (importLength != 1) { > format(imports[0], false); > for (int i = 1; i < importLength - 1; i++) { > format(imports[i], false); > } > format(imports[importLength - 1], true); >- this.preferences.number_of_empty_lines_to_preserve = savedNumberOfLineToPreserve; > } else { > format(imports[0], true); > } >- this.preferences.number_of_empty_lines_to_preserve = savedNumberOfLineToPreserve; > > int blankLinesAfterImports = this.preferences.blank_lines_after_imports; > if (blankLinesAfterImports > 0) { >@@ -3205,7 +3197,7 @@ > this.scribe.space(); > } > conditionalExpression.valueIfTrue.traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.alignFragment(conditionalExpressionAlignment, 1); > this.scribe.printNextToken(TerminalTokens.TokenNameCOLON, this.preferences.insert_space_before_colon_in_conditional); > >@@ -3241,7 +3233,7 @@ > this.scribe.printIndentationIfNecessary(); > } > this.scribe.scanner.resetTo(constructorDeclaration.declarationSourceEnd + 1, this.scribe.scannerEndPosition - 1); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > switch(this.scribe.scanner.source[this.scribe.scanner.currentPosition]) { > case '\n' : > this.scribe.scanner.currentPosition++; >@@ -3356,14 +3348,14 @@ > } > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (constructor_declaration_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { > this.scribe.unIndent(); > } > } else { > // no method body > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > return false; > } >@@ -3378,7 +3370,7 @@ > this.scribe.printNextToken(TerminalTokens.TokenNameIdentifier, true); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -3407,7 +3399,7 @@ > action.traverse(this, scope); > if (action instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.printNewLine(); > this.scribe.unIndent(); >@@ -3433,7 +3425,7 @@ > > this.scribe.printNextToken(TerminalTokens.TokenNameRPAREN, this.preferences.insert_space_before_closing_paren_in_while); > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -3466,7 +3458,7 @@ > this.scribe.printNewLine(); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > // field is an enum constant >@@ -3519,7 +3511,7 @@ > this.scribe.printNewLine(); > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (enum_constant_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { > this.scribe.unIndent(); > } >@@ -3605,7 +3597,7 @@ > for (int i = 0; i < argumentLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_explicit_constructor_call_arguments); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && this.preferences.insert_space_after_comma_in_explicit_constructor_call_arguments) { >@@ -3624,7 +3616,7 @@ > this.scribe.printNextToken(TerminalTokens.TokenNameRPAREN, this.preferences.insert_space_between_empty_parens_in_method_invocation); > } > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > /** >@@ -3718,7 +3710,7 @@ > } > if (action instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } else { > /* >@@ -3754,7 +3746,7 @@ > if (this.preferences.insert_space_after_comma_in_for_inits) { > this.scribe.space(); > } >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > } >@@ -3780,7 +3772,7 @@ > if (this.preferences.insert_space_after_comma_in_for_increments) { > this.scribe.space(); > } >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } > } >@@ -3804,7 +3796,7 @@ > } > if (action instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } else { > /* >@@ -3869,7 +3861,7 @@ > thenStatement.traverse(this, scope); > if (thenStatement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > ok = true; > } catch (AlignmentException e) { >@@ -3882,19 +3874,19 @@ > thenStatement.traverse(this, scope); > if (thenStatement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (elseStatement != null) { > this.scribe.printNewLine(); > } > } else { >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.printNewLine(); > this.scribe.indent(); > thenStatement.traverse(this, scope); > if (thenStatement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > if (elseStatement != null) { > this.scribe.printNewLine(); >@@ -3926,7 +3918,7 @@ > elseStatement.traverse(this, scope); > if (elseStatement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > } else { > this.scribe.printNewLine(); >@@ -3934,7 +3926,7 @@ > elseStatement.traverse(this, scope); > if (elseStatement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.unIndent(); > } >@@ -4011,7 +4003,7 @@ > statement.traverse(this, scope); > if (statement instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > return false; > } >@@ -4125,7 +4117,7 @@ > this.scribe.printIndentationIfNecessary(); > } > this.scribe.scanner.resetTo(methodDeclaration.declarationSourceEnd + 1, this.scribe.scannerEndPosition - 1); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (!this.scribe.scanner.atEnd()) { > switch(this.scribe.scanner.source[this.scribe.scanner.currentPosition]) { > case '\n' : >@@ -4255,14 +4247,14 @@ > } > } > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (method_declaration_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { > this.scribe.unIndent(); > } > } else { > // no method body > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > return false; > } >@@ -4621,7 +4613,7 @@ > for (int i = 0; i < argumentLength; i++) { > if (i > 0) { > this.scribe.printNextToken(TerminalTokens.TokenNameCOMMA, this.preferences.insert_space_before_comma_in_allocation_expression); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.alignFragment(argumentsAlignment, i); > if (i > 0 && this.preferences.insert_space_after_comma_in_allocation_expression) { >@@ -4768,7 +4760,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > public boolean visit(SingleMemberAnnotation annotation, BlockScope scope) { >@@ -4850,7 +4842,7 @@ > } > this.scribe.checkNLSTag(stringLiteral.sourceStart); > this.scribe.printNextToken(TerminalTokens.TokenNameStringLiteral); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (numberOfParens > 0) { > manageClosingParenthesizedExpression(stringLiteral, numberOfParens); > } >@@ -4877,9 +4869,9 @@ > for (int i = 0; i < fragmentsSize - 1; i++) { > ASTNode fragment = fragments[i]; > fragment.traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (this.scribe.lastNumberOfNewLines == 1) { >- // a new line has been inserted by printTrailingComment() >+ // a new line has been inserted by printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT) > this.scribe.indentationLevel = binaryExpressionAlignment.breakIndentationLevel; > } > this.scribe.alignFragment(binaryExpressionAlignment, i); >@@ -4889,7 +4881,7 @@ > } > } > fragments[fragmentsSize - 1].traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > ok = true; > } catch(AlignmentException e){ > this.scribe.redoAlignment(e); >@@ -4959,7 +4951,7 @@ > this.scribe.unIndent(); > } > statement.traverse(this, scope); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > wasACase = true; > wasAStatement = false; > if (this.preferences.indent_switchstatements_compare_to_cases) { >@@ -5017,7 +5009,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.printNewLine(); > } else if (statement instanceof LocalDeclaration) { > LocalDeclaration currentLocal = (LocalDeclaration) statement; >@@ -5032,7 +5024,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.printNewLine(); > } > } else { >@@ -5040,7 +5032,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.printNewLine(); > } > } else { >@@ -5048,7 +5040,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > this.scribe.printNewLine(); > } > } else if (!wasACase) { >@@ -5066,7 +5058,7 @@ > } > this.scribe.printNewLine(); > this.scribe.printNextToken(TerminalTokens.TokenNameRBRACE); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > if (switch_brace.equals(DefaultCodeFormatterConstants.NEXT_LINE_SHIFTED)) { > this.scribe.unIndent(); > } >@@ -5133,7 +5125,7 @@ > * Print the semi-colon > */ > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > return false; > } > >@@ -5385,7 +5377,7 @@ > action.traverse(this, scope); > if (action instanceof Expression) { > this.scribe.printNextToken(TerminalTokens.TokenNameSEMICOLON, this.preferences.insert_space_before_semicolon); >- this.scribe.printTrailingComment(); >+ this.scribe.printComment(CodeFormatter.K_UNKNOWN, Scribe.BASIC_TRAILING_COMMENT); > } > this.scribe.unIndent(); > } >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.178 >diff -u -r1.178 Scribe.java >--- formatter/org/eclipse/jdt/internal/formatter/Scribe.java 28 Oct 2009 09:57:10 -0000 1.178 >+++ formatter/org/eclipse/jdt/internal/formatter/Scribe.java 5 Nov 2009 14:26:09 -0000 >@@ -96,8 +96,9 @@ > public int numberOfIndentations; > private boolean useTabsOnlyForLeadingIndents; > >- /** indent empty lines*/ >+ /** empty lines*/ > private final boolean indentEmptyLines; >+ int blank_lines_between_import_groups = -1; > > /* Comments formatting */ > private static final int INCLUDE_BLOCK_COMMENTS = CodeFormatter.F_INCLUDE_COMMENTS | CodeFormatter.K_MULTI_LINE_COMMENT; >@@ -105,6 +106,9 @@ > private static final int INCLUDE_LINE_COMMENTS = CodeFormatter.F_INCLUDE_COMMENTS | CodeFormatter.K_SINGLE_LINE_COMMENT; > private static final int SKIP_FIRST_WHITESPACE_TOKEN = -2; > private static final int INVALID_TOKEN = 2000; >+ static final int NO_TRAILING_COMMENT = 0; >+ static final int BASIC_TRAILING_COMMENT = 1; >+ static final int IMPORT_TRAILING_COMMENT = 2; > private int formatComments = 0; > private int headerEndPosition = -1; > String commentIndentation; // indentation requested in comments (usually in javadoc root tags description) >@@ -1065,6 +1069,9 @@ > } > return Util.EMPTY_STRING; > } >+ if (this.blank_lines_between_import_groups >= 0) { >+ return getEmptyLines(this.blank_lines_between_import_groups); >+ } > if (this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { > int linesToPreserve = Math.min(count, this.formatter.preferences.number_of_empty_lines_to_preserve); > return getEmptyLines(linesToPreserve); >@@ -1310,9 +1317,11 @@ > > private void preserveEmptyLines(int count, int insertPosition) { > if (count > 0) { >- if (this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { >+ if (this.blank_lines_between_import_groups >= 0) { >+ printEmptyLines(this.blank_lines_between_import_groups, insertPosition); >+ } else if (this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { > int linesToPreserve = Math.min(count, this.formatter.preferences.number_of_empty_lines_to_preserve); >- this.printEmptyLines(linesToPreserve, insertPosition); >+ printEmptyLines(linesToPreserve, insertPosition); > } else { > printNewLine(insertPosition); > } >@@ -2052,13 +2061,13 @@ > } > > void printComment() { >- printComment(CodeFormatter.K_UNKNOWN); >+ printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT); > } > > /* > * Main method to print and format comments (javadoc, block and single line comments) > */ >- void printComment(int kind) { >+ void printComment(int kind, int trailing) { > final boolean rejectLineComment = kind == CodeFormatter.K_MULTI_LINE_COMMENT || kind == CodeFormatter.K_JAVA_DOC; > final boolean rejectBlockComment = kind == CodeFormatter.K_SINGLE_LINE_COMMENT || kind == CodeFormatter.K_JAVA_DOC; > final boolean rejectJavadocComment = kind == CodeFormatter.K_SINGLE_LINE_COMMENT || kind == CodeFormatter.K_MULTI_LINE_COMMENT; >@@ -2067,13 +2076,15 @@ > int currentTokenStartPosition = this.scanner.currentPosition; > boolean hasComment = false; > boolean hasLineComment = false; >- boolean hasWhitespace = false; >- int count = 0; >+ boolean hasWhitespaces = false; >+ int lines = 0; > while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { > switch(this.currentToken) { > case TerminalTokens.TokenNameWHITESPACE : > char[] whiteSpaces = this.scanner.getCurrentTokenSource(); >- count = 0; >+ int whitespacesStartPosition = this.scanner.getCurrentTokenStartPosition(); >+ int whitespacesEndPosition = this.scanner.getCurrentTokenEndPosition(); >+ lines = 0; > for (int i = 0, max = whiteSpaces.length; i < max; i++) { > switch(whiteSpaces[i]) { > case '\r' : >@@ -2082,79 +2093,141 @@ > i++; > } > } >- count++; >+ lines++; > break; > case '\n' : >- count++; >+ lines++; > } > } >- if (count == 0) { >- hasWhitespace = true; >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >- } else if (hasLineComment) { >- preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >- } else if (hasComment) { >- if (count == 1) { >- this.printNewLine(this.scanner.getCurrentTokenStartPosition()); >- } else { >- preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); >+ // If following token is a line comment on the same line or the line just after, >+ // then it might be not really formatted as a trailing comment >+ boolean realTrailing = trailing > NO_TRAILING_COMMENT; >+ if (trailing == IMPORT_TRAILING_COMMENT && this.scanner.currentCharacter == '/' && lines <= 1) { >+ int currentPosition = this.scanner.currentPosition; >+ if (this.scanner.getNextToken() == TerminalTokens.TokenNameCOMMENT_LINE) { >+ int token = this.scanner.getNextToken(); >+ while (token == TerminalTokens.TokenNameCOMMENT_LINE) { >+ token = this.scanner.getNextToken(); >+ } >+ if (token == TerminalTokens.TokenNameWHITESPACE) { >+ char[] secondWhiteSpaces = this.scanner.getCurrentTokenSource(); >+ loop: for (int i = 0, max = secondWhiteSpaces.length; i < max; i++) { >+ switch(secondWhiteSpaces[i]) { >+ case '\r' : >+ case '\n' : >+ realTrailing = false; >+ break loop; >+ } >+ } >+ } > } >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >- } else if (count != 0 && (!this.formatter.preferences.join_wrapped_lines || this.formatter.preferences.number_of_empty_lines_to_preserve != 0)) { >- addReplaceEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition(), getPreserveEmptyLines(count-1)); >+ this.scanner.resetTo(currentPosition, this.scanner.eofPosition - 1); >+ } >+ if (realTrailing) { >+ // if a line comment is consumed, no other comment can be on the same line after >+ if (hasLineComment) { >+ if (lines >= 1) { >+ currentTokenStartPosition = whitespacesStartPosition; >+ preserveEmptyLines(lines, currentTokenStartPosition); >+ addDeleteEdit(currentTokenStartPosition, whitespacesEndPosition); >+ this.scanner.resetTo(this.scanner.currentPosition, this.scannerEndPosition - 1); >+ return; >+ } >+ this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >+ return; >+ } >+ // if one or several new lines are consumed, following comments cannot be considered as trailing ones >+ if (lines >= 1) { >+ if (hasComment) { >+ this.printNewLine(whitespacesStartPosition); >+ } >+ this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >+ return; >+ } >+ // delete consumed white spaces >+ hasWhitespaces = true; >+ currentTokenStartPosition = this.scanner.currentPosition; >+ addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition); > } else { >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >+ if (lines == 0) { >+ hasWhitespaces = true; >+ addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition); >+ } else if (hasLineComment) { >+ currentTokenStartPosition = whitespacesStartPosition; >+ preserveEmptyLines(lines, currentTokenStartPosition); >+ addDeleteEdit(currentTokenStartPosition, whitespacesEndPosition); >+ } else if (hasComment) { >+ if (lines == 1) { >+ this.printNewLine(whitespacesStartPosition); >+ } else { >+ preserveEmptyLines(lines - 1, whitespacesStartPosition); >+ } >+ addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition); >+ } else if (lines != 0 && (!this.formatter.preferences.join_wrapped_lines || this.formatter.preferences.number_of_empty_lines_to_preserve != 0)) { >+ addReplaceEdit(whitespacesStartPosition, whitespacesEndPosition, getPreserveEmptyLines(lines-1)); >+ } else { >+ addDeleteEdit(whitespacesStartPosition, whitespacesEndPosition); >+ } > } > currentTokenStartPosition = this.scanner.currentPosition; > break; > case TerminalTokens.TokenNameCOMMENT_LINE : > if (rejectLineComment) break; >- if (count >= 1) { >- if (count > 1) { >- preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); >- } else if (count == 1) { >+ if (lines >= 1) { >+ if (lines > 1) { >+ preserveEmptyLines(lines - 1, this.scanner.getCurrentTokenStartPosition()); >+ } else if (lines == 1) { > printNewLine(this.scanner.getCurrentTokenStartPosition()); > } >- } else if (hasWhitespace) { >+ } else if (hasWhitespaces) { > space(); > } >- hasWhitespace = false; >+ hasWhitespaces = false; > printLineComment(); > currentTokenStartPosition = this.scanner.currentPosition; > hasLineComment = true; >- count = 0; >+ lines = 0; > break; > case TerminalTokens.TokenNameCOMMENT_BLOCK : >+ if (trailing > NO_TRAILING_COMMENT && lines >= 1) { >+ // a block comment on next line means that there's no trailing comment >+ this.scanner.resetTo(this.scanner.getCurrentTokenStartPosition(), this.scannerEndPosition - 1); >+ return; >+ } > if (rejectBlockComment) break; >- if (count >= 1) { >- if (count > 1) { >- preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); >- } else if (count == 1) { >+ if (lines >= 1) { >+ if (lines > 1) { >+ preserveEmptyLines(lines - 1, this.scanner.getCurrentTokenStartPosition()); >+ } else if (lines == 1) { > printNewLine(this.scanner.getCurrentTokenStartPosition()); > } >- } else if (hasWhitespace) { >+ } else if (hasWhitespaces) { > space(); > } >- hasWhitespace = false; >+ hasWhitespaces = false; > printBlockComment(false); > currentTokenStartPosition = this.scanner.currentPosition; > hasLineComment = false; > hasComment = true; >- count = 0; >+ lines = 0; > break; > case TerminalTokens.TokenNameCOMMENT_JAVADOC : >+ if (trailing > NO_TRAILING_COMMENT) { >+ // a javadoc comment should not be considered as a trailing comment >+ this.scanner.resetTo(this.scanner.getCurrentTokenStartPosition(), this.scannerEndPosition - 1); >+ return; >+ } > if (rejectJavadocComment) break; >- if (count >= 1) { >- if (count > 1) { >- preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); >- } else if (count == 1) { >+ if (lines >= 1) { >+ if (lines > 1) { >+ preserveEmptyLines(lines - 1, this.scanner.getCurrentTokenStartPosition()); >+ } else if (lines == 1) { > printNewLine(this.scanner.getCurrentTokenStartPosition()); > } >- } else if (hasWhitespace) { >+ } else if (hasWhitespaces) { > space(); > } >- hasWhitespace = false; >+ hasWhitespaces = false; > if (includesJavadocComments()) { > printJavadocComment(this.scanner.startPosition, this.scanner.currentPosition); > } else { >@@ -2164,7 +2237,7 @@ > currentTokenStartPosition = this.scanner.currentPosition; > hasLineComment = false; > hasComment = true; >- count = 0; >+ lines = 0; > break; > default : > // step back one token >@@ -2196,10 +2269,10 @@ > // Print corresponding comment > switch (kind) { > case CodeFormatter.K_SINGLE_LINE_COMMENT: >- printComment(kind); >+ printComment(kind, NO_TRAILING_COMMENT); > break; > case CodeFormatter.K_MULTI_LINE_COMMENT: >- printComment(kind); >+ printComment(kind, NO_TRAILING_COMMENT); > break; > case CodeFormatter.K_JAVA_DOC: > printJavadocComment(start, end); >@@ -3898,7 +3971,7 @@ > this.formatBrace = true; > } > try { >- printComment(CodeFormatter.K_UNKNOWN); >+ printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT); > try { > this.currentToken = this.scanner.getNextToken(); > if (expectedTokenType != this.currentToken) { >@@ -3924,7 +3997,7 @@ > } > > public void printNextToken(int[] expectedTokenTypes, boolean considerSpaceIfAny){ >- printComment(CodeFormatter.K_UNKNOWN); >+ printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT); > try { > this.currentToken = this.scanner.getNextToken(); > if (Arrays.binarySearch(expectedTokenTypes, this.currentToken) < 0) { >@@ -3948,7 +4021,7 @@ > int numberOfIdentifiers = 0; > try { > do { >- printComment(CodeFormatter.K_UNKNOWN); >+ printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT); > switch(this.currentToken = this.scanner.getNextToken()) { > case TerminalTokens.TokenNameEOF : > return; >@@ -3994,7 +4067,7 @@ > int currentTokenStartPosition = this.scanner.currentPosition; > try { > do { >- printComment(CodeFormatter.K_UNKNOWN); >+ printComment(CodeFormatter.K_UNKNOWN, NO_TRAILING_COMMENT); > switch(this.currentToken = this.scanner.getNextToken()) { > case TerminalTokens.TokenNameEOF : > return; >@@ -4048,151 +4121,6 @@ > } > } > >- public void printTrailingComment(int numberOfNewLinesToInsert) { >- try { >- // if we have a space between two tokens we ensure it will be dumped in the formatted string >- int currentTokenStartPosition = this.scanner.currentPosition; >- boolean hasWhitespaces = false; >- boolean hasLineComment = false; >- while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { >- switch(this.currentToken) { >- case TerminalTokens.TokenNameWHITESPACE : >- int count = 0; >- char[] whiteSpaces = this.scanner.getCurrentTokenSource(); >- for (int i = 0, max = whiteSpaces.length; i < max; i++) { >- switch(whiteSpaces[i]) { >- case '\r' : >- if ((i + 1) < max) { >- if (whiteSpaces[i + 1] == '\n') { >- i++; >- } >- } >- count++; >- break; >- case '\n' : >- count++; >- } >- } >- if (hasLineComment) { >- if (count >= 1) { >- currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); >- preserveEmptyLines(numberOfNewLinesToInsert, currentTokenStartPosition); >- addDeleteEdit(currentTokenStartPosition, this.scanner.getCurrentTokenEndPosition()); >- this.scanner.resetTo(this.scanner.currentPosition, this.scannerEndPosition - 1); >- return; >- } >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } else if (count > 1) { >- this.printEmptyLines(numberOfNewLinesToInsert, this.scanner.getCurrentTokenStartPosition()); >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } else { >- hasWhitespaces = true; >- currentTokenStartPosition = this.scanner.currentPosition; >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >- } >- break; >- case TerminalTokens.TokenNameCOMMENT_LINE : >- if (hasWhitespaces) { >- space(); >- } >- printLineComment(); >- currentTokenStartPosition = this.scanner.currentPosition; >- hasLineComment = true; >- break; >- case TerminalTokens.TokenNameCOMMENT_BLOCK : >- if (hasWhitespaces) { >- space(); >- } >- printBlockComment(false); >- currentTokenStartPosition = this.scanner.currentPosition; >- break; >- default : >- // step back one token >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } >- } >- } catch (InvalidInputException e) { >- throw new AbortFormatting(e); >- } >- } >- public void printTrailingComment() { >- try { >- // if we have a space between two tokens we ensure it will be dumped in the formatted string >- int currentTokenStartPosition = this.scanner.currentPosition; >- boolean hasWhitespaces = false; >- boolean hasComment = false; >- boolean hasLineComment = false; >- while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { >- switch(this.currentToken) { >- case TerminalTokens.TokenNameWHITESPACE : >- int count = 0; >- char[] whiteSpaces = this.scanner.getCurrentTokenSource(); >- for (int i = 0, max = whiteSpaces.length; i < max; i++) { >- switch(whiteSpaces[i]) { >- case '\r' : >- if ((i + 1) < max) { >- if (whiteSpaces[i + 1] == '\n') { >- i++; >- } >- } >- count++; >- break; >- case '\n' : >- count++; >- } >- } >- if (hasLineComment) { >- if (count >= 1) { >- currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); >- preserveEmptyLines(count, currentTokenStartPosition); >- addDeleteEdit(currentTokenStartPosition, this.scanner.getCurrentTokenEndPosition()); >- this.scanner.resetTo(this.scanner.currentPosition, this.scannerEndPosition - 1); >- return; >- } >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } else if (count >= 1) { >- if (hasComment) { >- this.printNewLine(this.scanner.getCurrentTokenStartPosition()); >- } >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } else { >- hasWhitespaces = true; >- currentTokenStartPosition = this.scanner.currentPosition; >- addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); >- } >- break; >- case TerminalTokens.TokenNameCOMMENT_LINE : >- if (hasWhitespaces) { >- space(); >- } >- printLineComment(); >- currentTokenStartPosition = this.scanner.currentPosition; >- hasLineComment = true; >- break; >- case TerminalTokens.TokenNameCOMMENT_BLOCK : >- if (hasWhitespaces) { >- space(); >- } >- printBlockComment(false); >- currentTokenStartPosition = this.scanner.currentPosition; >- hasComment = true; >- break; >- default : >- // step back one token >- this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); >- return; >- } >- } >- } catch (InvalidInputException e) { >- throw new AbortFormatting(e); >- } >- } >- > void redoAlignment(AlignmentException e){ > if (e.relativeDepth > 0) { // if exception targets a distinct context > e.relativeDepth--; // record fact that current context got traversed >#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.5 >diff -u -r1.5 FormatterBugsTests.java >--- src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java 28 Oct 2009 09:57:06 -0000 1.5 >+++ src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java 5 Nov 2009 14:26:12 -0000 >@@ -312,6 +312,148 @@ > } > > /** >+ * @bug 199265: [formatter] 3.3 Code Formatter mis-places commented-out import statements >+ * @test Ensure that the formatter keep commented import declarations on their lines >+ * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=199265" >+ */ >+public void testBug199265a() throws JavaModelException { >+ String source = >+ "import java.util.List;\n" + >+ "//import java.util.HashMap;\n" + >+ "import java.util.Set;\n" + >+ "\n" + >+ "public class X01 {\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265b() throws JavaModelException { >+ String source = >+ "import java.util.List;\n" + >+ "import java.util.Set;\n" + >+ "//import java.util.HashMap;\n" + >+ "\n" + >+ "public class X02 {\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265c1() throws JavaModelException { >+ String source = >+ "import java.util.List;\n" + >+ "// CU snippet\n" + >+ "public class X03 {\n" + >+ " List field;\n" + >+ "}\n"; >+ formatSource(source, >+ "import java.util.List;\n" + >+ "\n" + >+ "// CU snippet\n" + >+ "public class X03 {\n" + >+ " List field;\n" + >+ "}\n" >+ ); >+} >+public void testBug199265c2() throws JavaModelException { >+ this.formatterPrefs.comment_format_header = true; >+ String source = >+ "import java.util.List;\n" + >+ "// CU snippet\n" + >+ "public class X03 {\n" + >+ " List field;\n" + >+ "}\n"; >+ formatSource(source, >+ "import java.util.List;\n" + >+ "\n" + >+ "// CU snippet\n" + >+ "public class X03 {\n" + >+ " List field;\n" + >+ "}\n" >+ ); >+} >+public void testBug199265c3() throws JavaModelException { >+ String source = >+ "import java.util.List;\n" + >+ "\n" + >+ "// line comment\n" + >+ "public class X03 {\n" + >+ " List field;\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265_wksp1a() throws JavaModelException { >+ String source = >+ "package wksp1;\n" + >+ "\n" + >+ "import java.util.*;\n" + >+ "import java.util.List; // line comment\n" + >+ "\n" + >+ "/**\n" + >+ " * Javadoc comment\n" + >+ " */\n" + >+ "public class X01 {\n" + >+ "\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265_wksp1b() throws JavaModelException { >+ String source = >+ "package wksp1;\n" + >+ "\n" + >+ "import java.util.Map;\n" + >+ "\n" + >+ "//==========================\n" + >+ "// Line comment\n" + >+ "//==========================\n" + >+ "\n" + >+ "/**\n" + >+ " * Javadoc comment\n" + >+ " */\n" + >+ "public class X02 {\n" + >+ "\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265_wksp2a() throws JavaModelException { >+ String source = >+ "package wksp2;\n" + >+ "\n" + >+ "import java.util.Map;\n" + >+ "\n" + >+ "//#if defined(TEST)\n" + >+ "import java.util.Vector;\n" + >+ "//#else\n" + >+ "//##import java.util.Set;\n" + >+ "//#endif\n" + >+ "\n" + >+ "public class X01 {\n" + >+ "\n" + >+ "}\n"; >+ formatSource(source); >+} >+public void testBug199265_wksp3a() throws JavaModelException { >+ String source = >+ "package wksp3;\n" + >+ "\n" + >+ "import java.util.Set; // comment 1\n" + >+ "import java.util.Map; // comment 2\n" + >+ "import java.util.List; // comment 3\n" + >+ "\n" + >+ "public class X01 {\n" + >+ "\n" + >+ "}\n"; >+ formatSource(source, >+ "package wksp3;\n" + >+ "\n" + >+ "import java.util.Set; // comment 1\n" + >+ "import java.util.Map; // comment 2\n" + >+ "import java.util.List; // comment 3\n" + >+ "\n" + >+ "public class X01 {\n" + >+ "\n" + >+ "}\n" >+ ); >+} >+ >+/** > * @bug 208541: [formatter] Formatter does not format whole region/selection > * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=208541" > */ >Index: src/org/eclipse/jdt/core/tests/formatter/FormatterMassiveRegressionTests.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterMassiveRegressionTests.java,v >retrieving revision 1.6 >diff -u -r1.6 FormatterMassiveRegressionTests.java >--- src/org/eclipse/jdt/core/tests/formatter/FormatterMassiveRegressionTests.java 24 Oct 2009 18:49:53 -0000 1.6 >+++ src/org/eclipse/jdt/core/tests/formatter/FormatterMassiveRegressionTests.java 5 Nov 2009 14:26:13 -0000 >@@ -33,6 +33,7 @@ > import junit.framework.Test; > import junit.framework.TestSuite; > >+import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.FileLocator; > import org.eclipse.core.runtime.IPath; > import org.eclipse.core.runtime.Path; >@@ -45,7 +46,6 @@ > import org.eclipse.jdt.internal.formatter.DefaultCodeFormatter; > import org.eclipse.jdt.internal.formatter.DefaultCodeFormatterOptions; > import org.eclipse.text.edits.TextEdit; >- > import com.ibm.icu.util.StringTokenizer; > > /** >@@ -154,6 +154,44 @@ > private final static File INPUT_DIR = new File(System.getProperty("inputDir")); > private static File OUTPUT_DIR; // use static to minimize data consumption > private static File WRITE_DIR; >+ >+ // Files >+ final static String FILES_FILTER = System.getProperty("filesFilter"); >+ final static int FILES_FILTER_KIND; >+ static { >+ int kind = 0; // No filter >+ if (FILES_FILTER != null) { >+ int length = FILES_FILTER.length(); >+ int idxQM = FILES_FILTER.indexOf('?'); >+ int idxS = FILES_FILTER.indexOf('*'); >+ if (idxQM >= 0 && idxS >= 0) { >+ kind = 4; // Pure pattern match >+ } else if (idxQM >= 0) { >+ while (idxQM < length && FILES_FILTER.charAt(idxQM) == '?') { >+ idxQM++; >+ } >+ if (idxQM == length) { >+ kind = 3; // Starts with + same length >+ } else { >+ kind = 4; // Pure pattern match >+ } >+ } else if (idxS >= 0) { >+ while (idxS < length && FILES_FILTER.charAt(idxQM) == '*') { >+ idxS++; >+ } >+ if (idxS == length) { >+ kind = 2; // Starts with >+ } else { >+ kind = 4; // Pure pattern match >+ } >+ } else { >+ kind = 1; // Equals >+ } >+ } >+ FILES_FILTER_KIND = kind; >+ } >+ >+ // Log > private static File LOG_FILE; > private static PrintStream LOG_STREAM; > >@@ -215,7 +253,7 @@ > private static String ECLIPSE_VERSION; > private static String ECLIPSE_MILESTONE; > private static String JDT_CORE_VERSION; >- private static String PATCH_BUG; >+ private static String PATCH_BUG, PATCH_VERSION; > private static boolean JDT_CORE_HEAD; > private final static IPath[] EXPECTED_FAILURES = INPUT_DIR.getPath().indexOf("v34") < 0 > ? new IPath[] { >@@ -287,7 +325,25 @@ > // Get files from input dir > FileFilter filter = new FileFilter() { > public boolean accept(File pathname) { >- return pathname.isDirectory() || pathname.getPath().endsWith(".java"); >+ String path = pathname.getPath(); >+ boolean accept = pathname.isDirectory() || path.endsWith(".java"); >+ if (accept) { >+ switch (FILES_FILTER_KIND) { >+ case 1: // Equals >+ accept = path.equals(FILES_FILTER); >+ break; >+ case 2: // Starts with >+ accept = path.startsWith(FILES_FILTER); >+ break; >+ case 3: // Starts with + same length >+ accept = path.startsWith(FILES_FILTER) && path.length() == FILES_FILTER.length(); >+ break; >+ case 4: // Pattern >+ accept = path.matches(FILES_FILTER); >+ break; >+ } >+ } >+ return accept; > } > }; > File[] allFiles = ModelTestsUtil.getAllFiles(INPUT_DIR, filter); >@@ -300,8 +356,22 @@ > > // Init directories > boolean clean = initDirectories(buffer); >- buffer.append("Comparison: "+CAN_COMPARE); >- buffer.append(LINE_SEPARATOR); >+ buffer.append("Compare vs: "); >+ if (CAN_COMPARE) { >+ if (clean) { >+ buffer.append(JDT_CORE_VERSION); >+ } else { >+ File versionFile = new File(OUTPUT_DIR, "version.txt"); >+ if (versionFile.exists()) { >+ buffer.append(Util.fileContent(versionFile.getAbsolutePath())); >+ } else { >+ buffer.append("???"); >+ } >+ } >+ } else { >+ buffer.append("none"); >+ } >+// buffer.append(LINE_SEPARATOR); > > // Write logs > System.out.println(buffer.toString()); >@@ -385,7 +455,11 @@ > clean = true; > } > } >- if (!OUTPUT_DIR.exists() && !clean) { >+ if (clean) { >+ if (PATCH_BUG != null || JDT_CORE_HEAD) { >+ throw new RuntimeException("Reference can only be updated using a version (i.e. with a closed buildnotes_jdt-core.html)!"); >+ } >+ } else if (!OUTPUT_DIR.exists()) { > System.err.println(" WARNING: The output directory "+OUTPUT_DIR+" does not exist..."); > System.err.println(" => NO comparison could be done!"); > CAN_COMPARE = false; >@@ -398,7 +472,11 @@ > } > > // Get log dir >- setLogDir(buffer); >+ try { >+ setLogDir(buffer); >+ } catch (CoreException e) { >+ e.printStackTrace(); >+ } > > // Get write dir > String wdir = System.getProperty("writeDir"); //$NON-NLS-1$ >@@ -417,9 +495,12 @@ > return clean; > } > >-private static void setLogDir(StringBuffer buffer) { >+private static void setLogDir(StringBuffer buffer) throws CoreException { > > // Compute log dir >+// IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); >+// IProject project = root.getProject("Bugs"); >+// IFolder rootFolder = project.getFolder("Formatter"); > File logDir = new File(System.getProperty("logDir")); > if (!logDir.exists()) { > return; >@@ -427,44 +508,89 @@ > > // Compute log sub-directories depending on profiles > logDir = new File(logDir, ECLIPSE_VERSION); >+// IFolder folder = rootFolder.getFolder(ECLIPSE_VERSION); >+// if (!folder.exists()) folder.create(true, true, null); > if (PATCH_BUG != null) { > logDir = new File(logDir, "tests"); > logDir = new File(logDir, PATCH_BUG); >+ logDir = new File(logDir, PATCH_VERSION); >+// folder = folder.getFolder("tests"); >+// if (!folder.exists()) folder.create(true, true, null); >+// folder = folder.getFolder(PATCH_BUG); >+// if (!folder.exists()) folder.create(true, true, null); >+// folder = folder.getFolder(PATCH_VERSION); >+// if (!folder.exists()) folder.create(true, true, null); > } else if (JDT_CORE_HEAD) { > logDir = new File(logDir, "HEAD"); >+// folder = folder.getFolder("HEAD"); >+// if (!folder.exists()) folder.create(true, true, null); > } else { > logDir = new File(logDir, ECLIPSE_MILESTONE); > logDir = new File(logDir, JDT_CORE_VERSION); >+// folder = folder.getFolder(ECLIPSE_MILESTONE); >+// if (!folder.exists()) folder.create(true, true, null); >+// folder = folder.getFolder(JDT_CORE_VERSION); >+// if (!folder.exists()) folder.create(true, true, null); > } > if (NO_COMMENTS || BRACES != null || JOIN_LINES != null) { > logDir = new File(logDir, "profiles"); >+// folder = folder.getFolder("profiles"); >+// if (!folder.exists()) folder.create(true, true, null); > if (JOIN_LINES != null) { > logDir = new File(new File(logDir, "join_lines"), JOIN_LINES); >+// folder = folder.getFolder("join_lines"); >+// if (!folder.exists()) folder.create(true, true, null); >+// folder = folder.getFolder(JOIN_LINES); >+// if (!folder.exists()) folder.create(true, true, null); > } > if (NO_COMMENTS) { > logDir = new File(logDir, "no_comments"); >+// folder = folder.getFolder("no_comments"); >+// if (!folder.exists()) folder.create(true, true, null); > } > if (BRACES != null) { > logDir = new File(new File(logDir, "braces"), BRACES); >+// folder = folder.getFolder("braces"); >+// if (!folder.exists()) folder.create(true, true, null); >+// folder = folder.getFolder(BRACES); >+// if (!folder.exists()) folder.create(true, true, null); > } > } > > // Create log stream > logDir.mkdirs(); >- String logFileName = INPUT_DIR.getName().replaceAll("\\.", "")+".txt"; >+ String filePrefix = INPUT_DIR.getName().replaceAll("\\.", ""); >+ String logFileName = filePrefix+".txt"; > LOG_FILE = new File(logDir, logFileName); >+ if (LOG_FILE.exists()) { >+ File saveDir = new File(logDir, "save"); >+ saveDir.mkdir(); >+ int i=0; >+ while (true) { >+ String newFileName = filePrefix+"_"; >+ if (i<10) newFileName += "0"; >+ newFileName += i+".text"; >+ File renamedFile = new File(saveDir, newFileName); >+ if (LOG_FILE.renameTo(renamedFile)) break; >+ i++; >+ } >+ } >+// LOG_RESOURCE = folder.getFile(logFileName); > buffer.append("Log file : "); > buffer.append(LOG_FILE); >+// buffer.append(LOG_RESOURCE.getFullPath()); > buffer.append(LINE_SEPARATOR); > try { >- if (LOG_FILE.exists()) { >- Util.delete(LOG_FILE); >- } > LOG_STREAM = new PrintStream(new BufferedOutputStream(new FileOutputStream(LOG_FILE))); >+ LOG_STREAM.flush(); > } > catch (FileNotFoundException fnfe) { > System.err.println("Can't create log file"+LOG_FILE); //$NON-NLS-1$ > } >+// if (LOG_RESOURCE.exists()) { >+// Util.delete(LOG_RESOURCE); >+// } >+// LOG_BUFFER = new StringBuffer(); > } > private static void setOutputDir(String dir, StringBuffer buffer) { > >@@ -546,6 +672,7 @@ > patch_line = line; > StringTokenizer tokenizer = new StringTokenizer(line); > tokenizer.nextToken(); // 'Patch' >+ PATCH_VERSION = tokenizer.nextToken(); > while (tokenizer.hasMoreTokens()) { > PATCH_BUG = tokenizer.nextToken(); > } >@@ -553,7 +680,7 @@ > Integer.parseInt(PATCH_BUG); > } > catch (NumberFormatException nfe) { >- System.err.println("Invalid patch bug number noticed in JDT/Core buildnotes:"+PATCH_BUG); >+ System.err.println("Invalid patch bug number noticed in JDT/Core buildnotes: "+PATCH_BUG); > } > } > if (!JDT_CORE_HEAD) break; >@@ -625,7 +752,7 @@ > StringBuffer name = new StringBuffer(super.getName()); > if (this.testIndex >= 0) { > int n = this.testIndex == 0 ? 0 : (int) (Math.log(this.testIndex)/Math.log(10)); >- for (int i=n; i<MAX_DIGITS-1; i++) { >+ for (int i=n; i<MAX_DIGITS; i++) { > name.append('0'); > } > name.append(this.testIndex); >@@ -693,48 +820,67 @@ > public void tearDownSuite() throws Exception { > > // Display stored failures >- StringBuffer buffer = new StringBuffer(LINE_SEPARATOR); >+ StringBuffer buffer1 = new StringBuffer(LINE_SEPARATOR); > int max = FAILURES.length; > for (int i=0; i<max; i++) { > List failures = FAILURES[i].failures; > int size = failures.size(); > if (size > 0) { >- buffer.append(size); >- buffer.append(" file"); >+ buffer1.append(size); >+ buffer1.append(" file"); > if (size == 1) { >- buffer.append(" has "); >+ buffer1.append(" has "); > } else { >- buffer.append("s have "); >+ buffer1.append("s have "); > } >- buffer.append(FAILURES[i]); >- buffer.append('!'); >- buffer.append(LINE_SEPARATOR); >+ buffer1.append(FAILURES[i]); >+ buffer1.append('!'); >+ buffer1.append(LINE_SEPARATOR); > } > } >- buffer.append(LINE_SEPARATOR); >+ buffer1.append(LINE_SEPARATOR); >+ StringBuffer buffer2 = new StringBuffer(LINE_SEPARATOR); > for (int i=0; i<max; i++) { > List failures = FAILURES[i].failures; > int size = failures.size(); > if (size > 0) { >- buffer.append("List of file(s) with "); >- buffer.append(FAILURES[i]); >- buffer.append(':'); >- buffer.append(LINE_SEPARATOR); >+ buffer2.append("List of file(s) with "); >+ buffer2.append(FAILURES[i]); >+ buffer2.append(':'); >+ buffer2.append(LINE_SEPARATOR); > for (int j=0; j<size; j++) { >- buffer.append(" - "); >- buffer.append(failures.get(j)); >- buffer.append(LINE_SEPARATOR); >+ buffer2.append(" - "); >+ buffer2.append(failures.get(j)); >+ buffer2.append(LINE_SEPARATOR); > } > } > } > > // Log failures >+ System.out.println(buffer1.toString()); > if (LOG_STREAM == null) { >- System.out.println(buffer.toString()); >+ System.out.println(buffer2.toString()); > } else { >- LOG_STREAM.print(buffer.toString()); >+ LOG_STREAM.print(buffer1.toString()); >+ LOG_STREAM.print(buffer2.toString()); > LOG_STREAM.close(); > } >+// LOG_BUFFER.append(buffer1.toString()); >+// LOG_BUFFER.append(buffer2.toString()); >+// InputStream stream= new InputStream() { >+// private Reader reader= new StringReader(LOG_BUFFER.toString()); >+// public int read() throws IOException { >+// return this.reader.read(); >+// } >+// }; >+// if (LOG_RESOURCE.exists()) { >+// LOG_RESOURCE.setContents( >+// stream, >+// IResource.FORCE | IResource.KEEP_HISTORY, >+// null); >+// } else { >+// LOG_RESOURCE.create(stream, IResource.FORCE, null); >+// } > } > > /* >@@ -1007,6 +1153,11 @@ > */ > public void testMakeReferences() throws IOException, Exception { > >+ // Dump the version >+ File versionFile = new Path(OUTPUT_DIR.getPath()).append("version.txt").toFile(); >+ OUTPUT_DIR.mkdirs(); >+ Util.writeToFile(JDT_CORE_VERSION, versionFile.getAbsolutePath()); >+ > // Format each file of the input dir and write the result to the output directory > assertNotNull("We should have got input files from "+INPUT_DIR, this.inputFiles); > DefaultCodeFormatter codeFormatter = codeFormatter();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 199265
:
151423
|
151464