From f91fa19ea117aa2a3b9fa918c6fbd41d86f0a57e Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Mon, 6 Feb 2012 22:09:18 +0400 Subject: [PATCH] memoize psiClass() --- .../lang/resolve/java/JavaClassOrPackageScope.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java index 0b83cfda171..2263a298920 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaClassOrPackageScope.java @@ -1,5 +1,6 @@ package org.jetbrains.jet.lang.resolve.java; +import com.intellij.openapi.util.Ref; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassOrNamespaceDescriptor; @@ -19,6 +20,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl { @NotNull protected final ClassOrNamespaceDescriptor descriptor; protected final JavaSemanticServices semanticServices; + private Ref myPsiClassMemo; protected JavaClassOrPackageScope(@NotNull ClassOrNamespaceDescriptor descriptor, @NotNull JavaSemanticServices semanticServices) { this.descriptor = descriptor; @@ -39,7 +41,7 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl { @NotNull @Override public Set getProperties(@NotNull String name) { - PsiClassWrapper psiClass = psiClass(); + PsiClassWrapper psiClass = memoPsiClass(); if (psiClass == null) { return Collections.emptySet(); @@ -50,10 +52,17 @@ public abstract class JavaClassOrPackageScope extends JetScopeImpl { descriptor, psiClass.getPsiClass(), name, staticMembers()); } + private PsiClassWrapper memoPsiClass() { + if (myPsiClassMemo != null) return myPsiClassMemo.get(); + PsiClassWrapper answer = psiClass(); + myPsiClassMemo = new Ref(answer); + return answer; + } + @NotNull @Override public Set getFunctions(@NotNull String name) { - PsiClassWrapper psiClassForPackage = psiClass(); + PsiClassWrapper psiClassForPackage = memoPsiClass(); if (psiClassForPackage == null) { return Collections.emptySet();