From ae7957d3c71246dde5ebca88bc5c81f60ef09d3e Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 18 Feb 2025 14:37:52 +0100 Subject: [PATCH] [java-refactoring] ChangeMethodSignatureFromUsageFix: remove external type annotations Fixes IDEA-366962 Quick-fix for adding method parameter generates long jetbrains UnknownNullability annotation GitOrigin-RevId: 03d9b8be45670e6a72696d740d7ca71d746c7267 --- .../ChangeMethodSignatureFromUsageFix.java | 5 +++-- .../afterNoExternalTypeAnnotations2.java | 14 ++++++++++++++ .../beforeNoExternalTypeAnnotations2.java | 14 ++++++++++++++ 3 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations2.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 534a12b0001c..2d877929dd1b 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 @@ -451,9 +451,10 @@ public class ChangeMethodSignatureFromUsageFix implements IntentionAction/*, Hig if (PsiPolyExpressionUtil.isPolyExpression(expression)) return false; PsiType exprType = CommonJavaRefactoringUtil.getTypeByExpression(expression); if (exprType == null || PsiTypes.voidType().equals(exprType)) return false; - if (exprType instanceof PsiDisjunctionType) { - exprType = ((PsiDisjunctionType)exprType).getLeastUpperBound(); + if (exprType instanceof PsiDisjunctionType disjunctionType) { + exprType = disjunctionType.getLeastUpperBound(); } + exprType = PsiTypesUtil.removeExternalAnnotations(exprType); if (!PsiTypesUtil.allTypeParametersResolved(myTargetMethod, exprType)) return false; JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance(expression.getProject()); String name = suggestUniqueParameterName(codeStyleManager, expression, exprType, existingNames); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations2.java new file mode 100644 index 000000000000..ae493e22df60 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/afterNoExternalTypeAnnotations2.java @@ -0,0 +1,14 @@ +// "Add 'Integer' as 1st parameter to method 'perform'" "true" +import java.util.concurrent.CompletableFuture; + +public class FutureWhenDone { + public void handle(CompletableFuture future) { + future.whenComplete((r, e) -> { + perform(r); + }); + } + + private void perform(Integer r) { + System.out.println(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations2.java new file mode 100644 index 000000000000..105903bd4982 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/changeMethodSignatureFromUsageModern/beforeNoExternalTypeAnnotations2.java @@ -0,0 +1,14 @@ +// "Add 'Integer' as 1st parameter to method 'perform'" "true" +import java.util.concurrent.CompletableFuture; + +public class FutureWhenDone { + public void handle(CompletableFuture future) { + future.whenComplete((r, e) -> { + perform(r); + }); + } + + private void perform() { + System.out.println(); + } +} \ No newline at end of file