mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
invalid psi range diagnostics (EA-49842 - assert: ExtendWordSelectionHandlerBase.select)
This commit is contained in:
+9
-1
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.text.CharArrayUtil;
|
||||
@@ -40,7 +41,14 @@ public abstract class ExtendWordSelectionHandlerBase implements ExtendWordSelect
|
||||
@Override
|
||||
public List<TextRange> select(PsiElement e, CharSequence editorText, int cursorOffset, Editor editor) {
|
||||
final TextRange originalRange = e.getTextRange();
|
||||
LOG.assertTrue(originalRange.getEndOffset() <= editorText.length(), getClass() + "; " + e);
|
||||
if (originalRange.getEndOffset() > editorText.length()) {
|
||||
throw new AssertionError("Invalid element range in " + getClass() +
|
||||
"; element=" + e +
|
||||
"; range=" + originalRange +
|
||||
"; length=" + editorText +
|
||||
"; editor=" + editor +
|
||||
"; committed=" + PsiDocumentManager.getInstance(e.getProject()).isCommitted(editor.getDocument()));
|
||||
}
|
||||
|
||||
List<TextRange> ranges = expandToWholeLine(editorText, originalRange, true);
|
||||
|
||||
|
||||
@@ -149,6 +149,10 @@ public class SelectWordHandler extends EditorActionHandler {
|
||||
}
|
||||
}
|
||||
|
||||
if (element != null && element.getTextRange().getEndOffset() > editor.getDocument().getTextLength()) {
|
||||
throw new AssertionError("Wrong element range " + element + "; committed=" + PsiDocumentManager.getInstance(project).isCommitted(document));
|
||||
}
|
||||
|
||||
final TextRange selectionRange = new TextRange(editor.getSelectionModel().getSelectionStart(), editor.getSelectionModel().getSelectionEnd());
|
||||
|
||||
final Ref<TextRange> minimumRange = new Ref<TextRange>(new TextRange(0, editor.getDocument().getTextLength()));
|
||||
|
||||
@@ -218,8 +218,12 @@ public class SelectWordUtil {
|
||||
availableSelectioners.add(selectioner);
|
||||
}
|
||||
}
|
||||
long stamp = editor.getDocument().getModificationStamp();
|
||||
for (ExtendWordSelectionHandler selectioner : availableSelectioners) {
|
||||
List<TextRange> ranges = selectioner.select(element, text, cursorOffset, editor);
|
||||
if (stamp != editor.getDocument().getModificationStamp()) {
|
||||
throw new AssertionError("Selectioner " + selectioner + " has changed the document");
|
||||
}
|
||||
if (ranges == null) continue;
|
||||
|
||||
for (TextRange range : ranges) {
|
||||
|
||||
Reference in New Issue
Block a user