Search in sources :

Example 1 with JavaIndenter

use of org.eclipse.jdt.internal.ui.text.JavaIndenter in project che by eclipse.

the class IndentUtil method indentLines.

/**
	 * Indents the line range specified by <code>lines</code> in
	 * <code>document</code>. The passed Java project may be
	 * <code>null</code>, it is used solely to obtain formatter preferences.
	 *
	 * @param document the document to be changed
	 * @param lines the line range to be indented
	 * @param project the Java project to get the formatter preferences from, or
	 *        <code>null</code> if global preferences should be used
	 * @param result the result from a previous call to <code>indentLines</code>,
	 *        in order to maintain comment line properties, or <code>null</code>.
	 *        Note that the passed result may be changed by the call.
	 * @return an indent result that may be queried for changes and can be
	 *         reused in subsequent indentation operations
	 * @throws BadLocationException if <code>lines</code> is not a valid line
	 *         range on <code>document</code>
	 */
public static IndentResult indentLines(IDocument document, ILineRange lines, IJavaProject project, IndentResult result) throws BadLocationException {
    int numberOfLines = lines.getNumberOfLines();
    if (numberOfLines < 1)
        return new IndentResult(null);
    result = reuseOrCreateToken(result, numberOfLines);
    JavaHeuristicScanner scanner = new JavaHeuristicScanner(document);
    JavaIndenter indenter = new JavaIndenter(document, scanner, project);
    boolean changed = false;
    int tabSize = CodeFormatterUtil.getTabWidth(project);
    for (int line = lines.getStartLine(), last = line + numberOfLines, i = 0; line < last; line++) {
        changed |= indentLine(document, line, indenter, scanner, result.commentLinesAtColumnZero, i++, tabSize);
    }
    result.hasChanged = changed;
    return result;
}
Also used : JavaHeuristicScanner(org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner) JavaIndenter(org.eclipse.jdt.internal.ui.text.JavaIndenter)

Example 2 with JavaIndenter

use of org.eclipse.jdt.internal.ui.text.JavaIndenter in project che by eclipse.

the class IndentUtil method shiftLines.

/**
	 * Shifts the line range specified by <code>lines</code> in
	 * <code>document</code>. The amount that the lines get shifted
	 * are determined by the first line in the range, all subsequent
	 * lines are adjusted accordingly. The passed Java project may be
	 * <code>null</code>, it is used solely to obtain formatter
	 * preferences.
	 *
	 * @param document the document to be changed
	 * @param lines the line range to be shifted
	 * @param project the Java project to get the formatter preferences
	 *        from, or <code>null</code> if global preferences should
	 *        be used
	 * @param result the result from a previous call to
	 *        <code>shiftLines</code>, in order to maintain comment
	 *        line properties, or <code>null</code>. Note that the
	 *        passed result may be changed by the call.
	 * @return an indent result that may be queried for changes and can
	 *         be reused in subsequent indentation operations
	 * @throws BadLocationException if <code>lines</code> is not a
	 *         valid line range on <code>document</code>
	 */
public static IndentResult shiftLines(IDocument document, ILineRange lines, IJavaProject project, IndentResult result) throws BadLocationException {
    int numberOfLines = lines.getNumberOfLines();
    if (numberOfLines < 1)
        return new IndentResult(null);
    result = reuseOrCreateToken(result, numberOfLines);
    result.hasChanged = false;
    JavaHeuristicScanner scanner = new JavaHeuristicScanner(document);
    JavaIndenter indenter = new JavaIndenter(document, scanner, project);
    String current = getCurrentIndent(document, lines.getStartLine());
    StringBuffer correct = indenter.computeIndentation(document.getLineOffset(lines.getStartLine()));
    if (correct == null)
        // bail out
        return result;
    int tabSize = CodeFormatterUtil.getTabWidth(project);
    StringBuffer addition = new StringBuffer();
    int difference = subtractIndent(correct, current, addition, tabSize);
    if (difference == 0)
        return result;
    if (result.leftmostLine == -1)
        result.leftmostLine = getLeftMostLine(document, lines, tabSize);
    int maxReduction = computeVisualLength(getCurrentIndent(document, result.leftmostLine + lines.getStartLine()), tabSize);
    if (difference > 0) {
        for (int line = lines.getStartLine(), last = line + numberOfLines, i = 0; line < last; line++) addIndent(document, line, addition, result.commentLinesAtColumnZero, i++);
    } else {
        int reduction = Math.min(-difference, maxReduction);
        for (int line = lines.getStartLine(), last = line + numberOfLines, i = 0; line < last; line++) cutIndent(document, line, reduction, tabSize, result.commentLinesAtColumnZero, i++);
    }
    result.hasChanged = true;
    return result;
}
Also used : JavaHeuristicScanner(org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner) JavaIndenter(org.eclipse.jdt.internal.ui.text.JavaIndenter)

Aggregations

JavaHeuristicScanner (org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner)2 JavaIndenter (org.eclipse.jdt.internal.ui.text.JavaIndenter)2