From db215203e005a12b83a4c70eacc50237f0a45c52 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 9 Mar 2016 11:18:20 +0100 Subject: [PATCH] inference for non-poly expressions: isAssignable already contains loose context inside, don't allow any additional conversions (IDEA-152694) --- .../constraints/ExpressionCompatibilityConstraint.java | 7 ++++--- .../LooseInvocationContextForProperPrimitiveTypes.java | 8 ++++++++ .../daemon/lambda/GenericsHighlighting8Test.java | 4 ++++ 3 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/LooseInvocationContextForProperPrimitiveTypes.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java index cae20db0f0c5..957fdfd396c0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java @@ -41,8 +41,11 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm @Override public boolean reduce(InferenceSession session, List constraints) { if (!PsiPolyExpressionUtil.isPolyExpression(myExpression)) { + + PsiType exprType = myExpression.getType(); + if (session.isProperType(myT)) { - final boolean assignmentCompatible = TypeConversionUtil.areTypesAssignmentCompatible(myT, myExpression); + final boolean assignmentCompatible = TypeConversionUtil.isAssignable(myT, exprType); if (!assignmentCompatible) { final PsiType type = myExpression.getType(); session.registerIncompatibleErrorMessage((type != null ? type.getPresentableText() : myExpression.getText()) + " is not compatible with " + session.getPresentableText(myT)); @@ -50,8 +53,6 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm return assignmentCompatible; } - PsiType exprType = myExpression.getType(); - if (exprType instanceof PsiLambdaParameterType) { return false; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/LooseInvocationContextForProperPrimitiveTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/LooseInvocationContextForProperPrimitiveTypes.java new file mode 100644 index 000000000000..5c9d04006208 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/LooseInvocationContextForProperPrimitiveTypes.java @@ -0,0 +1,8 @@ +class Test { + + { + pair(2); + } + + static void pair( byte b) {} +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index 40904c0b5c97..504f48ee0470 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -978,4 +978,8 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { public void testIDEA152179() throws Exception { doTest(); } + + public void testLooseInvocationContextForProperPrimitiveTypes() throws Exception { + doTest(); + } }