summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java')
-rw-r--r--platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
index 517f23c5a198..b236e1061315 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
@@ -72,7 +72,6 @@ import org.jetbrains.annotations.TestOnly;
import javax.swing.*;
import java.awt.*;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -97,8 +96,7 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
@Nullable
private final PsiFile myInjectedFile;
- private final List<Trinity<RangeMarker, RangeMarker, SmartPsiElementPointer>> myMarkers =
- new LinkedList<Trinity<RangeMarker, RangeMarker, SmartPsiElementPointer>>();
+ private final List<Trinity<RangeMarker, RangeMarker, SmartPsiElementPointer>> myMarkers = ContainerUtil.newLinkedList();
@Nullable
private final RangeMarker myAltFullRange;
@@ -199,7 +197,16 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
}
public boolean isValid() {
- return myNewVirtualFile.isValid() && (myAltFullRange == null && myInjectedFile.isValid() || myAltFullRange.isValid());
+ boolean valid = myNewVirtualFile.isValid() && (myAltFullRange == null && myInjectedFile.isValid() || myAltFullRange.isValid());
+ if (valid) {
+ for (Trinity<RangeMarker, RangeMarker, SmartPsiElementPointer> t : myMarkers) {
+ if (!t.first.isValid() || !t.second.isValid() || t.third.getElement() == null) {
+ valid = false;
+ break;
+ }
+ }
+ }
+ return valid;
}
public void navigate(int injectedOffset) {
@@ -285,6 +292,7 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
}
else if (e.getDocument() == myNewDocument) {
commitToOriginal();
+ if (!isValid()) closeEditor();
}
else if (e.getDocument() == myOrigDocument) {
if (myCommittingToOriginal || myAltFullRange != null && myAltFullRange.isValid()) return;
@@ -359,7 +367,6 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
private void commitToOriginal() {
- if (!isValid()) return;
VirtualFile origVirtualFile = PsiUtilCore.getVirtualFile(myNewFile.getContext());
myCommittingToOriginal = true;
try {
@@ -401,7 +408,7 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
ProperTextRange insideHost = null;
StringBuilder sb = new StringBuilder();
for (Trinity<RangeMarker, RangeMarker, SmartPsiElementPointer> entry : map.get(host)) {
- RangeMarker origMarker = entry.first;
+ RangeMarker origMarker = entry.first; // check for validity?
int hostOffset = host.getTextRange().getStartOffset();
ProperTextRange localInsideHost = new ProperTextRange(origMarker.getStartOffset() - hostOffset, origMarker.getEndOffset() - hostOffset);
RangeMarker rangeMarker = entry.second;