From 57954029d0d71c4cce058acdceb2ed2b32b43859 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 7 Oct 2013 20:07:42 +0200 Subject: [PATCH] new inference: reject explicitly typed lambda as pertinent to applicability if its return statements are poly --- .../source/resolve/graphInference/InferenceSession.java | 6 ++++++ .../graphInference/constraints/SubtypingConstraint.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index cdb811d45e3b..219cf3f41161 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -145,6 +145,12 @@ public class InferenceSession { if (psiClass instanceof PsiTypeParameter && ((PsiTypeParameter)psiClass).getOwner() == method) return false; } } + + for (PsiExpression expression : LambdaUtil.getReturnExpressions((PsiLambdaExpression)expr)) { + if (PsiPolyExpressionUtil.isPolyExpression(expression)) { + return false; + } + } } return true; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java index 105643d0b196..baaba043ec8e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java @@ -50,7 +50,7 @@ public class SubtypingConstraint implements ConstraintFormula { return true; } if (PsiType.NULL.equals(myS)) return true; - inferenceVariable = session.getInferenceVariable(myT); + inferenceVariable = session.getInferenceVariable(myT, false); if (inferenceVariable != null) { inferenceVariable.addBound(myS, InferenceBound.LOWER); return true;