Previous CloneSet | Next CloneSet | Back to Main Report |
Clone Mass | Clones in CloneSet | Parameter Count | Clone Similarity | Syntax Category [Sequence Length] |
---|---|---|---|---|
541 | 2 | 0 | 1.000 | class_body_declarations[13] |
Clone Abstraction | Parameter Bindings |
Clone Instance (Click to see clone) | Line Count | Source Line | Source File |
---|---|---|---|
1 | 541 | 576 | plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java |
2 | 541 | 539 | plugins/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe2.java |
| ||||
public void indent() { this.indentationLevel += this.indentationSize; this.numberOfIndentations++; } /** * @param compilationUnitSource */ public void initializeScanner(char[] compilationUnitSource) { this.scanner.setSource(compilationUnitSource); this.scannerEndPosition = compilationUnitSource.length; this.scanner.resetTo(0, this.scannerEndPosition); this.edits = new OptimizedReplaceEdit[INITIAL_SIZE]; } private boolean isValidEdit(OptimizedReplaceEdit edit) { final int editLength = edit.length; final int editReplacementLength = edit.replacement.length(); final int editOffset = edit.offset; if (editLength != 0) { if (this.textRegionStart <= editOffset && (editOffset + editLength - 1) <= this.textRegionEnd) { if (editReplacementLength != 0 && editLength == editReplacementLength) { for (int i = editOffset, max = editOffset + editLength; i < max; i++) { if (scanner.source[i] != edit.replacement.charAt(i - editOffset)) { return true; } } return false; } else { return true; } } else if (editOffset + editLength == this.textRegionStart) { int i = editOffset; for (int max = editOffset + editLength; i < max; i++) { int replacementStringIndex = i - editOffset; if (replacementStringIndex >= editReplacementLength || scanner.source[i] != edit.replacement.charAt(replacementStringIndex)) { break; } } if (i - editOffset != editReplacementLength && i != editOffset + editLength - 1) { edit.offset = textRegionStart; edit.length = 0; edit.replacement = edit.replacement.substring(i - editOffset); return true; } } } else if (this.textRegionStart <= editOffset && editOffset <= this.textRegionEnd) { return true; } else if (editOffset == this.scannerEndPosition && editOffset == this.textRegionEnd + 1) { return true; } return false; } private void preserveEmptyLines(int count, int insertPosition) { if (count > 0) { 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); } else { printNewLine(insertPosition); } } } private void print(char[] s, boolean considerSpaceIfAny) { if (checkLineWrapping && s.length + column > this.pageWidth) { handleLineTooLong(); } this.lastNumberOfNewLines = 0; printIndentationIfNecessary(); if (considerSpaceIfAny) { this.space(); } if (this.pendingSpace) { this.addInsertEdit(this.scanner.getCurrentTokenStartPosition(), " "); //$NON-NLS-1$ } this.pendingSpace = false; this.needSpace = false; column += s.length; needSpace = true; } private void printBlockComment(char[] s, boolean isJavadoc) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; boolean isNewLine = false; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; isNewLine = true; if (this.scanner.getNextChar('\n')) { currentCharacter = '\n'; nextCharacterStart = this.scanner.currentPosition; } break; case '\n': start = previousStart; isNewLine = true; break; default: if (isNewLine) { if (ScannerHelper.isWhitespace((char) currentCharacter)) { int previousStartPosition = this.scanner.currentPosition; while (currentCharacter != -1 && currentCharacter != '\r' && currentCharacter != '\n' && ScannerHelper.isWhitespace((char) currentCharacter)) { previousStart = nextCharacterStart; previousStartPosition = this.scanner.currentPosition; currentCharacter = this.scanner.getNextChar(); nextCharacterStart = this.scanner.currentPosition; } if (currentCharacter == '\r' || currentCharacter == '\n') { nextCharacterStart = previousStartPosition; } } this.column = 1; this.line++; StringBuffer buffer = new StringBuffer(); buffer.append(this.lineSeparator); printIndentationIfNecessary(buffer); buffer.append(' '); addReplaceEdit(start, previousStart - 1, String.valueOf(buffer)); } else { this.column += (nextCharacterStart - previousStart); } isNewLine = false; } previousStart = nextCharacterStart; this.scanner.currentPosition = nextCharacterStart; } this.lastNumberOfNewLines = 0; needSpace = false; this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); if (isJavadoc) { printNewLine(); } } public void printEndOfCompilationUnit() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while (true) { this.currentToken = this.scanner.getNextToken(); switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameSEMICOLON: char[] currentTokenSource = this.scanner.getRawTokenSource(); this.print(currentTokenSource, this.formatter.preferences.insert_space_before_semicolon); break; case TerminalTokens.TokenNameEOF: if (count >= 1 || this.formatter.preferences.insert_new_line_at_end_of_file_if_missing) { this.printNewLine(this.scannerEndPosition); } return; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } public void printComment() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (count != 0 && this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { addReplaceEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition(), this.getPreserveEmptyLines(count - 1)); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } private void printCommentLine(char[] s) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; if (CharOperation.indexOf(Scanner.TAG_PREFIX, this.scanner.source, true, currentTokenStartPosition) != -1) { this.nlsTagCounter = 0; } this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; loop: while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; break loop; case '\n': start = previousStart; break loop; } previousStart = nextCharacterStart; } if (start != currentTokenStartPosition) { addReplaceEdit(start, currentTokenEndPosition - 1, lineSeparator); } line++; column = 1; needSpace = false; this.pendingSpace = false; lastNumberOfNewLines = 1; // realign to the proper value if (this.currentAlignment != null) { if (this.memberAlignment != null) { // select the last alignment if (this.currentAlignment.location.inputOffset > this.memberAlignment.location.inputOffset) { if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } else { this.indentationLevel = Math.max(this.indentationLevel, this.memberAlignment.breakIndentationLevel); } } else if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); } public void printEmptyLines(int linesNumber) { this.printEmptyLines(linesNumber, this.scanner.getCurrentTokenEndPosition() + 1); } private void printEmptyLines(int linesNumber, int insertPosition) { final String buffer = getEmptyLines(linesNumber); if (EMPTY_STRING == buffer) return; addInsertEdit(insertPosition, buffer); } void printIndentationIfNecessary() { StringBuffer buffer = new StringBuffer(); printIndentationIfNecessary(buffer); if (buffer.length() > 0) { addInsertEdit(this.scanner.getCurrentTokenStartPosition(), buffer.toString()); this.pendingSpace = false; } } private void printIndentationIfNecessary(StringBuffer buffer) { switch (this.tabChar) { case DefaultCodeFormatterOptions.TAB: boolean useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; int numberOfLeadingIndents = this.numberOfIndentations; int indentationsAsTab = 0; if (useTabsForLeadingIndents) { while (this.column <= this.indentationLevel) { if (indentationsAsTab < numberOfLeadingIndents) { buffer.append('\t'); indentationsAsTab++; this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } else { buffer.append(' '); this.column++; this.needSpace = false; } } } else { while (this.column <= this.indentationLevel) { buffer.append('\t'); this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } } break; case DefaultCodeFormatterOptions.SPACE: while (this.column <= this.indentationLevel) { buffer.append(' '); this.column++; this.needSpace = false; } break; case DefaultCodeFormatterOptions.MIXED: useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; numberOfLeadingIndents = this.numberOfIndentations; indentationsAsTab = 0; if (useTabsForLeadingIndents) { final int columnForLeadingIndents = numberOfLeadingIndents * this.indentationSize; while (this.column <= this.indentationLevel) { if (this.column <= columnForLeadingIndents) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } } else { for (int i = this.column, max = this.indentationLevel; i <= max; i++) { buffer.append(' '); this.column++; } } this.needSpace = false; } } else { while (this.column <= this.indentationLevel) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } this.needSpace = false; } } break; } } |
| ||||
public void indent() { this.indentationLevel += this.indentationSize; this.numberOfIndentations++; } /** * @param compilationUnitSource */ public void initializeScanner(char[] compilationUnitSource) { this.scanner.setSource(compilationUnitSource); this.scannerEndPosition = compilationUnitSource.length; this.scanner.resetTo(0, this.scannerEndPosition); this.edits = new OptimizedReplaceEdit[INITIAL_SIZE]; } private boolean isValidEdit(OptimizedReplaceEdit edit) { final int editLength = edit.length; final int editReplacementLength = edit.replacement.length(); final int editOffset = edit.offset; if (editLength != 0) { if (this.textRegionStart <= editOffset && (editOffset + editLength - 1) <= this.textRegionEnd) { if (editReplacementLength != 0 && editLength == editReplacementLength) { for (int i = editOffset, max = editOffset + editLength; i < max; i++) { if (scanner.source[i] != edit.replacement.charAt(i - editOffset)) { return true; } } return false; } else { return true; } } else if (editOffset + editLength == this.textRegionStart) { int i = editOffset; for (int max = editOffset + editLength; i < max; i++) { int replacementStringIndex = i - editOffset; if (replacementStringIndex >= editReplacementLength || scanner.source[i] != edit.replacement.charAt(replacementStringIndex)) { break; } } if (i - editOffset != editReplacementLength && i != editOffset + editLength - 1) { edit.offset = textRegionStart; edit.length = 0; edit.replacement = edit.replacement.substring(i - editOffset); return true; } } } else if (this.textRegionStart <= editOffset && editOffset <= this.textRegionEnd) { return true; } else if (editOffset == this.scannerEndPosition && editOffset == this.textRegionEnd + 1) { return true; } return false; } private void preserveEmptyLines(int count, int insertPosition) { if (count > 0) { 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); } else { printNewLine(insertPosition); } } } private void print(char[] s, boolean considerSpaceIfAny) { if (checkLineWrapping && s.length + column > this.pageWidth) { handleLineTooLong(); } this.lastNumberOfNewLines = 0; printIndentationIfNecessary(); if (considerSpaceIfAny) { this.space(); } if (this.pendingSpace) { this.addInsertEdit(this.scanner.getCurrentTokenStartPosition(), " "); //$NON-NLS-1$ } this.pendingSpace = false; this.needSpace = false; column += s.length; needSpace = true; } private void printBlockComment(char[] s, boolean isJavadoc) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; boolean isNewLine = false; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; isNewLine = true; if (this.scanner.getNextChar('\n')) { currentCharacter = '\n'; nextCharacterStart = this.scanner.currentPosition; } break; case '\n': start = previousStart; isNewLine = true; break; default: if (isNewLine) { if (ScannerHelper.isWhitespace((char) currentCharacter)) { int previousStartPosition = this.scanner.currentPosition; while (currentCharacter != -1 && currentCharacter != '\r' && currentCharacter != '\n' && ScannerHelper.isWhitespace((char) currentCharacter)) { previousStart = nextCharacterStart; previousStartPosition = this.scanner.currentPosition; currentCharacter = this.scanner.getNextChar(); nextCharacterStart = this.scanner.currentPosition; } if (currentCharacter == '\r' || currentCharacter == '\n') { nextCharacterStart = previousStartPosition; } } this.column = 1; this.line++; StringBuffer buffer = new StringBuffer(); buffer.append(this.lineSeparator); printIndentationIfNecessary(buffer); buffer.append(' '); addReplaceEdit(start, previousStart - 1, String.valueOf(buffer)); } else { this.column += (nextCharacterStart - previousStart); } isNewLine = false; } previousStart = nextCharacterStart; this.scanner.currentPosition = nextCharacterStart; } this.lastNumberOfNewLines = 0; needSpace = false; this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); if (isJavadoc) { printNewLine(); } } public void printEndOfCompilationUnit() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while (true) { this.currentToken = this.scanner.getNextToken(); switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameSEMICOLON: char[] currentTokenSource = this.scanner.getRawTokenSource(); this.print(currentTokenSource, this.formatter.preferences.insert_space_before_semicolon); break; case TerminalTokens.TokenNameEOF: if (count >= 1 || this.formatter.preferences.insert_new_line_at_end_of_file_if_missing) { this.printNewLine(this.scannerEndPosition); } return; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } public void printComment() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (count != 0 && this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { addReplaceEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition(), this.getPreserveEmptyLines(count - 1)); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } private void printCommentLine(char[] s) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; if (CharOperation.indexOf(Scanner.TAG_PREFIX, this.scanner.source, true, currentTokenStartPosition) != -1) { this.nlsTagCounter = 0; } this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; loop: while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; break loop; case '\n': start = previousStart; break loop; } previousStart = nextCharacterStart; } if (start != currentTokenStartPosition) { addReplaceEdit(start, currentTokenEndPosition - 1, lineSeparator); } line++; column = 1; needSpace = false; this.pendingSpace = false; lastNumberOfNewLines = 1; // realign to the proper value if (this.currentAlignment != null) { if (this.memberAlignment != null) { // select the last alignment if (this.currentAlignment.location.inputOffset > this.memberAlignment.location.inputOffset) { if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } else { this.indentationLevel = Math.max(this.indentationLevel, this.memberAlignment.breakIndentationLevel); } } else if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); } public void printEmptyLines(int linesNumber) { this.printEmptyLines(linesNumber, this.scanner.getCurrentTokenEndPosition() + 1); } private void printEmptyLines(int linesNumber, int insertPosition) { final String buffer = getEmptyLines(linesNumber); if (EMPTY_STRING == buffer) return; addInsertEdit(insertPosition, buffer); } void printIndentationIfNecessary() { StringBuffer buffer = new StringBuffer(); printIndentationIfNecessary(buffer); if (buffer.length() > 0) { addInsertEdit(this.scanner.getCurrentTokenStartPosition(), buffer.toString()); this.pendingSpace = false; } } private void printIndentationIfNecessary(StringBuffer buffer) { switch (this.tabChar) { case DefaultCodeFormatterOptions.TAB: boolean useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; int numberOfLeadingIndents = this.numberOfIndentations; int indentationsAsTab = 0; if (useTabsForLeadingIndents) { while (this.column <= this.indentationLevel) { if (indentationsAsTab < numberOfLeadingIndents) { buffer.append('\t'); indentationsAsTab++; this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } else { buffer.append(' '); this.column++; this.needSpace = false; } } } else { while (this.column <= this.indentationLevel) { buffer.append('\t'); this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } } break; case DefaultCodeFormatterOptions.SPACE: while (this.column <= this.indentationLevel) { buffer.append(' '); this.column++; this.needSpace = false; } break; case DefaultCodeFormatterOptions.MIXED: useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; numberOfLeadingIndents = this.numberOfIndentations; indentationsAsTab = 0; if (useTabsForLeadingIndents) { final int columnForLeadingIndents = numberOfLeadingIndents * this.indentationSize; while (this.column <= this.indentationLevel) { if (this.column <= columnForLeadingIndents) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } } else { for (int i = this.column, max = this.indentationLevel; i <= max; i++) { buffer.append(' '); this.column++; } } this.needSpace = false; } } else { while (this.column <= this.indentationLevel) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } this.needSpace = false; } } break; } } |
| |||
public void indent() { this.indentationLevel += this.indentationSize; this.numberOfIndentations++; } /** * @param compilationUnitSource */ public void initializeScanner(char[] compilationUnitSource) { this.scanner.setSource(compilationUnitSource); this.scannerEndPosition = compilationUnitSource.length; this.scanner.resetTo(0, this.scannerEndPosition); this.edits = new OptimizedReplaceEdit[INITIAL_SIZE]; } private boolean isValidEdit(OptimizedReplaceEdit edit) { final int editLength = edit.length; final int editReplacementLength = edit.replacement.length(); final int editOffset = edit.offset; if (editLength != 0) { if (this.textRegionStart <= editOffset && (editOffset + editLength - 1) <= this.textRegionEnd) { if (editReplacementLength != 0 && editLength == editReplacementLength) { for (int i = editOffset, max = editOffset + editLength; i < max; i++) { if (scanner.source[i] != edit.replacement.charAt(i - editOffset)) { return true; } } return false; } else { return true; } } else if (editOffset + editLength == this.textRegionStart) { int i = editOffset; for (int max = editOffset + editLength; i < max; i++) { int replacementStringIndex = i - editOffset; if (replacementStringIndex >= editReplacementLength || scanner.source[i] != edit.replacement.charAt(replacementStringIndex)) { break; } } if (i - editOffset != editReplacementLength && i != editOffset + editLength - 1) { edit.offset = textRegionStart; edit.length = 0; edit.replacement = edit.replacement.substring(i - editOffset); return true; } } } else if (this.textRegionStart <= editOffset && editOffset <= this.textRegionEnd) { return true; } else if (editOffset == this.scannerEndPosition && editOffset == this.textRegionEnd + 1) { return true; } return false; } private void preserveEmptyLines(int count, int insertPosition) { if (count > 0) { 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); } else { printNewLine(insertPosition); } } } private void print(char[] s, boolean considerSpaceIfAny) { if (checkLineWrapping && s.length + column > this.pageWidth) { handleLineTooLong(); } this.lastNumberOfNewLines = 0; printIndentationIfNecessary(); if (considerSpaceIfAny) { this.space(); } if (this.pendingSpace) { this.addInsertEdit(this.scanner.getCurrentTokenStartPosition(), " "); //$NON-NLS-1$ } this.pendingSpace = false; this.needSpace = false; column += s.length; needSpace = true; } private void printBlockComment(char[] s, boolean isJavadoc) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; boolean isNewLine = false; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; isNewLine = true; if (this.scanner.getNextChar('\n')) { currentCharacter = '\n'; nextCharacterStart = this.scanner.currentPosition; } break; case '\n': start = previousStart; isNewLine = true; break; default: if (isNewLine) { if (ScannerHelper.isWhitespace((char) currentCharacter)) { int previousStartPosition = this.scanner.currentPosition; while (currentCharacter != -1 && currentCharacter != '\r' && currentCharacter != '\n' && ScannerHelper.isWhitespace((char) currentCharacter)) { previousStart = nextCharacterStart; previousStartPosition = this.scanner.currentPosition; currentCharacter = this.scanner.getNextChar(); nextCharacterStart = this.scanner.currentPosition; } if (currentCharacter == '\r' || currentCharacter == '\n') { nextCharacterStart = previousStartPosition; } } this.column = 1; this.line++; StringBuffer buffer = new StringBuffer(); buffer.append(this.lineSeparator); printIndentationIfNecessary(buffer); buffer.append(' '); addReplaceEdit(start, previousStart - 1, String.valueOf(buffer)); } else { this.column += (nextCharacterStart - previousStart); } isNewLine = false; } previousStart = nextCharacterStart; this.scanner.currentPosition = nextCharacterStart; } this.lastNumberOfNewLines = 0; needSpace = false; this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); if (isJavadoc) { printNewLine(); } } public void printEndOfCompilationUnit() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while (true) { this.currentToken = this.scanner.getNextToken(); switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameSEMICOLON: char[] currentTokenSource = this.scanner.getRawTokenSource(); this.print(currentTokenSource, this.formatter.preferences.insert_space_before_semicolon); break; case TerminalTokens.TokenNameEOF: if (count >= 1 || this.formatter.preferences.insert_new_line_at_end_of_file_if_missing) { this.printNewLine(this.scannerEndPosition); } return; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } public void printComment() { 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 hasComment = false; boolean hasLineComment = false; boolean hasWhitespace = false; int count = 0; while ((this.currentToken = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { switch (this.currentToken) { case TerminalTokens.TokenNameWHITESPACE: char[] whiteSpaces = this.scanner.getCurrentTokenSource(); count = 0; 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 (count == 0) { hasWhitespace = true; 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()); } addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (hasLineComment) { this.preserveEmptyLines(count, this.scanner.getCurrentTokenStartPosition()); addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } else if (count != 0 && this.formatter.preferences.number_of_empty_lines_to_preserve != 0) { addReplaceEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition(), this.getPreserveEmptyLines(count - 1)); } else { addDeleteEdit(this.scanner.getCurrentTokenStartPosition(), this.scanner.getCurrentTokenEndPosition()); } currentTokenStartPosition = this.scanner.currentPosition; break; case TerminalTokens.TokenNameCOMMENT_LINE: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printCommentLine(this.scanner.getRawTokenSource()); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_BLOCK: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), false); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; case TerminalTokens.TokenNameCOMMENT_JAVADOC: if (count >= 1) { if (count > 1) { preserveEmptyLines(count - 1, this.scanner.getCurrentTokenStartPosition()); } else if (count == 1) { printNewLine(this.scanner.getCurrentTokenStartPosition()); } } else if (hasWhitespace) { space(); } hasWhitespace = false; this.printBlockComment(this.scanner.getRawTokenSource(), true); currentTokenStartPosition = this.scanner.currentPosition; hasLineComment = false; hasComment = true; count = 0; break; default: // step back one token this.scanner.resetTo(currentTokenStartPosition, this.scannerEndPosition - 1); return; } } } catch (InvalidInputException e) { throw new AbortFormatting(e); } } private void printCommentLine(char[] s) { int currentTokenStartPosition = this.scanner.getCurrentTokenStartPosition(); int currentTokenEndPosition = this.scanner.getCurrentTokenEndPosition() + 1; if (CharOperation.indexOf(Scanner.TAG_PREFIX, this.scanner.source, true, currentTokenStartPosition) != -1) { this.nlsTagCounter = 0; } this.scanner.resetTo(currentTokenStartPosition, currentTokenEndPosition - 1); int currentCharacter; int start = currentTokenStartPosition; int nextCharacterStart = currentTokenStartPosition; printIndentationIfNecessary(); if (this.pendingSpace) { this.addInsertEdit(currentTokenStartPosition, " "); //$NON-NLS-1$ } this.needSpace = false; this.pendingSpace = false; int previousStart = currentTokenStartPosition; loop: while (nextCharacterStart <= currentTokenEndPosition && (currentCharacter = this.scanner.getNextChar()) != -1) { nextCharacterStart = this.scanner.currentPosition; switch (currentCharacter) { case '\r': start = previousStart; break loop; case '\n': start = previousStart; break loop; } previousStart = nextCharacterStart; } if (start != currentTokenStartPosition) { addReplaceEdit(start, currentTokenEndPosition - 1, lineSeparator); } line++; column = 1; needSpace = false; this.pendingSpace = false; lastNumberOfNewLines = 1; // realign to the proper value if (this.currentAlignment != null) { if (this.memberAlignment != null) { // select the last alignment if (this.currentAlignment.location.inputOffset > this.memberAlignment.location.inputOffset) { if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } else { this.indentationLevel = Math.max(this.indentationLevel, this.memberAlignment.breakIndentationLevel); } } else if (this.currentAlignment.couldBreak() && this.currentAlignment.wasSplit) { this.currentAlignment.performFragmentEffect(); } } this.scanner.resetTo(currentTokenEndPosition, this.scannerEndPosition - 1); } public void printEmptyLines(int linesNumber) { this.printEmptyLines(linesNumber, this.scanner.getCurrentTokenEndPosition() + 1); } private void printEmptyLines(int linesNumber, int insertPosition) { final String buffer = getEmptyLines(linesNumber); if (EMPTY_STRING == buffer) return; addInsertEdit(insertPosition, buffer); } void printIndentationIfNecessary() { StringBuffer buffer = new StringBuffer(); printIndentationIfNecessary(buffer); if (buffer.length() > 0) { addInsertEdit(this.scanner.getCurrentTokenStartPosition(), buffer.toString()); this.pendingSpace = false; } } private void printIndentationIfNecessary(StringBuffer buffer) { switch (this.tabChar) { case DefaultCodeFormatterOptions.TAB: boolean useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; int numberOfLeadingIndents = this.numberOfIndentations; int indentationsAsTab = 0; if (useTabsForLeadingIndents) { while (this.column <= this.indentationLevel) { if (indentationsAsTab < numberOfLeadingIndents) { buffer.append('\t'); indentationsAsTab++; this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } else { buffer.append(' '); this.column++; this.needSpace = false; } } } else { while (this.column <= this.indentationLevel) { buffer.append('\t'); this.lastNumberOfNewLines = 0; int complement = this.tabLength - ((this.column - 1) % this.tabLength); // amount of space this.column += complement; this.needSpace = false; } } break; case DefaultCodeFormatterOptions.SPACE: while (this.column <= this.indentationLevel) { buffer.append(' '); this.column++; this.needSpace = false; } break; case DefaultCodeFormatterOptions.MIXED: useTabsForLeadingIndents = this.useTabsOnlyForLeadingIndents; numberOfLeadingIndents = this.numberOfIndentations; indentationsAsTab = 0; if (useTabsForLeadingIndents) { final int columnForLeadingIndents = numberOfLeadingIndents * this.indentationSize; while (this.column <= this.indentationLevel) { if (this.column <= columnForLeadingIndents) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } } else { for (int i = this.column, max = this.indentationLevel; i <= max; i++) { buffer.append(' '); this.column++; } } this.needSpace = false; } } else { while (this.column <= this.indentationLevel) { if ((this.column - 1 + this.tabLength) <= this.indentationLevel) { buffer.append('\t'); this.column += this.tabLength; } else if ((this.column - 1 + this.indentationSize) <= this.indentationLevel) { // print one indentation for (int i = 0, max = this.indentationSize; i < max; i++) { buffer.append(' '); this.column++; } } else { buffer.append(' '); this.column++; } this.needSpace = false; } } break; } } |
CloneAbstraction |
Parameter Index | Clone Instance | Parameter Name | Value |
---|---|---|---|
None |