mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 15:09:39 +07:00
enum constants resolution cached (IDEA-183841)
This commit is contained in:
@@ -29,6 +29,9 @@ import com.intellij.psi.impl.java.stubs.PsiFieldStub;
|
||||
import com.intellij.psi.impl.source.tree.ChildRole;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.util.CachedValueProvider;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.ui.RowIcon;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -148,21 +151,19 @@ public class PsiEnumConstantImpl extends JavaStubPsiElement<PsiFieldStub> implem
|
||||
|
||||
@Override
|
||||
public PsiMethod resolveMethod() {
|
||||
PsiClass containingClass = getContainingClass();
|
||||
LOG.assertTrue(containingClass != null);
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
JavaResolveResult resolveResult = facade.getResolveHelper()
|
||||
.resolveConstructor(facade.getElementFactory().createType(containingClass), getArgumentList(), this);
|
||||
return (PsiMethod)resolveResult.getElement();
|
||||
return (PsiMethod)resolveMethodGenerics().getElement();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public JavaResolveResult resolveMethodGenerics() {
|
||||
PsiClass containingClass = getContainingClass();
|
||||
LOG.assertTrue(containingClass != null);
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
return facade.getResolveHelper().resolveConstructor(facade.getElementFactory().createType(containingClass), getArgumentList(), this);
|
||||
return CachedValuesManager.getCachedValue(this, () -> {
|
||||
PsiClass containingClass = getContainingClass();
|
||||
LOG.assertTrue(containingClass != null);
|
||||
final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject());
|
||||
return new CachedValueProvider.Result<>(facade.getResolveHelper().resolveConstructor(facade.getElementFactory().createType(containingClass), getArgumentList(), this),
|
||||
PsiModificationTracker.MODIFICATION_COUNT);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
class Pair<A, B> {
|
||||
Pair(A a, B b){}
|
||||
}
|
||||
|
||||
enum MyEnum {
|
||||
C1(
|
||||
new Pair<>("", 1),
|
||||
new Pair<>("", 1),
|
||||
new Pair<>("", 1),
|
||||
new Pair<>("", 1)
|
||||
),
|
||||
C2(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C3(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C4(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C5(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C6(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C7(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C8(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C9(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
),
|
||||
C10(
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2),
|
||||
new Pair<>("", 2)
|
||||
);
|
||||
MyEnum(Pair<String, Integer>... pairs) {}
|
||||
MyEnum(String displayName, Pair<String, Integer>... pairs) {}
|
||||
}
|
||||
@@ -32,6 +32,10 @@ public class InferencePerformanceTest extends LightDaemonAnalyzerTestCase {
|
||||
PlatformTestUtil.startPerformanceTest("50 diamond constructor calls passed to Arrays.asList", 12000, this::doTest).usesAllCPUCores().assertTiming();
|
||||
}
|
||||
|
||||
public void testDiamondConstructorCallPassedToEnumConstantWithVarargs() {
|
||||
PlatformTestUtil.startPerformanceTest("10 enum constants with vararg diamonds", 12000, this::doTest).usesAllCPUCores().assertTiming();
|
||||
}
|
||||
|
||||
public void testLeastUpperBoundWithLotsOfSupers() {
|
||||
PlatformTestUtil.startPerformanceTest("7 unrelated intersection conjuncts", 12000, this::doTest).usesAllCPUCores().assertTiming();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user