import com.intellij.codeInsight.lookup.Lookup;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.diagnostic.LogEventException;
-import com.intellij.openapi.diagnostic.Attachment;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.lang.FileASTNode;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Attachment;
+import com.intellij.openapi.diagnostic.ExceptionWithAttachments;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.util.PsiUtilCore;
+import org.jetbrains.annotations.NotNull;
import java.util.List;
@Override
public int getTailOffset() {
+ if (!getOffsetMap().containsOffset(TAIL_OFFSET) && invalidateTrace != null) {
+ throw new TailInvalidException(invalidateTrace);
+ }
+
int offset = super.getTailOffset();
if (tailWatcher.getStartOffset() != tailWatcher.getEndOffset() && offset > 0) {
watchTail(offset);
return offset;
}
}
+
+ private static class TailInvalidException extends IllegalStateException implements ExceptionWithAttachments {
+ private final String myInvalidationTrace;
+
+ TailInvalidException(@NotNull String invalidationTrace) {
+ super("Tail offset invalid");
+ myInvalidationTrace = invalidationTrace;
+ }
+
+ @NotNull
+ @Override
+ public Attachment[] getAttachments() {
+ return new Attachment[]{new Attachment("invalidated.trace", myInvalidationTrace)};
+ }
+ }
}