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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user