From d9fb83d631f0172fe0648d23a0b582cfc56ca82d Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 18 Dec 2012 13:00:30 +0100 Subject: [PATCH] lambda: accept raw functional interfaces when there are no params --- .../src/com/intellij/psi/LambdaUtil.java | 6 +++--- .../lambda/highlighting/RawWhenNoParams.java | 17 +++++++++++++++++ .../daemon/lambda/LambdaHighlightingTest.java | 4 ++++ 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java index b9f7c67e4798..6236bdba2a5a 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaUtil.java @@ -93,9 +93,9 @@ public class LambdaUtil { } public static boolean isLambdaFullyInferred(PsiLambdaExpression expression, PsiType functionalInterfaceType) { - if (expression.getParameterList().getParametersCount() > 0 || - getFunctionalInterfaceReturnType(functionalInterfaceType) != PsiType.VOID) { //todo check that void lambdas without params check - if (!checkRawAcceptable(expression, functionalInterfaceType)) { + final boolean hasParams = expression.getParameterList().getParametersCount() > 0; + if (hasParams || getFunctionalInterfaceReturnType(functionalInterfaceType) != PsiType.VOID) { //todo check that void lambdas without params check + if (hasParams && !checkRawAcceptable(expression, functionalInterfaceType)) { return false; } return !dependsOnTypeParams(functionalInterfaceType, functionalInterfaceType, expression, null); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java new file mode 100644 index 000000000000..8e6d04dc4a47 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/RawWhenNoParams.java @@ -0,0 +1,17 @@ +public class FooBar { + private static final class Bar2 { + private Bar2() { + } + } + + private interface I { + T create(); + } + + static void foo(I intf) {} + + + public static void main(String[] args) throws Exception { + foo(() -> new Bar2()); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java index 781325eae988..759470a815d5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java @@ -165,6 +165,10 @@ public class LambdaHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testRawWhenNoParams() throws Exception { + doTest(); + } + private void doTest() throws Exception { doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false); }