more root ns
This commit is contained in:
+5
@@ -44,6 +44,11 @@ public abstract class AbstractNamespaceDescriptorImpl extends DeclarationDescrip
|
|||||||
return (NamespaceDescriptorParent) super.getContainingDeclaration();
|
return (NamespaceDescriptorParent) super.getContainingDeclaration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
||||||
|
throw new IllegalStateException("immutable");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public NamespaceType getNamespaceType() {
|
public NamespaceType getNamespaceType() {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import java.util.Collections;
|
|||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class ModuleDescriptor extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, NamespaceDescriptorParent, NamespaceLikeBuilder {
|
public class ModuleDescriptor extends DeclarationDescriptorImpl implements ClassOrNamespaceDescriptor, NamespaceDescriptorParent {
|
||||||
private NamespaceDescriptor rootNs;
|
private NamespaceDescriptor rootNs;
|
||||||
|
|
||||||
public ModuleDescriptor(String name) {
|
public ModuleDescriptor(String name) {
|
||||||
@@ -55,17 +55,6 @@ public class ModuleDescriptor extends DeclarationDescriptorImpl implements Class
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public DeclarationDescriptor getOwnerForChildren() {
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NamespaceDescriptorImpl getNamespace(String name) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
||||||
if (namespaceDescriptor.getContainingDeclaration() != this) {
|
if (namespaceDescriptor.getContainingDeclaration() != this) {
|
||||||
@@ -74,28 +63,4 @@ public class ModuleDescriptor extends DeclarationDescriptorImpl implements Class
|
|||||||
setRootNs(namespaceDescriptor);
|
setRootNs(namespaceDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
-10
@@ -261,16 +261,6 @@ public class MutableClassDescriptorLite extends MutableDeclarationDescriptor imp
|
|||||||
getScopeForMemberLookupAsWritableScope().addFunctionDescriptor(functionDescriptor);
|
getScopeForMemberLookupAsWritableScope().addFunctionDescriptor(functionDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
|
||||||
throw new UnsupportedOperationException("Classes do not define namespaces");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NamespaceDescriptorImpl getNamespace(String name) {
|
|
||||||
throw new UnsupportedOperationException("Classes do not define namespaces");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
||||||
getScopeForMemberLookupAsWritableScope().addClassifierDescriptor(classDescriptor);
|
getScopeForMemberLookupAsWritableScope().addClassifierDescriptor(classDescriptor);
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ public class NamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl imp
|
|||||||
return memberScope;
|
return memberScope;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public NamespaceDescriptorImpl getNamespace(String name) {
|
public NamespaceDescriptorImpl getNamespace(String name) {
|
||||||
return (NamespaceDescriptorImpl) memberScope.getDeclaredNamespace(name);
|
return (NamespaceDescriptorImpl) memberScope.getDeclaredNamespace(name);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -16,8 +16,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.descriptors;
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Stepan Koltsov
|
* @author Stepan Koltsov
|
||||||
*/
|
*/
|
||||||
public interface NamespaceDescriptorParent extends DeclarationDescriptor {
|
public interface NamespaceDescriptorParent extends DeclarationDescriptor {
|
||||||
|
|
||||||
|
void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,11 +31,6 @@ public interface NamespaceLikeBuilder {
|
|||||||
@NotNull
|
@NotNull
|
||||||
DeclarationDescriptor getOwnerForChildren();
|
DeclarationDescriptor getOwnerForChildren();
|
||||||
|
|
||||||
@Nullable
|
|
||||||
NamespaceDescriptorImpl getNamespace(String name);
|
|
||||||
|
|
||||||
void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor);
|
|
||||||
|
|
||||||
void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor);
|
void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor);
|
||||||
|
|
||||||
void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor);
|
void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor);
|
||||||
|
|||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2012 JetBrains s.r.o.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stepan Koltsov
|
||||||
|
*/
|
||||||
|
public class NamespaceLikeBuilderDummy implements NamespaceLikeBuilder {
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public DeclarationDescriptor getOwnerForChildren() {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -135,51 +135,10 @@ public class AnalyzingUtils {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// dummy builder is used because "root" is module descriptor,
|
||||||
|
// namespaces added to module explicitly in
|
||||||
TopDownAnalyzer.process(project, bindingTraceContext, scope,
|
TopDownAnalyzer.process(project, bindingTraceContext, scope,
|
||||||
new NamespaceLikeBuilder() {
|
new NamespaceLikeBuilderDummy(), owner, files, filesToAnalyzeCompletely, flowDataTraceFactory, configuration);
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public DeclarationDescriptor getOwnerForChildren() {
|
|
||||||
return owner;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public NamespaceDescriptorImpl getNamespace(String name) {
|
|
||||||
return (NamespaceDescriptorImpl) scope.getDeclaredNamespace(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
|
||||||
scope.addNamespace(namespaceDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
|
||||||
throw new IllegalStateException("A class shouldn't sit right under a module: " + classDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor) {
|
|
||||||
throw new IllegalStateException("An object shouldn't sit right under a module: " + objectDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) {
|
|
||||||
throw new IllegalStateException("A function shouldn't sit right under a module: " + functionDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) {
|
|
||||||
throw new IllegalStateException("A property shouldn't sit right under a module: " + propertyDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) {
|
|
||||||
throw new IllegalStateException("Must be guaranteed not to happen by the parser");
|
|
||||||
}
|
|
||||||
}, owner,
|
|
||||||
files, filesToAnalyzeCompletely, flowDataTraceFactory, configuration);
|
|
||||||
|
|
||||||
return bindingTraceContext.getBindingContext();
|
return bindingTraceContext.getBindingContext();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -186,16 +186,6 @@ public class TopDownAnalyzer {
|
|||||||
return containingDeclaration;
|
return containingDeclaration;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public NamespaceDescriptorImpl getNamespace(String name) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) {
|
||||||
|
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ public class TypeHierarchyResolver {
|
|||||||
createNamespaceDescriptorIfNeeded(null, moduleDescriptor, "<root>", true);
|
createNamespaceDescriptorIfNeeded(null, moduleDescriptor, "<root>", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
NamespaceLikeBuilder currentOwner = moduleDescriptor.getRootNs();
|
NamespaceDescriptorParent currentOwner = moduleDescriptor.getRootNs();
|
||||||
if (currentOwner == null) {
|
if (currentOwner == null) {
|
||||||
throw new IllegalStateException("must be initialized 5 lines above");
|
throw new IllegalStateException("must be initialized 5 lines above");
|
||||||
}
|
}
|
||||||
@@ -250,7 +250,7 @@ public class TypeHierarchyResolver {
|
|||||||
|
|
||||||
currentOwner = namespaceDescriptor;
|
currentOwner = namespaceDescriptor;
|
||||||
|
|
||||||
context.getTrace().record(REFERENCE_TARGET, nameExpression, currentOwner.getOwnerForChildren());
|
context.getTrace().record(REFERENCE_TARGET, nameExpression, currentOwner);
|
||||||
context.getTrace().record(RESOLUTION_SCOPE, nameExpression, outerScope);
|
context.getTrace().record(RESOLUTION_SCOPE, nameExpression, outerScope);
|
||||||
|
|
||||||
outerScope = namespaceDescriptor.getMemberScope();
|
outerScope = namespaceDescriptor.getMemberScope();
|
||||||
@@ -263,26 +263,26 @@ public class TypeHierarchyResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(@Nullable JetFile file, @NotNull NamespaceLikeBuilder owner, @NotNull String name, boolean root) {
|
private NamespaceDescriptorImpl createNamespaceDescriptorIfNeeded(@Nullable JetFile file, @NotNull NamespaceDescriptorParent owner, @NotNull String name, boolean root) {
|
||||||
FqName ownerFqName = DescriptorUtils.getFQName(owner.getOwnerForChildren());
|
|
||||||
|
|
||||||
FqName fqName;
|
FqName fqName;
|
||||||
NamespaceDescriptorImpl namespaceDescriptor;
|
NamespaceDescriptorImpl namespaceDescriptor;
|
||||||
if (root) {
|
if (root) {
|
||||||
if (!ownerFqName.equals(FqName.ROOT) || !(owner instanceof ModuleDescriptor)) {
|
if (!(owner instanceof ModuleDescriptor)) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
fqName = FqName.ROOT;
|
fqName = FqName.ROOT;
|
||||||
namespaceDescriptor = ((ModuleDescriptor) owner).getRootNs();
|
namespaceDescriptor = ((ModuleDescriptor) owner).getRootNs();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
FqName ownerFqName = DescriptorUtils.getFQName(owner);
|
||||||
fqName = ownerFqName.child(name);
|
fqName = ownerFqName.child(name);
|
||||||
namespaceDescriptor = owner.getNamespace(name);
|
namespaceDescriptor = ((NamespaceDescriptorImpl) owner).getNamespace(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (namespaceDescriptor == null) {
|
if (namespaceDescriptor == null) {
|
||||||
namespaceDescriptor = new NamespaceDescriptorImpl(
|
namespaceDescriptor = new NamespaceDescriptorImpl(
|
||||||
(NamespaceDescriptorParent) owner.getOwnerForChildren(),
|
owner,
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO: annotations
|
Collections.<AnnotationDescriptor>emptyList(), // TODO: annotations
|
||||||
name
|
name
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user