Refine getClassObjectDescriptor()'s type
This reverts commit db3e5ed678.
This commit is contained in:
+5
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors;
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.annotations.ReadOnly;
|
import org.jetbrains.annotations.ReadOnly;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
|
|
||||||
@@ -35,6 +36,10 @@ public interface ClassDescriptorWithResolutionScopes extends ClassDescriptor {
|
|||||||
@NotNull
|
@NotNull
|
||||||
JetScope getScopeForMemberLookup();
|
JetScope getScopeForMemberLookup();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
ClassDescriptorWithResolutionScopes getClassObjectDescriptor();
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@ReadOnly
|
@ReadOnly
|
||||||
Collection<CallableMemberDescriptor> getDeclaredCallableMembers();
|
Collection<CallableMemberDescriptor> getDeclaredCallableMembers();
|
||||||
|
|||||||
+5
-5
@@ -44,7 +44,7 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
|
|||||||
private List<TypeParameterDescriptor> typeParameters;
|
private List<TypeParameterDescriptor> typeParameters;
|
||||||
private Collection<JetType> supertypes = new ArrayList<JetType>();
|
private Collection<JetType> supertypes = new ArrayList<JetType>();
|
||||||
|
|
||||||
private ClassDescriptor classObjectDescriptor;
|
private MutableClassDescriptor classObjectDescriptor;
|
||||||
|
|
||||||
private final Set<ConstructorDescriptor> constructors = Sets.newLinkedHashSet();
|
private final Set<ConstructorDescriptor> constructors = Sets.newLinkedHashSet();
|
||||||
private ConstructorDescriptor primaryConstructor;
|
private ConstructorDescriptor primaryConstructor;
|
||||||
@@ -90,7 +90,7 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
|
|||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor getClassObjectDescriptor() {
|
public MutableClassDescriptor getClassObjectDescriptor() {
|
||||||
return classObjectDescriptor;
|
return classObjectDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,8 +304,8 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
|
|||||||
|
|
||||||
public void lockScopes() {
|
public void lockScopes() {
|
||||||
getScopeForMemberLookupAsWritableScope().changeLockLevel(WritableScope.LockLevel.READING);
|
getScopeForMemberLookupAsWritableScope().changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
if (classObjectDescriptor instanceof MutableClassDescriptor) {
|
if (classObjectDescriptor != null) {
|
||||||
((MutableClassDescriptor) classObjectDescriptor).lockScopes();
|
classObjectDescriptor.lockScopes();
|
||||||
}
|
}
|
||||||
scopeForSupertypeResolution.changeLockLevel(WritableScope.LockLevel.READING);
|
scopeForSupertypeResolution.changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
scopeForMemberResolution.changeLockLevel(WritableScope.LockLevel.READING);
|
scopeForMemberResolution.changeLockLevel(WritableScope.LockLevel.READING);
|
||||||
@@ -342,7 +342,7 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull ClassDescriptor classObjectDescriptor) {
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
||||||
if (getKind() == ClassKind.CLASS_OBJECT || isInner()) {
|
if (getKind() == ClassKind.CLASS_OBJECT || isInner()) {
|
||||||
return ClassObjectStatus.NOT_ALLOWED;
|
return ClassObjectStatus.NOT_ALLOWED;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors.impl;
|
package org.jetbrains.jet.lang.descriptors.impl;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
@@ -38,5 +37,5 @@ public interface PackageLikeBuilder {
|
|||||||
NOT_ALLOWED
|
NOT_ALLOWED
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassObjectStatus setClassObjectDescriptor(@NotNull ClassDescriptor classObjectDescriptor);
|
ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors.impl;
|
package org.jetbrains.jet.lang.descriptors.impl;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
@@ -45,7 +44,7 @@ public class PackageLikeBuilderDummy implements PackageLikeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull ClassDescriptor classObjectDescriptor) {
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.jet.lang.descriptors.impl;
|
package org.jetbrains.jet.lang.descriptors.impl;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor;
|
||||||
@@ -57,7 +56,7 @@ public class ScopeBasedPackageLikeBuilder implements PackageLikeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull ClassDescriptor classObjectDescriptor) {
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
||||||
throw new IllegalStateException("Must be guaranteed not to happen by the parser");
|
throw new IllegalStateException("Must be guaranteed not to happen by the parser");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -347,10 +347,9 @@ public class DeclarationResolver {
|
|||||||
|
|
||||||
Collection<DeclarationDescriptor> allDescriptors = classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors();
|
Collection<DeclarationDescriptor> allDescriptors = classDescriptor.getScopeForMemberLookup().getOwnDeclaredDescriptors();
|
||||||
|
|
||||||
ClassDescriptor classObj = classDescriptor.getClassObjectDescriptor();
|
ClassDescriptorWithResolutionScopes classObj = classDescriptor.getClassObjectDescriptor();
|
||||||
if (classObj instanceof ClassDescriptorWithResolutionScopes) {
|
if (classObj != null) {
|
||||||
Collection<DeclarationDescriptor> classObjDescriptors =
|
Collection<DeclarationDescriptor> classObjDescriptors = classObj.getScopeForMemberLookup().getOwnDeclaredDescriptors();
|
||||||
((ClassDescriptorWithResolutionScopes) classObj).getScopeForMemberLookup().getOwnDeclaredDescriptors();
|
|
||||||
if (!classObjDescriptors.isEmpty()) {
|
if (!classObjDescriptors.isEmpty()) {
|
||||||
allDescriptors = Lists.newArrayList(allDescriptors);
|
allDescriptors = Lists.newArrayList(allDescriptors);
|
||||||
allDescriptors.addAll(classObjDescriptors);
|
allDescriptors.addAll(classObjDescriptors);
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ public class OverrideResolver {
|
|||||||
if (ourClasses.contains(klass)) {
|
if (ourClasses.contains(klass)) {
|
||||||
generateOverridesAndDelegationInAClass(klass, processed, ourClasses);
|
generateOverridesAndDelegationInAClass(klass, processed, ourClasses);
|
||||||
|
|
||||||
ClassDescriptor classObject = klass.getClassObjectDescriptor();
|
MutableClassDescriptor classObject = klass.getClassObjectDescriptor();
|
||||||
if (classObject instanceof MutableClassDescriptor) {
|
if (classObject != null) {
|
||||||
generateOverridesAndDelegationInAClass((MutableClassDescriptor) classObject, processed, ourClasses);
|
generateOverridesAndDelegationInAClass(classObject, processed, ourClasses);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ public class TopDownAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull ClassDescriptor classObjectDescriptor) {
|
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptor classObjectDescriptor) {
|
||||||
return ClassObjectStatus.NOT_ALLOWED;
|
return ClassObjectStatus.NOT_ALLOWED;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ public class TypeHierarchyResolver {
|
|||||||
|
|
||||||
ClassKind kind = descriptor.getKind();
|
ClassKind kind = descriptor.getKind();
|
||||||
if (kind == ClassKind.ENUM_ENTRY || kind == ClassKind.OBJECT) {
|
if (kind == ClassKind.ENUM_ENTRY || kind == ClassKind.OBJECT) {
|
||||||
MutableClassDescriptor classObject = (MutableClassDescriptor) descriptor.getClassObjectDescriptor();
|
MutableClassDescriptor classObject = descriptor.getClassObjectDescriptor();
|
||||||
assert classObject != null : "Enum entries and named objects should have class objects: " + classOrObject.getText();
|
assert classObject != null : "Enum entries and named objects should have class objects: " + classOrObject.getText();
|
||||||
|
|
||||||
// This is a clever hack: each enum entry and object declaration (i.e. singleton) has a synthetic class object.
|
// This is a clever hack: each enum entry and object declaration (i.e. singleton) has a synthetic class object.
|
||||||
|
|||||||
+5
-5
@@ -83,7 +83,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
private final boolean isInner;
|
private final boolean isInner;
|
||||||
|
|
||||||
private final Annotations annotations;
|
private final Annotations annotations;
|
||||||
private final NullableLazyValue<ClassDescriptor> classObjectDescriptor;
|
private final NullableLazyValue<LazyClassDescriptor> classObjectDescriptor;
|
||||||
private final MemoizedFunctionToNotNull<JetClassObject, ClassDescriptor> extraClassObjectDescriptors;
|
private final MemoizedFunctionToNotNull<JetClassObject, ClassDescriptor> extraClassObjectDescriptors;
|
||||||
|
|
||||||
private final LazyClassMemberScope unsubstitutedMemberScope;
|
private final LazyClassMemberScope unsubstitutedMemberScope;
|
||||||
@@ -158,9 +158,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
this.annotations = Annotations.EMPTY;
|
this.annotations = Annotations.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.classObjectDescriptor = storageManager.createNullableLazyValue(new Function0<ClassDescriptor>() {
|
this.classObjectDescriptor = storageManager.createNullableLazyValue(new Function0<LazyClassDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor invoke() {
|
public LazyClassDescriptor invoke() {
|
||||||
return computeClassObjectDescriptor(declarationProvider.getOwnerInfo().getClassObject());
|
return computeClassObjectDescriptor(declarationProvider.getOwnerInfo().getClassObject());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -324,7 +324,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor getClassObjectDescriptor() {
|
public LazyClassDescriptor getClassObjectDescriptor() {
|
||||||
return classObjectDescriptor.invoke();
|
return classObjectDescriptor.invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -351,7 +351,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private ClassDescriptor computeClassObjectDescriptor(@Nullable JetClassObject classObject) {
|
private LazyClassDescriptor computeClassObjectDescriptor(@Nullable JetClassObject classObject) {
|
||||||
JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject);
|
JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject);
|
||||||
if (classObjectInfo != null) {
|
if (classObjectInfo != null) {
|
||||||
return new LazyClassDescriptor(resolveSession, this, getClassObjectName(getName()), classObjectInfo);
|
return new LazyClassDescriptor(resolveSession, this, getClassObjectName(getName()), classObjectInfo);
|
||||||
|
|||||||
Reference in New Issue
Block a user