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 99b1f392d7e..68a54f1b5de 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java @@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.ModuleConfiguration; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent; import org.jetbrains.jet.lang.resolve.ImportPath; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.List; @@ -31,7 +32,8 @@ public interface ModuleDescriptor extends DeclarationDescriptor, NamespaceDescri @Nullable DeclarationDescriptor getContainingDeclaration(); - NamespaceDescriptor getRootNamespace(); + @Nullable + NamespaceDescriptor getNamespace(@NotNull FqName fqName); @NotNull ModuleConfiguration getModuleConfiguration(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptorImpl.java index ba8a6a70e67..cf9499ef815 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptorImpl.java @@ -24,6 +24,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl; import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorImpl; import org.jetbrains.jet.lang.resolve.ImportPath; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.TypeSubstitutor; @@ -63,9 +64,16 @@ public class ModuleDescriptorImpl extends DeclarationDescriptorImpl implements C return null; } + @Nullable @Override - public NamespaceDescriptor getRootNamespace() { - return rootNamepsace; + public NamespaceDescriptor getNamespace(@NotNull FqName fqName) { + if (fqName.isRoot()) return rootNamepsace; + NamespaceDescriptor current = rootNamepsace; + for (Name simpleName : fqName.pathSegments()) { + current = current.getMemberScope().getNamespace(simpleName); + if (current == null) return null; + } + return current; } @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 3bd0a1163a7..a92a4e02b6d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -35,7 +35,9 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.psi.JetFile; -import org.jetbrains.jet.lang.resolve.*; +import org.jetbrains.jet.lang.resolve.AnalyzingUtils; +import org.jetbrains.jet.lang.resolve.BindingTraceContext; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; @@ -44,7 +46,6 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.plugin.JetFileType; @@ -282,8 +283,8 @@ public class KotlinBuiltIns { @NotNull public NamespaceDescriptor getBuiltInsPackage() { - NamespaceDescriptor namespace = getBuiltInsModule().getRootNamespace().getMemberScope().getNamespace(BUILT_INS_PACKAGE_NAME); - assert namespace != null : "Built ins namespace not found: " + BUILT_INS_PACKAGE_NAME; + NamespaceDescriptor namespace = getBuiltInsModule().getNamespace(BUILT_INS_PACKAGE_FQ_NAME); + assert namespace != null : "Built ins namespace not found: " + BUILT_INS_PACKAGE_FQ_NAME; return namespace; } diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveDiagnosticsTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveDiagnosticsTest.java index 28b423680ad..273be52f1bf 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveDiagnosticsTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveDiagnosticsTest.java @@ -23,6 +23,7 @@ import org.jetbrains.jet.checkers.AbstractJetDiagnosticsTest; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; @@ -43,8 +44,8 @@ public abstract class AbstractLazyResolveDiagnosticsTest extends AbstractJetDiag ModuleDescriptor eagerModule = LazyResolveTestUtil.resolveEagerly(jetFiles, getEnvironment()); String path = JetTestUtils.getFilePath(new File(FileUtil.getRelativePath(TEST_DATA_DIR, testDataFile))); - NamespaceDescriptor expected = eagerModule.getRootNamespace(); - NamespaceDescriptor actual = lazyModule.getRootNamespace(); + NamespaceDescriptor expected = eagerModule.getNamespace(FqName.ROOT); + NamespaceDescriptor actual = lazyModule.getNamespace(FqName.ROOT); String txtFileRelativePath = path.replaceAll("\\.kt$|\\.ktscript", ".txt"); File txtFile = new File("compiler/testData/lazyResolve/diagnostics/" + txtFileRelativePath); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveNamespaceComparingTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveNamespaceComparingTest.java index 86e8a715350..e749d412e7f 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveNamespaceComparingTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyResolveNamespaceComparingTest.java @@ -25,8 +25,8 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiFactory; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; -import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.test.util.NamespaceComparator; @@ -66,9 +66,9 @@ public abstract class AbstractLazyResolveNamespaceComparingTest extends KotlinTe ModuleDescriptor eagerModule = LazyResolveTestUtil.resolveEagerly(files, getEnvironment()); ModuleDescriptor lazyModule = LazyResolveTestUtil.resolveLazily(files, getEnvironment()); - Name test = Name.identifier("test"); - NamespaceDescriptor actual = lazyModule.getRootNamespace().getMemberScope().getNamespace(test); - NamespaceDescriptor expected = eagerModule.getRootNamespace().getMemberScope().getNamespace(test); + FqName test = new FqName("test"); + NamespaceDescriptor actual = lazyModule.getNamespace(test); + NamespaceDescriptor expected = eagerModule.getNamespace(test); File serializeResultsTo = new File(FileUtil.getNameWithoutExtension(testFileName) + ".txt"); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveStdlibLoadingTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveStdlibLoadingTest.java index 7978e44601d..ad1460fb3aa 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveStdlibLoadingTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveStdlibLoadingTest.java @@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiFactory; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.test.util.NamespaceComparator; @@ -56,8 +57,8 @@ public class LazyResolveStdlibLoadingTest extends KotlinTestWithEnvironmentManag ModuleDescriptor lazyModule = LazyResolveTestUtil.resolveLazily(files, stdlibEnvironment); for (Name name : namespaceShortNames) { - NamespaceDescriptor eager = module.getRootNamespace().getMemberScope().getNamespace(name); - NamespaceDescriptor lazy = lazyModule.getRootNamespace().getMemberScope().getNamespace(name); + NamespaceDescriptor eager = module.getNamespace(FqName.topLevel(name)); + NamespaceDescriptor lazy = lazyModule.getNamespace(FqName.topLevel(name)); NamespaceComparator.compareNamespaces(eager, lazy, NamespaceComparator.RECURSIVE, null); } } diff --git a/compiler/tests/org/jetbrains/jet/types/BoundsSubstitutorTest.java b/compiler/tests/org/jetbrains/jet/types/BoundsSubstitutorTest.java index 027008fd0d3..3a2d0830896 100644 --- a/compiler/tests/org/jetbrains/jet/types/BoundsSubstitutorTest.java +++ b/compiler/tests/org/jetbrains/jet/types/BoundsSubstitutorTest.java @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.renderer.DescriptorRenderer; @@ -71,7 +72,7 @@ public class BoundsSubstitutorTest extends KotlinTestWithEnvironment { private void doTest(String text, String expected) { JetFile jetFile = JetPsiFactory.createFile(getProject(), "fun.kt", text); ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment()); - Collection functions = module.getRootNamespace().getMemberScope().getFunctions(Name.identifier("f")); + Collection functions = module.getNamespace(FqName.ROOT).getMemberScope().getFunctions(Name.identifier("f")); assert functions.size() == 1 : "Many functions defined"; FunctionDescriptor function = ContainerUtil.getFirstItem(functions); diff --git a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java index 3655ebfd286..96006d483c5 100644 --- a/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java +++ b/compiler/tests/org/jetbrains/jet/types/JetTypeCheckerTest.java @@ -40,7 +40,6 @@ import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.*; import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver; import org.jetbrains.jet.lang.types.CommonSupertypes; @@ -580,7 +579,7 @@ public class JetTypeCheckerTest extends JetLiteFixture { getEnvironment() ); - NamespaceDescriptor testData = moduleDescriptor.getRootNamespace().getMemberScope().getNamespace(Name.identifier("testData")); + NamespaceDescriptor testData = moduleDescriptor.getNamespace(new FqName("testData")); return addImports(testData.getMemberScope()); } diff --git a/compiler/tests/org/jetbrains/jet/types/TypeSubstitutorTest.java b/compiler/tests/org/jetbrains/jet/types/TypeSubstitutorTest.java index 9e0ace47cc3..762c5571ed3 100644 --- a/compiler/tests/org/jetbrains/jet/types/TypeSubstitutorTest.java +++ b/compiler/tests/org/jetbrains/jet/types/TypeSubstitutorTest.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTraceContext; import org.jetbrains.jet.lang.resolve.lazy.KotlinTestWithEnvironment; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.*; import org.jetbrains.jet.lang.types.*; @@ -82,7 +83,7 @@ public class TypeSubstitutorTest extends KotlinTestWithEnvironment { String text = FileUtil.loadFile(new File("compiler/testData/type-substitutor.kt")); JetFile jetFile = JetPsiFactory.createFile(getProject(), text); ModuleDescriptor module = LazyResolveTestUtil.resolveLazily(Collections.singletonList(jetFile), getEnvironment()); - JetScope topLevelDeclarations = module.getRootNamespace().getMemberScope(); + JetScope topLevelDeclarations = module.getNamespace(FqName.ROOT).getMemberScope(); ClassifierDescriptor contextClass = topLevelDeclarations.getClassifier(Name.identifier("___Context")); assert contextClass instanceof ClassDescriptor; WritableScopeImpl typeParameters = new WritableScopeImpl(JetScope.EMPTY, module, RedeclarationHandler.THROW_EXCEPTION,