From 6edc546e656f88cdaaa355ca8dd598cb28997c36 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 20 Feb 2013 21:28:18 +0100 Subject: [PATCH] lambda: void compatibility guess --- .../src/com/intellij/psi/LambdaHighlightingUtil.java | 2 +- .../lambda/highlighting/VoidCompatibility.java | 12 ++++++++++++ .../daemon/lambda/LambdaHighlightingTest.java | 4 ++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VoidCompatibility.java diff --git a/java/java-psi-api/src/com/intellij/psi/LambdaHighlightingUtil.java b/java/java-psi-api/src/com/intellij/psi/LambdaHighlightingUtil.java index e8b8e1d68a70..50030d468571 100644 --- a/java/java-psi-api/src/com/intellij/psi/LambdaHighlightingUtil.java +++ b/java/java-psi-api/src/com/intellij/psi/LambdaHighlightingUtil.java @@ -40,7 +40,7 @@ public class LambdaHighlightingUtil { final PsiElement body = lambdaExpression.getBody(); if (body instanceof PsiCodeBlock) { if (!LambdaUtil.getReturnExpressions(lambdaExpression).isEmpty()) return "Unexpected return value"; - } else if (body instanceof PsiExpression) { + } else if (body instanceof PsiReferenceExpression || body instanceof PsiLiteralExpression) { final PsiType type = ((PsiExpression)body).getType(); if (type != PsiType.VOID) { return "Incompatible return type " + (type == PsiType.NULL || type == null ? "" : type.getPresentableText()) +" in lambda expression"; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VoidCompatibility.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VoidCompatibility.java new file mode 100644 index 000000000000..88208b911a5d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/VoidCompatibility.java @@ -0,0 +1,12 @@ +public class Main { + interface I { + void m(T t); + } + + { + String s = ""; + I arr1 = (t) -> s; + I arr2 = (t) -> s.toString(); + } + +} 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 42b1aa0fda52..fb83818521de 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 @@ -220,6 +220,10 @@ public class LambdaHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testVoidCompatibility() throws Exception { + doTest(); + } + private void doTest() throws Exception { doTest(false); }