inference testdata: error message should not depend on evaluation order

GitOrigin-RevId: 5de0efc888c6627537d55f7544eb5af96e716ab6
This commit is contained in:
Anna Kozlova
2019-05-10 22:22:08 +02:00
committed by intellij-monorepo-bot
parent 5acf90956e
commit e7f9f733dd
2 changed files with 52 additions and 8 deletions

View File

@@ -0,0 +1,14 @@
import java.util.List;
import java.util.Set;
abstract class Overloadsss {
abstract <T> List<T> foo(List<T> l);
abstract <T> Set<T> foo(Set<T> s);
abstract <K> List<K> bar1(List<K> l);
abstract <K> Set<K> bar1(Set<K> s);
{
List<String> l1 = foo(<caret>bar1(null));
}
}

View File

@@ -91,7 +91,7 @@ public class Java8ExpressionsCheckTest extends LightDaemonAnalyzerTestCase {
}
private void doTestParametersSideEffects() {
configureByFile(BASE_PATH + "/" + getTestName(false) + ".java");
configure();
Collection<PsiParameter> 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<PsiMethodCallExpression> 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<PsiParameter> 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<PsiCallExpression> 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<PsiNewExpression> 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);