kill JavaNamespaceDescriptor
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user