From c7ad2cfd8d905105d4f102191db0b82a072bcac3 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 31 Mar 2025 14:04:54 +0200 Subject: [PATCH] [java-refactoring] IDEA-369011 Refactor -> introduce constant added NotNull annotation GitOrigin-RevId: 485a0861caad52b591044e221dec0e44729b4c1e --- .../introduceField/LocalToFieldHandler.java | 4 +++- .../NoExternalTypeAnnotations.java | 9 +++++++++ .../NoExternalTypeAnnotations_after.java | 11 +++++++++++ .../java/refactoring/IntroduceConstantTest.java | 16 +++++++++++++++- .../MockIntroduceConstantHandler.java | 2 +- 5 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations.java create mode 100644 java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations_after.java diff --git a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java index 71b3de6a6452..52621f7d213a 100644 --- a/java/java-impl-refactorings/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java +++ b/java/java-impl-refactorings/src/com/intellij/refactoring/introduceField/LocalToFieldHandler.java @@ -22,6 +22,7 @@ import com.intellij.psi.search.PsiElementProcessor; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.FileTypeUtils; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.introduce.inplace.AbstractInplaceIntroducer; @@ -159,7 +160,8 @@ public abstract class LocalToFieldHandler { return true; } - private static PsiField createField(PsiLocalVariable local, PsiType forcedType, String fieldName, boolean includeInitializer) { + private static PsiField createField(PsiLocalVariable local, @NotNull PsiType forcedType, String fieldName, boolean includeInitializer) { + forcedType = PsiTypesUtil.removeExternalAnnotations(forcedType); @NonNls StringBuilder pattern = new StringBuilder(); pattern.append("private int "); pattern.append(fieldName); diff --git a/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations.java b/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations.java new file mode 100644 index 000000000000..4cbadbd386f7 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations.java @@ -0,0 +1,9 @@ + +import java.util.Map; + +class X { + void someMethod() { + var mapOfLong = Map.of(1, 1L, 2, 2L); // refactor this line + } + +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations_after.java b/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations_after.java new file mode 100644 index 000000000000..3f52c013e477 --- /dev/null +++ b/java/java-tests/testData/refactoring/introduceConstant/NoExternalTypeAnnotations_after.java @@ -0,0 +1,11 @@ + +import java.util.Map; + +class X { + // refactor this line + public static final Map xxx = Map.of(1, 1L, 2, 2L); + + void someMethod() { + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceConstantTest.java b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceConstantTest.java index 97938fe30a05..2f1014917587 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceConstantTest.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/IntroduceConstantTest.java @@ -4,11 +4,14 @@ package com.intellij.java.refactoring; import com.intellij.JavaTestUtil; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.ui.TypeSelectorManagerImpl; import com.intellij.refactoring.util.CommonRefactoringUtil; +import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.LightJavaCodeInsightTestCase; +import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.TestDataPath; import com.intellij.util.VisibilityUtil; import org.jetbrains.annotations.NonNls; @@ -16,10 +19,17 @@ import org.jetbrains.annotations.NotNull; import java.util.List; +import static com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase.JAVA_21_ANNOTATED; + @TestDataPath("$CONTENT_ROOT/testData") public class IntroduceConstantTest extends LightJavaCodeInsightTestCase { @NonNls private static final String BASE_PATH = "/refactoring/introduceConstant/"; + @Override + protected @NotNull LightProjectDescriptor getProjectDescriptor() { + return JAVA_21_ANNOTATED; + } + @NotNull @Override protected String getTestDataPath() { @@ -49,7 +59,7 @@ public class IntroduceConstantTest extends LightJavaCodeInsightTestCase { public void testNonStaticContainerForCompileTimeConstant2() { doTest(); } public void testStaticFieldInAnonymous() { doTest(); } - public void testStaticFieldInAnonymousJava8() { doTest(); } + public void testStaticFieldInAnonymousJava8() { IdeaTestUtil.withLevel(getModule(), LanguageLevel.JDK_1_8, () -> doTest()); } private void doTest(boolean makeEnumConstant) { configureByFile(BASE_PATH + getTestName(false) + ".java"); @@ -89,6 +99,10 @@ public class IntroduceConstantTest extends LightJavaCodeInsightTestCase { public void testAnnotationDescription() { doTest(); } + + public void testNoExternalTypeAnnotations() { + doTest(); + } public void testTailingErrorUnacceptableWholeLineSelection() { doTest(); diff --git a/java/java-tests/testSrc/com/intellij/java/refactoring/MockIntroduceConstantHandler.java b/java/java-tests/testSrc/com/intellij/java/refactoring/MockIntroduceConstantHandler.java index df43278cea9b..9c1929f35e80 100644 --- a/java/java-tests/testSrc/com/intellij/java/refactoring/MockIntroduceConstantHandler.java +++ b/java/java-tests/testSrc/com/intellij/java/refactoring/MockIntroduceConstantHandler.java @@ -31,7 +31,7 @@ public class MockIntroduceConstantHandler extends IntroduceConstantHandler{ protected Settings showRefactoringDialog(final Project project, final Editor editor, final PsiClass parentClass, final PsiExpression expr, final PsiType type, final PsiExpression[] occurrences, final PsiElement anchorElement, final PsiElement anchorElementIfAll) { - return new Settings("xxx", expr, occurrences, true, true, true, InitializationPlace.IN_FIELD_DECLARATION, getVisibility(), null, null, false, + return new Settings("xxx", expr, occurrences, true, true, true, InitializationPlace.IN_FIELD_DECLARATION, getVisibility(), null, type, false, myTargetClass != null ? myTargetClass : parentClass, false, false); }