Temporarily revert "kill JavaNamespaceDescriptor"

This reverts commit 3c45a1d60e.

This commit breaks compilation of jdk-headers. Explanation:

1. TopDownAnalyzer creates namespace java.util from sources
2. TopDownAnalyzer creates class Map in java.util
3. TopDownAnalyzer processes import java.util.Map.Entry
4. JavaDescriptorResolver resolves namespace java.util.Map
5. java.util.Map namespace is added to java.util namespace
6. redeclaration handler of namespace java.util crashes on Map
This commit is contained in:
Stepan Koltsov
2012-03-24 02:17:47 +04:00
parent 41b8706708
commit 7836e44e70
13 changed files with 225 additions and 211 deletions
@@ -59,10 +59,6 @@ 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>(Slices.ONLY_REWRITE_TO_EQUAL);
WritableSlice<FqName, NamespaceDescriptor> FQNAME_TO_NAMESPACE_DESCRIPTOR = new BasicWritableSlice<FqName, NamespaceDescriptor>(DO_NOTHING);
/**
* Each namespace found in src must be registered here.
@@ -16,9 +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.descriptors.NamespaceDescriptorImpl;
/**
@@ -26,6 +24,5 @@ import org.jetbrains.jet.lang.descriptors.NamespaceDescriptorImpl;
*/
public interface NamespaceFactory {
@NotNull
NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(
@NotNull FqName fqName, @Nullable PsiElement declaration);
NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull FqName fqName);
}
@@ -16,7 +16,6 @@
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;
@@ -69,7 +68,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
JetNamespaceHeader namespaceHeader = file.getNamespaceHeader();
if (moduleDescriptor.getRootNs() == null) {
createNamespaceDescriptorIfNeeded(null, null, moduleDescriptor, "<root>", true);
createNamespaceDescriptorIfNeeded(null, moduleDescriptor, "<root>", true);
}
NamespaceDescriptorParent currentOwner = moduleDescriptor.getRootNs();
@@ -80,7 +79,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
for (JetSimpleNameExpression nameExpression : namespaceHeader.getParentNamespaceNames()) {
String namespaceName = JetPsiUtil.safeName(nameExpression.getReferencedName());
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(null, null, currentOwner, namespaceName, false);
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(null, currentOwner, namespaceName, false);
trace.record(BindingContext.NAMESPACE_IS_SRC, namespaceDescriptor, true);
currentOwner = namespaceDescriptor;
@@ -94,8 +93,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
String name = JetPsiUtil.safeName(namespaceHeader.getName());
trace.record(RESOLUTION_SCOPE, namespaceHeader, outerScope);
NamespaceDescriptorImpl namespaceDescriptor =
createNamespaceDescriptorIfNeeded(file, file, namespaceHeader.isRoot() ? moduleDescriptor : currentOwner, name, namespaceHeader.isRoot());
NamespaceDescriptorImpl namespaceDescriptor = createNamespaceDescriptorIfNeeded(file, currentOwner, name, false);
trace.record(BindingContext.NAMESPACE_IS_SRC, namespaceDescriptor, true);
return namespaceDescriptor;
@@ -103,21 +101,17 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
@Override
@NotNull
public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(
@NotNull FqName fqName, @Nullable PsiElement declaration) {
public NamespaceDescriptorImpl createNamespaceDescriptorPathIfNeeded(@NotNull FqName fqName) {
NamespaceDescriptorParent owner = moduleDescriptor;
for (FqName pathElement : fqName.path()) {
boolean needDeclaration = pathElement.equals(fqName);
owner = createNamespaceDescriptorIfNeeded(null, needDeclaration ? declaration : null,
owner = createNamespaceDescriptorIfNeeded(null,
owner, pathElement.isRoot() ? "<root>" : pathElement.shortName(), pathElement.isRoot());
}
return (NamespaceDescriptorImpl) owner;
}
@NotNull
public NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(
@Nullable JetFile file, @Nullable PsiElement declaration,
@NotNull NamespaceDescriptorParent owner, @NotNull String name, boolean root) {
public NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(@Nullable JetFile file, @NotNull NamespaceDescriptorParent owner, @NotNull String name, boolean root) {
FqName fqName;
NamespaceDescriptorImpl namespaceDescriptor;
@@ -126,7 +120,7 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
throw new IllegalStateException();
}
fqName = FqName.ROOT;
namespaceDescriptor = (NamespaceDescriptorImpl) trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, FqName.ROOT);
namespaceDescriptor = ((ModuleDescriptor) owner).getRootNs();
}
else {
FqName ownerFqName = DescriptorUtils.getFQName(owner).toSafe();
@@ -146,8 +140,8 @@ public class NamespaceFactoryImpl implements NamespaceFactory {
namespaceDescriptor.initialize(scope);
configuration.extendNamespaceScope(trace, namespaceDescriptor, scope);
owner.addNamespace(namespaceDescriptor);
if (declaration != null) {
trace.record(BindingContext.NAMESPACE, declaration, namespaceDescriptor);
if (file != null) {
trace.record(BindingContext.NAMESPACE, file, 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, null);
NamespaceDescriptorImpl rootNs = namespaceFactory.createNamespaceDescriptorPathIfNeeded(FqName.ROOT);
// map "jet" namespace into JetStandardLibrary/Classes
// @see DefaultModuleConfiguraiton#extendNamespaceScope
namespaceFactory.createNamespaceDescriptorPathIfNeeded(JetStandardClasses.STANDARD_CLASSES_FQNAME, null);
namespaceFactory.createNamespaceDescriptorPathIfNeeded(JetStandardClasses.STANDARD_CLASSES_FQNAME);
// Import a scope that contains all top-level namespaces that come from dependencies
// This makes the namespaces visible at all, does not import themselves