From e35f056f858cf03eebfab34dc2f43049b0259a23 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 18 Jul 2022 16:07:39 +0200 Subject: [PATCH] [java] local can be final: accept lambda parameters with explicit types (IDEA-223120) GitOrigin-RevId: a6ee13c64c0139ba0a68f318daf448182a0f3f1d --- .../localCanBeFinal/LocalCanBeFinal.java | 12 ++++++++---- .../inspection/localCanBeFinal/LambdaParameters.java | 11 +++++++++++ .../java/codeInspection/LocalCanBeFinalTest.java | 6 ++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/inspection/localCanBeFinal/LambdaParameters.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/localCanBeFinal/LocalCanBeFinal.java b/java/java-analysis-impl/src/com/intellij/codeInspection/localCanBeFinal/LocalCanBeFinal.java index b62ba3b01434..211f817fa7e1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/localCanBeFinal/LocalCanBeFinal.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/localCanBeFinal/LocalCanBeFinal.java @@ -243,10 +243,14 @@ public class LocalCanBeFinal extends AbstractBaseJavaLocalInspectionTool impleme } }); - if (body.getParent() instanceof PsiMethod && REPORT_PARAMETERS) { - final PsiMethod method = (PsiMethod)body.getParent(); - if (!(method instanceof SyntheticElement)) { // e.g. JspHolderMethod - Collections.addAll(result, method.getParameterList().getParameters()); + if (body.getParent() instanceof PsiParameterListOwner && REPORT_PARAMETERS) { + final PsiParameterListOwner methodOrLambda = (PsiParameterListOwner)body.getParent(); + if (!(methodOrLambda instanceof SyntheticElement)) { // e.g. JspHolderMethod + for (PsiParameter parameter : methodOrLambda.getParameterList().getParameters()) { + if (parameter.getTypeElement() != null) { + result.add(parameter); + } + } } } diff --git a/java/java-tests/testData/inspection/localCanBeFinal/LambdaParameters.java b/java/java-tests/testData/inspection/localCanBeFinal/LambdaParameters.java new file mode 100644 index 000000000000..44bb57650876 --- /dev/null +++ b/java/java-tests/testData/inspection/localCanBeFinal/LambdaParameters.java @@ -0,0 +1,11 @@ +class Test{ + + public void t() { + I i1 = (Integer i) -> {}; + I i2 = i -> {}; + } +} + +interface I { + void f(Integer i); +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/LocalCanBeFinalTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/LocalCanBeFinalTest.java index 7236e7e20995..abf0c0af33e1 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/LocalCanBeFinalTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/LocalCanBeFinalTest.java @@ -54,6 +54,12 @@ public class LocalCanBeFinalTest extends LightJavaCodeInsightFixtureTestCase { myTool.REPORT_VARIABLES = true; doTest(); } + + public void testLambdaParameters() { + myTool.REPORT_PARAMETERS = true; + myTool.REPORT_VARIABLES = false; + doTest(); + } public void testParameters() { myTool.REPORT_PARAMETERS = true;