From 240f477fffa208d365290d2c5e58d1019b1ca5d3 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 11 May 2012 21:38:14 +0400 Subject: [PATCH] Introduced FakeJetNamespaceDescriptor, which supports member scope substitution. --- .../StandardLibraryReferenceResolver.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java index 570da1c1692..3deec13bd1f 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java @@ -71,16 +71,13 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { } BindingTraceContext context = new BindingTraceContext(); - NamespaceDescriptorImpl fakeRootNamespace = new NamespaceDescriptorImpl(new ModuleDescriptor(""), - Collections.emptyList(), ""); - NamespaceDescriptorImpl jetNamespace = new NamespaceDescriptorImpl(fakeRootNamespace, - Collections.emptyList(), "jet"); + FakeJetNamespaceDescriptor jetNamespace = new FakeJetNamespaceDescriptor(); context.record(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, new FqName("jet"), jetNamespace); WritableScopeImpl scope = new WritableScopeImpl(JetScope.EMPTY, jetNamespace, RedeclarationHandler.THROW_EXCEPTION) .setDebugName("Builtin classes scope"); scope.changeLockLevel(WritableScope.LockLevel.BOTH); - jetNamespace.initialize(scope); + jetNamespace.setMemberScope(scope); TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet.src")); @@ -89,7 +86,7 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { scope = new WritableScopeImpl(scope, jetNamespace, RedeclarationHandler.THROW_EXCEPTION).setDebugName("Builtin classes scope #2"); scope.changeLockLevel(WritableScope.LockLevel.BOTH); scope.addClassifierAlias("Unit", tuple0); - jetNamespace.initialize(scope); + jetNamespace.setMemberScope(scope); TopDownAnalyzer.processStandardLibraryNamespace(myProject, context, scope, jetNamespace, getJetFiles("jet")); AnalyzingUtils.throwExceptionOnErrors(context.getBindingContext()); @@ -165,4 +162,24 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { } return null; } + + private static class FakeJetNamespaceDescriptor extends NamespaceDescriptorImpl { + private WritableScope memberScope; + + private FakeJetNamespaceDescriptor() { + super(new NamespaceDescriptorImpl(new ModuleDescriptor(""), + Collections.emptyList(), + ""), Collections.emptyList(), "jet"); + } + + void setMemberScope(WritableScope memberScope) { + this.memberScope = memberScope; + } + + @NotNull + @Override + public WritableScope getMemberScope() { + return memberScope; + } + } }