From 2c766e6df03c2f426c58fc807d3fcbb39a9dc665 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Tue, 16 Jul 2024 14:57:31 +0200 Subject: [PATCH] [java-inspections] TrivialFunctionalExpressionUsage: do not report for any parent statement Also: report any lambda inside parent return statement Fixes IDEA-356003 Method call should not be simplified GitOrigin-RevId: cb39dd33d27ba402a503707daffcc831ab59b49e --- ...alFunctionalExpressionUsageInspection.java | 8 ++++-- .../afterReturnInTry2.java | 26 +++++++++++++++++ .../beforeReturnInTry.java | 18 ++++++++++++ .../beforeReturnInTry2.java | 28 +++++++++++++++++++ 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterReturnInTry2.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry2.java diff --git a/java/java-impl/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java b/java/java-impl/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java index 936b41ffd72d..d3335b0153ef 100644 --- a/java/java-impl/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/TrivialFunctionalExpressionUsageInspection.java @@ -93,11 +93,13 @@ public final class TrivialFunctionalExpressionUsageInspection extends AbstractBa return callParent instanceof PsiStatement || callParent instanceof PsiLocalVariable || expression.isValueCompatible(); } + if (callParent instanceof PsiReturnStatement) { + return true; + } + PsiStatement[] statements = ((PsiCodeBlock)body).getStatements(); if (statements.length == 1) { - return callParent instanceof PsiStatement - || callParent instanceof PsiLocalVariable - || statements[0] instanceof PsiReturnStatement && expression.isValueCompatible(); + return statements[0] instanceof PsiReturnStatement && expression.isValueCompatible(); } final PsiReturnStatement[] returnStatements = PsiUtil.findReturnStatements((PsiCodeBlock)body); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterReturnInTry2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterReturnInTry2.java new file mode 100644 index 000000000000..cc5d28b8532e --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/afterReturnInTry2.java @@ -0,0 +1,26 @@ +// "Replace method call on lambda with lambda body" "true-preview" +import java.util.function.Supplier; + +class Test { + public static int test() { + for (int i = 0; i < 10; i++) { + final int finalI = i; + System.out.println("hello"); + try { + if (finalI > 3) { + return 123; + } + System.out.println(finalI); + } catch (Exception ignored) { + return 456; + } + return 456; + } + System.out.println("Hello"); + return 3; + } + + public static void main(String[] args) { + System.out.println(test()); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry.java new file mode 100644 index 000000000000..fbfb59294655 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry.java @@ -0,0 +1,18 @@ +// "Replace method call on lambda with lambda body" "false" +class Test { + public static void main(String[] args) { + for (int i = 0; i < 10; i++) { + final int finalI = i; + ((Runnable) () -> { + try { + if (finalI > 3) { + return; + } + System.out.println(finalI); + } catch (Exception ignored) { + } + }).run(); + } + System.out.println("Hello"); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry2.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry2.java new file mode 100644 index 000000000000..0cc992e9b340 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/trivialFunctionalExpressionUsage/beforeReturnInTry2.java @@ -0,0 +1,28 @@ +// "Replace method call on lambda with lambda body" "true-preview" +import java.util.function.Supplier; + +class Test { + public static int test() { + for (int i = 0; i < 10; i++) { + final int finalI = i; + return ((Supplier) () -> { + System.out.println("hello"); + try { + if (finalI > 3) { + return 123; + } + System.out.println(finalI); + } catch (Exception ignored) { + return 456; + } + return 456; + }).get(); + } + System.out.println("Hello"); + return 3; + } + + public static void main(String[] args) { + System.out.println(test()); + } +} \ No newline at end of file