From b15fa5dc98ae6707eefea5ca642ff70e4eb98883 Mon Sep 17 00:00:00 2001 From: anna Date: Sun, 24 Nov 2013 10:46:51 +0100 Subject: [PATCH] new inference: propagate calculated substitutor to use in B3 reduction process (cherry picked from commit 9e70662bfae9dd6419ded2928e30b28b31eeee68) --- .../com/intellij/psi/infos/MethodCandidateInfo.java | 10 ++++++++++ .../resolve/graphInference/InferenceSession.java | 7 ++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java index 92c74b208e70..c6a8d713e1c2 100644 --- a/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java +++ b/java/java-psi-api/src/com/intellij/psi/infos/MethodCandidateInfo.java @@ -263,6 +263,16 @@ public class MethodCandidateInfo extends CandidateInfo{ return currentMethodCandidates != null ? currentMethodCandidates.get(context) : null; } + public static void updateSubstitutor(PsiElement context, PsiSubstitutor newSubstitutor) { + final Map> currentMethodCandidates = CURRENT_CANDIDATE.get(); + if (currentMethodCandidates != null) { + final Pair pair = currentMethodCandidates.get(context); + if (pair != null) { + currentMethodCandidates.put(context, Pair.create(pair.first, newSubstitutor)); + } + } + } + public static class ApplicabilityLevel { public static final int NOT_APPLICABLE = 1; public static final int VARARGS = 2; 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 998e1bb4f2a5..4110c82ca56e 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 @@ -200,7 +200,12 @@ public class InferenceSession { inferenceVariable.ignoreInstantiation(); } doesNotContainFalseBound = repeatInferencePhases(true); - resolveBounds(myInferenceVariables.values(), mySiteSubstitutor, false); + + PsiSubstitutor substitutor = resolveBounds(myInferenceVariables.values(), mySiteSubstitutor, false); + LOG.assertTrue(parent != null); + PsiExpressionList argumentList = ((PsiCallExpression)parent).getArgumentList(); + LOG.assertTrue(argumentList != null); + MethodCandidateInfo.updateSubstitutor(argumentList, substitutor); } if (parameters != null && args != null) {