diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/VariableExtractor.java b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/VariableExtractor.java index 3ae2325f691c..2032fcd2f9ba 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/VariableExtractor.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceVariable/VariableExtractor.java @@ -25,6 +25,7 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.IntroduceVariableUtil; import com.intellij.refactoring.introduceField.ElementToWorkOn; @@ -91,7 +92,7 @@ final class VariableExtractor { } PsiExpression initializer = RefactoringUtil.unparenthesizeExpression(newExpr); final SmartTypePointer selectedType = SmartTypePointerManager.getInstance(myProject).createSmartTypePointer( - mySettings.getSelectedType()); + PsiTypesUtil.removeExternalAnnotations(mySettings.getSelectedType())); initializer = IntroduceVariableBase.simplifyVariableInitializer(initializer, selectedType.getType()); CommentTracker commentTracker = new CommentTracker(); commentTracker.markUnchanged(initializer); diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/dontSplitNotMutuallyExclusiveIf_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/dontSplitNotMutuallyExclusiveIf_after.java index 16b655f0f7fe..08830b9f1b14 100644 --- a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/dontSplitNotMutuallyExclusiveIf_after.java +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/dontSplitNotMutuallyExclusiveIf_after.java @@ -1,8 +1,8 @@ public class splitMutuallyExclusiveIf { void foo(Object obj) { - int i = ((Number) obj).intValue(); - if (obj instanceof Number && i > 0) { - System.out.println(i); + int x = ((Number) obj).intValue(); + if (obj instanceof Number && x > 0) { + System.out.println(x); } else if (obj instanceof Float && ((Float) obj).floatValue() > 0.0) { System.out.println(((Float) obj).floatValue()); } diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations.java new file mode 100644 index 000000000000..ff664bf13e3a --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations.java @@ -0,0 +1,10 @@ +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class Main { + void test(Object value) { + Map collect = Stream.of("1", "2", "3") + .collect(Collectors.toUnmodifiableMap(Integer::parseInt, xx -> xx)); + } +} diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations_after.java new file mode 100644 index 000000000000..66e72621dd9b --- /dev/null +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noExternalTypeAnnotations_after.java @@ -0,0 +1,12 @@ +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +class Main { + void test(Object value) { + Collector> unmodifiableMap = Collectors.toUnmodifiableMap(Integer::parseInt, xx -> xx); + Map collect = Stream.of("1", "2", "3") + .collect(unmodifiableMap); + } +} diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noWritable_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noWritable_after.java index b1fe74839469..803af2c8f1da 100644 --- a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noWritable_after.java +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/noWritable_after.java @@ -2,7 +2,7 @@ class C { { int[] a = new int[1]; a[1] = 42; - int i = a[1]; - System.out.println(i); + int x = a[1]; + System.out.println(x); } } \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/splitMutuallyExclusiveIf_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/splitMutuallyExclusiveIf_after.java index 468c83690cb4..54929ed475eb 100644 --- a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/splitMutuallyExclusiveIf_after.java +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/splitMutuallyExclusiveIf_after.java @@ -1,9 +1,9 @@ public class splitMutuallyExclusiveIf { void foo(Object obj) { if (obj instanceof Integer) { - int i = ((Integer) obj).intValue(); - if (i > 0) { - System.out.println(i); + int x = ((Integer) obj).intValue(); + if (x > 0) { + System.out.println(x); } } else if (obj instanceof Float && ((Float) obj).floatValue() > 0.0) { System.out.println(((Float) obj).floatValue()); diff --git a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/writable_after.java b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/writable_after.java index 2955328975b8..66a0280705f0 100644 --- a/java/java-tests/testData/refactoring/inplaceIntroduceVariable/writable_after.java +++ b/java/java-tests/testData/refactoring/inplaceIntroduceVariable/writable_after.java @@ -1,8 +1,8 @@ class C { { int[] a = new int[1]; - int i = a[1]; - i = 42; - System.out.println(i); + int x = a[1]; + x = 42; + System.out.println(x); } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java index d5a5757095ec..058abf588684 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/InplaceIntroduceVariableTest.java @@ -24,6 +24,7 @@ import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer; import com.intellij.refactoring.introduceVariable.IntroduceVariableHandler; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.testFramework.IdeaTestUtil; +import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.MapDataContext; import com.intellij.ui.ChooserInterceptor; import com.intellij.ui.UiInterceptors; @@ -34,7 +35,14 @@ import java.util.List; import java.util.function.Consumer; import java.util.regex.Pattern; +import static com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase.JAVA_21; + public class InplaceIntroduceVariableTest extends AbstractJavaInplaceIntroduceTest { + @Override + protected @NotNull LightProjectDescriptor getProjectDescriptor() { + return JAVA_21; + } + @Nullable @Override protected PsiExpression getExpressionFromEditor() { @@ -337,6 +345,10 @@ public class InplaceIntroduceVariableTest extends AbstractJavaInplaceIntroduceTe doTest(null); } + public void testNoExternalTypeAnnotations() { + doTest(null); + } + public void testSplitMutuallyExclusiveIf() { doTestReplaceChoice("Replace all 0 occurrences"); } public void testDontSplitNotMutuallyExclusiveIf() { doTestReplaceChoice("Replace all 0 occurrences"); }