From e7f9f733dd5113a36d374f158241f11d15dfeced Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 10 May 2019 22:22:08 +0200 Subject: [PATCH] inference testdata: error message should not depend on evaluation order GitOrigin-RevId: 5de0efc888c6627537d55f7544eb5af96e716ab6 --- .../expressions/OuterCallOverloads.java | 14 ++++++ .../lambda/Java8ExpressionsCheckTest.java | 46 +++++++++++++++---- 2 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/expressions/OuterCallOverloads.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/expressions/OuterCallOverloads.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/expressions/OuterCallOverloads.java new file mode 100644 index 000000000000..e4c915e9ee5a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/expressions/OuterCallOverloads.java @@ -0,0 +1,14 @@ +import java.util.List; +import java.util.Set; + +abstract class Overloadsss { + abstract List foo(List l); + abstract Set foo(Set s); + + abstract List bar1(List l); + abstract Set bar1(Set s); + + { + List l1 = foo(bar1(null)); + } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Java8ExpressionsCheckTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Java8ExpressionsCheckTest.java index d70b99301a24..a5cb57060b44 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Java8ExpressionsCheckTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Java8ExpressionsCheckTest.java @@ -91,7 +91,7 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { } private void doTestParametersSideEffects() { - configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + configure(); Collection parameters = PsiTreeUtil.findChildrenOfType(getFile(), PsiParameter.class); for (PsiParameter parameter : parameters) { if (parameter.getTypeElement() == null) { //lambda parameter @@ -101,13 +101,13 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { assertNotNull(expression.getText(), expression.resolveMethod()); } - getPsiManager().dropResolveCaches(); + dropCaches(); } } } public void testCachingOfResultsDuringCandidatesIteration() { - configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + configure(); final Collection methodCallExpressions = PsiTreeUtil.findChildrenOfType(getFile(), PsiMethodCallExpression.class); final PsiResolveHelper helper = JavaPsiFacade.getInstance(getProject()).getResolveHelper(); @@ -167,7 +167,7 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { } private void doTestCachedUnresolved() { - configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + configure(); PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiMethodCallExpression.class); @@ -180,17 +180,47 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { } } + private void configure() { + configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + } + public void testIDEA140035() { doTestAllMethodCallExpressions(); final Collection parameterLists = PsiTreeUtil.findChildrenOfType(getFile(), PsiParameter.class); for (PsiParameter parameter : parameterLists) { if (parameter.getTypeElement() != null) continue; - getPsiManager().dropResolveCaches(); + dropCaches(); final PsiType type = parameter.getType(); assertFalse("Failed inference for: " + parameter.getParent().getText(), type instanceof PsiLambdaParameterType); } } + private static void dropCaches() { + getPsiManager().dropResolveCaches(); + } + + public void testOuterCallOverloads() { + configure(); + PsiMethodCallExpression innerCall = + PsiTreeUtil.getParentOfType(getFile().findElementAt(getEditor().getCaretModel().getOffset()), PsiMethodCallExpression.class); + + PsiMethodCallExpression outerCall = (PsiMethodCallExpression) innerCall.getParent().getParent(); + + assertAmbiguous(outerCall); + assertAmbiguous(innerCall); + + dropCaches(); + + assertAmbiguous(innerCall); + assertAmbiguous(outerCall); + } + + private static void assertAmbiguous(PsiMethodCallExpression call) { + assertNull(call.getText(), call.resolveMethod()); + assertSize(2, call.getMethodExpression().multiResolve(false)); + assertNull(call.getText(), call.getType()); + } + public void testAdditionalConstraintsBasedOnLambdaResolution() { doTestAllMethodCallExpressions(); } @@ -204,10 +234,10 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { } private void doTestAllMethodCallExpressions() { - configureByFile(BASE_PATH + "/" + getTestName(false) + ".java"); + configure(); final Collection methodCallExpressions = PsiTreeUtil.findChildrenOfType(getFile(), PsiCallExpression.class); for (PsiCallExpression expression : methodCallExpressions) { - getPsiManager().dropResolveCaches(); + dropCaches(); if (expression instanceof PsiMethodCallExpression) { assertNotNull("Failed to resolve: " + expression.getText(), expression.resolveMethod()); } @@ -216,7 +246,7 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase { final Collection parameterLists = PsiTreeUtil.findChildrenOfType(getFile(), PsiNewExpression.class); for (PsiNewExpression newExpression : parameterLists) { - getPsiManager().dropResolveCaches(); + dropCaches(); final PsiType[] arguments = newExpression.getTypeArguments(); String failMessage = "Failed inference for: " + newExpression.getParent().getText(); assertNotNull(failMessage, arguments);