From 65295ceeee2ab484f25734ba0b045740b436e07e Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 7 Nov 2018 15:23:21 +0100 Subject: [PATCH] LightReferenceListBuilder: less caching, don't resolve class types upon addition because resolve might be expensive, and sometimes lead to SOE if it requests the same lazily calculated reference list on the same class --- .../impl/light/LightReferenceListBuilder.java | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java index a234bf5b8dc7..8450e5526b1c 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightReferenceListBuilder.java @@ -28,7 +28,6 @@ import java.util.List; */ public class LightReferenceListBuilder extends LightElement implements PsiReferenceList { private final List myRefs = new ArrayList<>(); - private volatile PsiJavaCodeReferenceElement[] myCachedRefs; private volatile PsiClassType[] myCachedTypes; private final Role myRole; private final PsiElementFactory myFactory; @@ -53,26 +52,17 @@ public class LightReferenceListBuilder extends LightElement implements PsiRefere } public void addReference(String qualifiedName) { - final PsiJavaCodeReferenceElement ref = myFactory.createReferenceElementByFQClassName(qualifiedName, getResolveScope()); - myRefs.add(ref); + myRefs.add(myFactory.createReferenceElementByFQClassName(qualifiedName, getResolveScope())); } public void addReference(PsiClassType type) { - final PsiClass resolved = type.resolve(); - if (resolved == null) return; - - final PsiJavaCodeReferenceElement ref = myFactory.createReferenceElementByType(type); - myRefs.add(ref); + myRefs.add(myFactory.createReferenceElementByType(type)); } @NotNull @Override public PsiJavaCodeReferenceElement[] getReferenceElements() { - PsiJavaCodeReferenceElement[] refs = myCachedRefs; - if (refs == null) { - myCachedRefs = refs = myRefs.toArray(PsiJavaCodeReferenceElement.EMPTY_ARRAY); - } - return refs; + return myRefs.toArray(PsiJavaCodeReferenceElement.EMPTY_ARRAY); } @NotNull