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; + } }