From dd57f9d123748179aa71f67263c11b117862472b Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 7 Nov 2018 15:23:44 +0100 Subject: [PATCH] make PsiClassReferenceListStubImpl.myTypes thread-safe --- .../impl/PsiClassReferenceListStubImpl.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassReferenceListStubImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassReferenceListStubImpl.java index 57f942568be2..d0f3f9549d90 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassReferenceListStubImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassReferenceListStubImpl.java @@ -32,7 +32,7 @@ import org.jetbrains.annotations.NotNull; */ public class PsiClassReferenceListStubImpl extends StubBase implements PsiClassReferenceListStub { private final String[] myNames; - private PsiClassType[] myTypes; + private volatile PsiClassType[] myTypes; public PsiClassReferenceListStubImpl(@NotNull JavaClassReferenceListElementType type, StubElement parent, @NotNull String[] names) { super(parent, type); @@ -43,14 +43,16 @@ public class PsiClassReferenceListStubImpl extends StubBase im @NotNull @Override public PsiClassType[] getReferencedTypes() { - if (myTypes != null) return myTypes; - - if (myNames.length == 0) { - myTypes = PsiClassType.EMPTY_ARRAY; - return myTypes; + PsiClassType[] types = myTypes; + if (types == null) { + myTypes = types = createTypes(); } + return types.clone(); + } - PsiClassType[] types = new PsiClassType[myNames.length]; + @NotNull + private PsiClassType[] createTypes() { + PsiClassType[] types = myNames.length == 0 ? PsiClassType.EMPTY_ARRAY : new PsiClassType[myNames.length]; final boolean compiled = ((JavaClassReferenceListElementType)getStubType()).isCompiled(this); if (compiled) { @@ -84,9 +86,7 @@ public class PsiClassReferenceListStubImpl extends StubBase im types = newTypes; } } - - myTypes = types; - return types.clone(); + return types; } @NotNull