From 01dab26f6478bce3dc4afc48cd7a46d6179cc962 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 27 Nov 2024 10:41:09 +0100 Subject: [PATCH] [java-intentions] Remove external type annotations on ChangeMethodSignatureFromUsageFix Follow-up for IDEA-363866 Remove redundant type annotations on 'Change variable type' fix GitOrigin-RevId: fc52a66f6b7192ed6c111737619d9fd5dab6817d --- .../ChangeMethodSignatureFromUsageFix.java | 5 +++-- .../afterNoExternalTypeAnnotations.java | 15 +++++++++++++++ .../beforeNoExternalTypeAnnotations.java | 15 +++++++++++++++ .../ChangeMethodSignatureFromUsageModernTest.java | 8 ++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java index 40ecf57f773b..119703f78663 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageFix.java @@ -354,8 +354,9 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig if (PsiPolyExpressionUtil.isPolyExpression(expression)) return null; PsiType exprType = CommonJavaRefactoringUtil.getTypeByExpression(expression); if (exprType == null || PsiTypes.voidType().equals(exprType)) return null; - if (exprType instanceof PsiDisjunctionType) { - exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound(); + exprType = PsiTypesUtil.removeExternalAnnotations(exprType); + if (exprType instanceof PsiDisjunctionType disjunctionType) { + exprType = disjunctionType.getLeastUpperBound(); } if (!PsiTypesUtil.allTypeParametersResolved(myTargetMethod, exprType)) return null; final ParameterInfoImpl changedParameterInfo = ParameterInfoImpl.create(i).withName(parameter.getName()).withType(exprType); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations.java new file mode 100644 index 000000000000..dd4cbce1fb5d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations.java @@ -0,0 +1,15 @@ +// "Change 1st parameter of method 'use' from 'Map' to 'Map'" "true" +import java.util.Map; +import java.util.stream.Collectors; + +class Test { + void testMethodRef(Map list) { + var map = list.entrySet().stream() + .filter(e -> !e.getKey().isEmpty()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + use(map); + } + + private void use(Map collect) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations.java new file mode 100644 index 000000000000..dee9c2dd0173 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations.java @@ -0,0 +1,15 @@ +// "Change 1st parameter of method 'use' from 'Map' to 'Map'" "true" +import java.util.Map; +import java.util.stream.Collectors; + +class Test { + void testMethodRef(Map list) { + var map = list.entrySet().stream() + .filter(e -> !e.getKey().isEmpty()) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + use(map); + } + + private void use(Map collect) { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageModernTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageModernTest.java index 1cdfbd0e8bf2..c0b70d27c0e5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageModernTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/ChangeMethodSignatureFromUsageModernTest.java @@ -2,6 +2,10 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.testFramework.LightProjectDescriptor; +import org.jetbrains.annotations.NotNull; + +import static com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase.JAVA_21_ANNOTATED; public class ChangeMethodSignatureFromUsageModernTest extends LightQuickFixParameterizedTestCase { @@ -10,4 +14,8 @@ public class ChangeMethodSignatureFromUsageModernTest extends LightQuickFixParam return "/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern"; } + @Override + protected @NotNull LightProjectDescriptor getProjectDescriptor() { + return JAVA_21_ANNOTATED; + } }