From f073b37e46144236239bc9f693b07d5f84aafeb5 Mon Sep 17 00:00:00 2001 From: anna Date: Sat, 14 Apr 2012 19:09:32 +0200 Subject: [PATCH] introduce variable: use right expression if left ref is unresolved (IDEA-72914) --- .../refactoring/util/RefactoringUtil.java | 4 ++++ .../AssignmentToUnresolvedReference.after.java | 15 +++++++++++++++ .../AssignmentToUnresolvedReference.java | 14 ++++++++++++++ .../refactoring/IntroduceVariableTest.java | 4 ++++ 4 files changed, 37 insertions(+) create mode 100644 java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java create mode 100644 java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index f587e34f1f85..53d027f281b8 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -499,6 +499,10 @@ public class RefactoringUtil { return initType.createArrayType(); } } + + if (expr instanceof PsiReferenceExpression && PsiUtil.isOnAssignmentLeftHand(expr)) { + return getTypeByExpression(((PsiAssignmentExpression)expr.getParent()).getRExpression()); + } return null; } PsiClass refClass = PsiUtil.resolveClassInType(type); diff --git a/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java new file mode 100644 index 000000000000..2163b525b032 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.after.java @@ -0,0 +1,15 @@ +import java.util.*; + +public class Test +{ + List> getList () + { + return new ArrayList> (); + } + + public void test2 (Test arg) + { + final List> collection = result; + collection = arg.getList (); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java new file mode 100644 index 000000000000..1d9ee6f79a7e --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/AssignmentToUnresolvedReference.java @@ -0,0 +1,14 @@ +import java.util.*; + +public class Test +{ + List> getList () + { + return new ArrayList> (); + } + + public void test2 (Test arg) + { + result = arg.getList (); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index 1a3b6948a01d..62da6898139b 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -273,6 +273,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { public void testPolyadic() throws Exception { doTest(new MockIntroduceVariableHandler("b1", true, true, true, "boolean")); } + + public void testAssignmentToUnresolvedReference() throws Exception { + doTest(new MockIntroduceVariableHandler("collection", true, true, true, "java.util.List>")); + } public void testSiblingInnerClassType() throws Exception { doTest(new MockIntroduceVariableHandler("vari", true, false, false, "A.B") {