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 b5b7c3df5c7e..9904366b8e55 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 @@ -101,6 +101,7 @@ public class InferenceSession { myIncorporationPhase.addCapture(capture.first, capture.second); } myInferenceSessionContainer = initialState.getInferenceSessionContainer(); + myErased = initialState.isErased(); } public InferenceSession(PsiTypeParameter[] typeParams, @@ -594,6 +595,7 @@ public class InferenceSession { myInferenceSubstitution, mySiteSubstitutor, myIncorporationPhase.getCaptures(), + myErased, container); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InitialInferenceState.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InitialInferenceState.java index ed3cd3fc6312..c500079c6c91 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InitialInferenceState.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InitialInferenceState.java @@ -32,6 +32,7 @@ class InitialInferenceState { private final PsiSubstitutor mySiteSubstitutor; private final ArrayList> myCaptures; private final InferenceSessionContainer myInferenceSessionContainer; + private final boolean myErased; InitialInferenceState(Set inferenceVariables, PsiSubstitutor topInferenceSubstitutor, @@ -39,7 +40,9 @@ class InitialInferenceState { PsiSubstitutor inferenceSubstitutor, PsiSubstitutor siteSubstitutor, List> captures, + boolean erased, InferenceSessionContainer inferenceSessionContainer) { + myErased = erased; myInferenceVariables = new HashSet(); PsiSubstitutor substitutor = PsiSubstitutor.EMPTY; PsiSubstitutor subst = PsiSubstitutor.EMPTY; @@ -93,4 +96,8 @@ class InitialInferenceState { public ArrayList> getCaptures() { return myCaptures; } + + public boolean isErased() { + return myErased; + } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/PushErasedStateToArguments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/PushErasedStateToArguments.java new file mode 100644 index 000000000000..ce092deb9795 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/graphInference/PushErasedStateToArguments.java @@ -0,0 +1,14 @@ + +import java.util.ArrayList; + +abstract class Test { + public void some(final ArrayList> rules, + final Context context) { + rules.add (createRule(context)); + } + + abstract ProcessingRule createRule(Context context); +} + +interface ProcessingRule {} +class Context {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java index 5b6ce1e04f13..0036b1662029 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GraphInferenceHighlightingTest.java @@ -363,6 +363,10 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase doTest(); } + public void testPushErasedStateToArguments() throws Exception { + doTest(); + } + private void doTest() throws Exception { doTest(false); }