}
public void perform(final boolean generatePrivate) {
final Runnable runnable = new Runnable() {
public void run() {
final DocumentEx document = (DocumentEx) myEditor.getDocument();
int exprOffset = myExprMarker.getStartOffset();
final int lineOffset = getLineOffset(document, exprOffset);
if (generatePrivate) {
final Collection<RangeMarker> leftGreedyMarker = ContainerUtil.newArrayList();
final Collection<RangeMarker> emptyMarkers = ContainerUtil.newArrayList();
for (RangeHighlighter rangeHighlighter : myEditor.getMarkupModel().getAllHighlighters()) {
collectRangeMarker(rangeHighlighter, lineOffset, leftGreedyMarker, emptyMarkers);
}
document.processRangeMarkers(new Processor<RangeMarker>() {
@Override
public boolean process(RangeMarker rangeMarker) {
collectRangeMarker(rangeMarker, lineOffset, leftGreedyMarker, emptyMarkers);
return true;
}
});
setLeftGreedy(leftGreedyMarker, false);
setRightGreedy(emptyMarkers, true);
// workaround for shifting empty ranges to the left
document.insertString(lineOffset, " ");
document.insertString(lineOffset, PRIVATE);
document.deleteString(lineOffset + PRIVATE.length(), lineOffset + PRIVATE.length() + 1);
setLeftGreedy(leftGreedyMarker, true);
setRightGreedy(emptyMarkers, false);
} else {
int idx = document.getText().indexOf(PRIVATE, lineOffset);
if (idx > -1 && idx < exprOffset) {
document.deleteString(idx, idx + PRIVATE.length());
}
}
PsiDocumentManager.getInstance(myProject).commitDocument(document);
}
};