reject functional expressions as conditional condition (IDEA-184667)

This commit is contained in:
Anna.Kozlova
2018-01-08 17:05:50 +01:00
parent 41ebb4f647
commit 52bd45c9b2
3 changed files with 9 additions and 3 deletions
@@ -337,9 +337,9 @@ public class LambdaUtil {
PsiElement parent = expression.getParent();
PsiElement element = expression;
while (parent instanceof PsiParenthesizedExpression || parent instanceof PsiConditionalExpression) {
if (parent instanceof PsiConditionalExpression &&
((PsiConditionalExpression)parent).getThenExpression() != element &&
((PsiConditionalExpression)parent).getElseExpression() != element) break;
if (parent instanceof PsiConditionalExpression && ((PsiConditionalExpression)parent).getCondition() == element) {
return PsiType.BOOLEAN;
}
element = parent;
parent = parent.getParent();
}
@@ -0,0 +1,5 @@
class Test {
{
boolean condition = <error descr="boolean is not a functional interface">() -> {}</error> ? true : false;
}
}
@@ -163,6 +163,7 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testIDEA174924() { doTest(); }
public void testVoidValueCompatibilityWithBreakInSwitch() { doTest(); }
public void testExceptionInferenceForVarargMethods() { doTest(); }
public void testConditionalBooleanAsFunctionalInterfaceType() { doTest(); }
private void doTest() {
IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());