diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java index 228aeffe70e..2c74bd30d99 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java @@ -54,6 +54,8 @@ public class ScopeProvider { private final NotNullLazyValue defaultImportsScope; + private final MemoizedFunctionToNotNull fileScopes; + @SuppressWarnings("ConstantConditions") @NotNull private AdditionalFileScopeProvider additionalFileScopeProvider = null; @@ -78,6 +80,13 @@ public class ScopeProvider { return createScopeWithDefaultImports(); } }); + + this.fileScopes = resolveSession.getStorageManager().createMemoizedFunction(new Function1() { + @Override + public JetScope invoke(JetFile file) { + return createFileScope(file); + } + }); } private LazyImportScope createExplicitImportScope(@NotNull JetFile file) { @@ -91,12 +100,17 @@ public class ScopeProvider { @NotNull public JetScope getFileScope(@NotNull JetFile file) { + return fileScopes.invoke(file); + } + + private JetScope createFileScope(@NotNull JetFile file) { return new ChainedScope(resolveSession.getPackageFragment(file.getPackageFqName()), "File scope: " + file.getName(), collectFileScopes(file)); } - public JetScope[] collectFileScopes(@NotNull JetFile file) { + @NotNull + private JetScope[] collectFileScopes(@NotNull JetFile file) { List list = new ArrayList(); list.add(new NoSubpackagesInPackageScope(getFilePackageDescriptor(file))); list.add(JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()));