inference: substitution for captures (IDEA-186844)

This commit is contained in:
Anna.Kozlova
2018-02-19 18:28:00 +01:00
parent ce0408fae1
commit bca21ba8c6
3 changed files with 22 additions and 1 deletions

View File

@@ -65,7 +65,7 @@ class InitialInferenceState {
final PsiType substitute = topInferenceSubstitutor.substitute(parameters[i]);
newParameters[i] = (InferenceVariable)PsiUtil.resolveClassInClassTypeOnly(substitute);
}
myCaptures.add(Pair.create(newParameters, (PsiClassType)subst.substitute(capture.second)));
myCaptures.add(Pair.create(newParameters, (PsiClassType)topInferenceSubstitutor.substitute(subst.substitute(capture.second))));
}
myInferenceSessionContainer = inferenceSessionContainer;
}

View File

@@ -0,0 +1,20 @@
import java.util.function.Supplier;
import java.util.stream.Stream;
class ExceptionStream {
void foo(Supplier<Stream<String>> mapper) {
bar(flatMap (transform(mapper)));
}
<R> Stream<R> flatMap(Supplier<? extends Stream<R>> mapper) {
return null;
}
void bar(Stream<String> s) {}
<T> Supplier<? extends T> transform(Supplier<T> function) {
return function;
}
}

View File

@@ -182,6 +182,7 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase
public void testRecursiveTypeWithCapture() { doTest(); }
public void testFreshVariablesDuringApplicabilityCheck() { doTest(); }
public void testPostponeConditionalExpressionErrorToMethodLevel() { doTest(); }
public void testNestedCallsWithFreshVariables() { doTest(); }
public void testPertinentToApplicabilityCheckForBlockLambda() { doTest(); }
public void testCheckGlbConflictsAfterIntersectionTypeCreated() { doTest(); }