diff --git a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java index b57f3897bdba..380acf25d810 100644 --- a/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java @@ -219,7 +219,7 @@ public class CodeInsightUtil { public static boolean areExpressionsEquivalent(PsiExpression expr1, PsiExpression expr2) { return PsiEquivalenceUtil.areElementsEquivalent(expr1, expr2, new Comparator() { public int compare(PsiElement o1, PsiElement o2) { - if (o1 instanceof PsiParameter && o2 instanceof PsiParameter) { + if (o1 instanceof PsiParameter && o2 instanceof PsiParameter && ((PsiParameter)o1).getDeclarationScope() instanceof PsiMethod) { return ((PsiParameter)o1).getName().compareTo(((PsiParameter)o2).getName()); } return 1; diff --git a/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java new file mode 100644 index 000000000000..a021e09a2144 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.after.java @@ -0,0 +1,12 @@ +class A { + { + List l = new ArrayList(); + for (Integer i : l) { + final String tostr = i.toString(); + System.out.println(tostr); + } + for (Integer i : l) { + System.out.println(i.toString()); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java new file mode 100644 index 000000000000..3683bfac097b --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceVariable/DifferentForeachParameters.java @@ -0,0 +1,11 @@ +class A { + { + List l = new ArrayList(); + for (Integer i : l) { + System.out.println(i.toString()); + } + for (Integer i : l) { + System.out.println(i.toString()); + } + } +} \ 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 bf100c8ea6f6..6d10533e1aeb 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -218,6 +218,10 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { doTest(new MockIntroduceVariableHandler("foo1", true, true, false, "Foo")); } + public void testDifferentForeachParameters () throws Exception { + doTest(new MockIntroduceVariableHandler("tostr", true, true, false, "java.lang.String")); + } + public void testSiblingInnerClassType() throws Exception { doTest(new MockIntroduceVariableHandler("vari", true, false, false, "A.B"){ @Override