IDEA-69048: revert when no occurrences chosen fixed
authorAnna Kozlova <anna.kozlova@jetbrains.com>
Fri, 27 Jan 2012 16:31:47 +0000 (20:31 +0400)
committerAnna Kozlova <anna.kozlova@jetbrains.com>
Fri, 27 Jan 2012 16:54:29 +0000 (20:54 +0400)
java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java

index 25113798b210fb5d8cd9f2e5785b6ead45c3d759..0ff43fa7f04287a1497296e24332921e3930426a 100644 (file)
@@ -160,10 +160,25 @@ public class JavaVariableInplaceIntroducer extends InplaceVariableIntroducer<Psi
                 final PsiElement[] vars = element.getDeclaredElements();
                 if (vars.length > 0 && vars[0] instanceof PsiVariable) {
                   final PsiFile containingFile = element.getContainingFile();
+                  //todo pull up method restore state
                   final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(myProject);
-                  for (RangeMarker occurrenceMarker : getOccurrenceMarkers()) {
+                  final RangeMarker exprMarker = getExprMarker();
+                  if (exprMarker != null) {
+                    myExpr = AbstractJavaInplaceIntroducer.restoreExpression(containingFile, (PsiVariable)vars[0], elementFactory, exprMarker, myExpressionText);
+                    if (myExpr != null && myExpr.isPhysical()) {
+                      myExprMarker = createMarker(myExpr);
+                    }
+                  }
+                  List<RangeMarker> markers = getOccurrenceMarkers();
+                  for (RangeMarker occurrenceMarker : markers) {
+                    if (getExprMarker() != null && occurrenceMarker.getStartOffset() == getExprMarker().getStartOffset() && myExpr != null) {
+                      continue;
+                    }
                     if (AbstractJavaInplaceIntroducer
-                          .restoreExpression(containingFile, (PsiVariable)vars[0], elementFactory, occurrenceMarker, myExpressionText) == null) return;
+                          .restoreExpression(containingFile, (PsiVariable)vars[0], elementFactory, occurrenceMarker, myExpressionText) ==
+                        null) {
+                      return;
+                    }
                   }
                   element.delete();
                 }