kill JavaNamespaceDescriptor

This commit is contained in:
Stepan Koltsov
2012-03-23 23:44:20 +04:00
parent 8517fe6878
commit 3c45a1d60e
13 changed files with 209 additions and 223 deletions
@@ -59,6 +59,10 @@ public class JetNamespaceHeader extends JetReferenceExpression {
return findChildByType(JetTokens.IDENTIFIER);
}
public boolean isRoot() {
return getNameIdentifier() == null;
}
@Override
public String getName() {
PsiElement nameIdentifier = getNameIdentifier();
@@ -172,7 +172,7 @@ public interface BindingContext {
WritableSlice<JetParameter, PropertyDescriptor> VALUE_PARAMETER_AS_PROPERTY = Slices.<JetParameter, PropertyDescriptor>sliceBuilder().build();
WritableSlice<FqName, ClassDescriptor> FQNAME_TO_CLASS_DESCRIPTOR = new BasicWritableSlice<FqName, ClassDescriptor>(DO_NOTHING, true);
WritableSlice<FqName, NamespaceDescriptor> FQNAME_TO_NAMESPACE_DESCRIPTOR = new BasicWritableSlice<FqName, NamespaceDescriptor>(DO_NOTHING);
WritableSlice<FqName, NamespaceDescriptor> FQNAME_TO_NAMESPACE_DESCRIPTOR = new BasicWritableSlice<FqName, NamespaceDescriptor>(Slices.ONLY_REWRITE_TO_EQUAL);
/**
* Each namespace found in src must be registered here.
@@ -16,7 +16,9 @@
package org.jetbrains.jet.lang.resolve;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptorImpl;
/**
@@ -24,5 +26,6 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptorImpl;
*/
public interface NamespaceFactory {
@NotNull
NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull FqName fqName);
NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(
@NotNull FqName fqName, @Nullable PsiElement declaration);
}
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.ModuleConfiguration;
@@ -68,7 +69,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
JetNamespaceHeader namespaceHeader = file.getNamespaceHeader();
if (moduleDescriptor.getRootNs() == null) {
createNamespaceDescriptorIfNeeded(null, moduleDescriptor, "<root>", true);
createNamespaceDescriptorIfNeeded(null, null, moduleDescriptor, "<root>", true);
}
NamespaceDescriptorParent currentOwner = moduleDescriptor.getRootNs();
@@ -79,7 +80,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
for (JetSimpleNameExpression nameExpression : namespaceHeader.getParentNamespaceNames()) {
String namespaceName = JetPsiUtil.safeName(nameExpression.getReferencedName());
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(null, currentOwner, namespaceName, false);
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(null, null, currentOwner, namespaceName, false);
trace.record(BindingContext.NAMESPACE_IS_SRC, namespaceDescriptor, true);
currentOwner = namespaceDescriptor;
@@ -93,7 +94,8 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
String name = JetPsiUtil.safeName(namespaceHeader.getName());
trace.record(RESOLUTION_SCOPE, namespaceHeader, outerScope);
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(file, currentOwner, name, false);
NamespaceDescriptorImpl namespaceDescriptor =
createNamespaceDescriptorIfNeeded(file, file, namespaceHeader.isRoot() ? moduleDescriptor : currentOwner, name, namespaceHeader.isRoot());
trace.record(BindingContext.NAMESPACE_IS_SRC, namespaceDescriptor, true);
return namespaceDescriptor;
@@ -101,17 +103,21 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
@Override
@NotNull
public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull FqName fqName) {
public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(
@NotNull FqName fqName, @Nullable PsiElement declaration) {
NamespaceDescriptorParent owner = moduleDescriptor;
for (FqName pathElement : fqName.path()) {
owner = createNamespaceDescriptorIfNeeded(null,
boolean needDeclaration = pathElement.equals(fqName);
owner = createNamespaceDescriptorIfNeeded(null, needDeclaration ? declaration : null,
owner, pathElement.isRoot() ? "<root>" : pathElement.shortName(), pathElement.isRoot());
}
return (NamespaceDescriptorImpl) owner;
}
@NotNull
public NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(@Nullable JetFile file, @NotNull NamespaceDescriptorParent owner, @NotNull String name, boolean root) {
public NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(
@Nullable JetFile file, @Nullable PsiElement declaration,
@NotNull NamespaceDescriptorParent owner, @NotNull String name, boolean root) {
FqName fqName;
NamespaceDescriptorImpl namespaceDescriptor;
@@ -120,7 +126,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
throw new IllegalStateException();
}
fqName = FqName.ROOT;
namespaceDescriptor = ((ModuleDescriptor) owner).getRootNs();
namespaceDescriptor = (NamespaceDescriptorImpl) trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, FqName.ROOT);
}
else {
FqName ownerFqName = DescriptorUtils.getFQName(owner).toSafe();
@@ -140,8 +146,8 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
namespaceDescriptor.initialize(scope);
configuration.extendNamespaceScope(trace, namespaceDescriptor, scope);
owner.addNamespace(namespaceDescriptor);
if (file != null) {
trace.record(BindingContext.NAMESPACE, file, namespaceDescriptor);
if (declaration != null) {
trace.record(BindingContext.NAMESPACE, declaration, namespaceDescriptor);
}
}
@@ -297,11 +297,11 @@ public class TopDownAnalyzer {
new TraceBasedRedeclarationHandler(trace)).setDebugName("Root scope in analyzeNamespace");
scope.changeLockLevel(WritableScope.LockLevel.BOTH);
NamespaceDescriptorImpl rootNs = namespaceFactory.createNamespaceDescriptorPathIfNeeded(FqName.ROOT);
NamespaceDescriptorImpl rootNs = namespaceFactory.createNamespaceDescriptorPathIfNeeded(FqName.ROOT, null);
// map "jet" namespace into JetStandardLibrary/Classes
// @see DefaultModuleConfiguraiton#extendNamespaceScope
namespaceFactory.createNamespaceDescriptorPathIfNeeded(JetStandardClasses.STANDARD_CLASSES_FQNAME);
namespaceFactory.createNamespaceDescriptorPathIfNeeded(JetStandardClasses.STANDARD_CLASSES_FQNAME, null);
// Import a scope that contains all top-level namespaces that come from dependencies
// This makes the namespaces visible at all, does not import themselves