001package com.puppycrawl.tools.checkstyle.gui;
002
003import com.puppycrawl.tools.checkstyle.api.DetailAST;
004import java.awt.Color;
005import java.util.List;
006import javax.swing.JTextArea;
007
008public class CodeSelector
009{
010    private final DetailAST ast;
011    private final JTextArea editor;
012    private final List<Integer> lines2position;
013
014    public CodeSelector(final DetailAST ast, final JTextArea editor,
015                        final List<Integer> lines2position)
016    {
017        this.ast = ast;
018        this.editor = editor;
019        this.lines2position = lines2position;
020    }
021
022    public void select() {
023        int start = lines2position.get(ast.getLineNo()) + ast.getColumnNo();
024        int end = findLastPosition(ast);
025
026        editor.setSelectedTextColor(Color.blue);
027        editor.requestFocusInWindow();
028        editor.setSelectionStart(start);
029        editor.setSelectionEnd(end);
030        editor.transferFocusBackward();
031    }
032
033    private int findLastPosition(final DetailAST ast)
034    {
035        if (ast.getChildCount() == 0)
036        {
037            return lines2position.get(ast.getLineNo()) + ast.getColumnNo()
038                + ast.getText().length();
039        }
040        else
041        {
042            return findLastPosition(ast.getLastChild());
043        }
044    }
045}