java: make resolveAllQualifiers go through RecursionManager to take advantage of its memoization (IDEA-236961)

GitOrigin-RevId: 1bfe281cbfaa8c6423a12313daf6f72aae738846
This commit is contained in:
Peter Gromov
2020-04-17 06:14:17 +00:00
committed by intellij-monorepo-bot
parent bfb501fbfd
commit 0b3f27a0af
3 changed files with 42 additions and 2 deletions
@@ -244,7 +244,7 @@ public class PsiReferenceExpressionImpl extends ExpressionPsiElement implements
if (!(element instanceof PsiReferenceExpressionImpl)) return;
PsiReferenceExpressionImpl chainedQualifier = (PsiReferenceExpressionImpl)element;
RecursionGuard.StackStamp stamp = RecursionManager.markStack();
ResolveResult[] res = resolveCache.resolveWithCaching(chainedQualifier, INSTANCE, false, false, containingFile);
ResolveResult[] res = resolveCache.resolveWithCaching(chainedQualifier, INSTANCE, true, false, containingFile);
if (stamp.mayCacheNow()) {
ourQualifierCache.get().put(chainedQualifier, res);
}
@@ -19,6 +19,46 @@ class MyTest {
void m(List<Foo> list){
add<caret>All(list.stream().map(it -> new Builder()
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
.put(it.getBar())
@@ -75,7 +75,7 @@ public class InferencePerformanceTest extends LightDaemonAnalyzerTestCase {
PlatformTestUtil.startPerformanceTest("long qualifier chain", 12000, this::doTest).usesAllCPUCores().assertTiming();
}
public void _testLongQualifierChainInsideLambdaWithOverloads() {
public void testLongQualifierChainInsideLambdaWithOverloads() {
PlatformTestUtil.startPerformanceTest("long qualifier chain", 12000, () -> {
configureByFile(BASE_PATH + "/" + getTestName(false) + ".java");
PsiMethodCallExpression callExpression =