From 96d7d8414d84a8507490a6d22dafaf4fe60f4146 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 5 Jun 2012 15:17:19 +0400 Subject: [PATCH] ModuleDescriptor now supports lazy root namespaces --- .../lang/descriptors/ModuleDescriptor.java | 20 +++++++++++-------- .../lang/resolve/NamespaceFactoryImpl.java | 8 ++++---- .../jet/lang/resolve/lazy/ResolveSession.java | 2 +- .../lang/types/lang/JetStandardClasses.java | 2 +- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java index a64c87bf928..d483071fc2b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java @@ -27,7 +27,7 @@ import java.util.Collections; * @author abreslav */ public class ModuleDescriptor extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, NamespaceDescriptorParent { - private NamespaceDescriptor rootNs; + private NamespaceDescriptor rootNamepsace; public ModuleDescriptor(Name name) { super(null, Collections.emptyList(), name); @@ -36,15 +36,19 @@ public class ModuleDescriptor extends DeclarationDescriptorImpl implements Class } } - public void setRootNs(@NotNull NamespaceDescriptor rootNs) { - if (this.rootNs != null) { - throw new IllegalStateException(); + public void setRootNamespace(@NotNull NamespaceDescriptor rootNs) { + if (this.rootNamepsace != null) { + throw new IllegalStateException("setRootNamespace() is called twice"); } - this.rootNs = rootNs; + this.rootNamepsace = rootNs; } - public NamespaceDescriptorImpl getRootNs() { - return (NamespaceDescriptorImpl) rootNs; + public NamespaceDescriptor getRootNamespace() { + return rootNamepsace; + } + + public NamespaceDescriptorImpl getRootNamespaceDescriptorImpl() { + return (NamespaceDescriptorImpl) rootNamepsace; } @NotNull @@ -64,7 +68,7 @@ public class ModuleDescriptor extends DeclarationDescriptorImpl implements Class if (namespaceDescriptor.getContainingDeclaration() != this) { throw new IllegalStateException(); } - setRootNs(namespaceDescriptor); + setRootNamespace(namespaceDescriptor); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/NamespaceFactoryImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/NamespaceFactoryImpl.java index 4edabe4a38e..94dc1670cc3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/NamespaceFactoryImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/NamespaceFactoryImpl.java @@ -71,11 +71,11 @@ public class NamespaceFactoryImpl implements NamespaceFactory { @NotNull RedeclarationHandler handler) { JetNamespaceHeader namespaceHeader = file.getNamespaceHeader(); - if (moduleDescriptor.getRootNs() == null) { + if (moduleDescriptor.getRootNamespaceDescriptorImpl() == null) { createRootNamespaceDescriptorIfNeeded(null, moduleDescriptor, null, handler); } - NamespaceDescriptorImpl currentOwner = moduleDescriptor.getRootNs(); + NamespaceDescriptorImpl currentOwner = moduleDescriptor.getRootNamespaceDescriptorImpl(); if (currentOwner == null) { throw new IllegalStateException("must be initialized 5 lines above"); } @@ -97,7 +97,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory { Name name; if (namespaceHeader.isRoot()) { // previous call to createRootNamespaceDescriptorIfNeeded couldn't store occurrence for current file. - namespaceDescriptor = moduleDescriptor.getRootNs(); + namespaceDescriptor = moduleDescriptor.getRootNamespaceDescriptorImpl(); storeBindingForFileAndExpression(file, null, namespaceDescriptor); } else { @@ -143,7 +143,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory { @Nullable JetReferenceExpression expression, @NotNull RedeclarationHandler handler) { FqName fqName = FqName.ROOT; - NamespaceDescriptorImpl namespaceDescriptor = owner.getRootNs(); + NamespaceDescriptorImpl namespaceDescriptor = owner.getRootNamespaceDescriptorImpl(); if (namespaceDescriptor == null) { namespaceDescriptor = createNewNamespaceDescriptor(owner, FqNameUnsafe.ROOT_NAME, expression, handler, fqName); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index 0b313ac0900..a3caea2a31b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -62,7 +62,7 @@ public class ResolveSession { DeclarationProvider provider = declarationProviderFactory.getPackageMemberDeclarationProvider(FqName.ROOT); assert provider != null : "No declaration provider for root package in " + rootDescriptor; this.rootPackage = new LazyPackageDescriptor(rootDescriptor, FqNameUnsafe.ROOT_NAME, this, provider); - rootDescriptor.setRootNs(rootPackage); + rootDescriptor.setRootNamespace(rootPackage); this.declarationProviderFactory = declarationProviderFactory; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java index ee62cc2f842..c3b519a537d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/JetStandardClasses.java @@ -51,7 +51,7 @@ public class JetStandardClasses { FAKE_STANDARD_CLASSES_MODULE, Collections.emptyList(), FqNameUnsafe.ROOT_NAME); static { - FAKE_STANDARD_CLASSES_MODULE.setRootNs(STANDARD_CLASSES_FAKE_ROOT_NS); + FAKE_STANDARD_CLASSES_MODULE.setRootNamespace(STANDARD_CLASSES_FAKE_ROOT_NS); //WritableScopeImpl writableScope = // new WritableScopeImpl(JetScope.EMPTY, FAKE_STANDARD_CLASSES_MODULE, RedeclarationHandler.DO_NOTHING); //STANDARD_CLASSES_FAKE_ROOT_NS.initialize(writableScope);