From eaa9b80df11ac90ae782ebc8638b19cd8a057cba Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 18 Jun 2015 17:34:43 +0300 Subject: [PATCH] introduce variable: ensure initialize conflict resolver over code ready to rename (IDEA-141634) --- .../JavaVariableInplaceIntroducer.java | 4 ++++ .../inplaceIntroduceVariable/conflictWithField.java | 12 ++++++++++++ .../conflictWithField_after.java | 13 +++++++++++++ .../refactoring/InplaceIntroduceVariableTest.java | 9 +++++++++ .../inplace/AbstractInplaceIntroducer.java | 3 +++ 5 files changed, 41 insertions(+) create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField.java create mode 100644 java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java index bfcc166c6e5f..957718086085 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/JavaVariableInplaceIntroducer.java @@ -109,6 +109,10 @@ public class JavaVariableInplaceIntroducer extends AbstractJavaInplaceIntroducer } } super.beforeTemplateStart(); + } + + @Override + protected void onRenameTemplateStarted() { final ResolveSnapshotProvider resolveSnapshotProvider = VariableInplaceRenamer.INSTANCE.forLanguage(myScope.getLanguage()); myConflictResolver = resolveSnapshotProvider != null ? resolveSnapshotProvider.createSnapshot(myScope) : null; } diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField.java new file mode 100644 index 000000000000..88ffdb8267bc --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField.java @@ -0,0 +1,12 @@ +import javax.swing.*; +import java.awt.*; +class OuterClass { + private MyComp myComp; + + private class MyComp extends JPanel { + @Override + public void paint(Graphics g) { + int a = myComp.getHeight(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField_after.java new file mode 100644 index 000000000000..608a4b5609ff --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/conflictWithField_after.java @@ -0,0 +1,13 @@ +import javax.swing.*; +import java.awt.*; +class OuterClass { + private MyComp myComp; + + private class MyComp extends JPanel { + @Override + public void paint(Graphics g) { + int height = myComp.getHeight(); + int a = height; + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceVariableTest.java index 4c434ed86517..3f08022e756f 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InplaceIntroduceVariableTest.java @@ -82,6 +82,15 @@ public class InplaceIntroduceVariableTest extends AbstractJavaInplaceIntroduceTe }); } + public void testConflictWithField() throws Exception { + doTest(new Pass() { + @Override + public void pass(AbstractInplaceIntroducer introducer) { + type("height"); + } + }); + } + public void testCast() throws Exception { doTestTypeChange("Integer"); } diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java index b0b6f8da971a..f59400ca09ff 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/AbstractInplaceIntroducer.java @@ -230,6 +230,7 @@ public abstract class AbstractInplaceIntroducer