Change object resolution strategy in TypeHierarchyResolver
Instead of creating a synthetic property descriptor for objects, create a synthetic class object in it and make it inherit from the object. This way all of object's members will be accessible via its class object
This commit is contained in:
+4
@@ -77,6 +77,10 @@ public abstract class AbstractClassDescriptor implements ClassDescriptor {
|
||||
@Nullable
|
||||
@Override
|
||||
public JetType getClassObjectType() {
|
||||
if (getKind() == ClassKind.OBJECT) {
|
||||
return getDefaultType();
|
||||
}
|
||||
|
||||
ClassDescriptor classObject = getClassObjectDescriptor();
|
||||
return classObject == null ? null : classObject.getDefaultType();
|
||||
}
|
||||
|
||||
+1
-1
@@ -221,7 +221,7 @@ public abstract class MutableClassDescriptorLite extends ClassDescriptorBase {
|
||||
|
||||
@Override
|
||||
public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) {
|
||||
if (getKind().isSingleton() || isInner()) {
|
||||
if (getKind() == ClassKind.CLASS_OBJECT || isInner()) {
|
||||
return ClassObjectStatus.NOT_ALLOWED;
|
||||
}
|
||||
|
||||
|
||||
+3
-6
@@ -20,10 +20,7 @@ import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Collections2;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.LabelName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -86,7 +83,7 @@ public class InnerClassesScopeWrapper extends AbstractScopeAdapter {
|
||||
return "Classes from " + actualScope;
|
||||
}
|
||||
|
||||
private static boolean isClass(DeclarationDescriptor descriptor) {
|
||||
return descriptor instanceof ClassDescriptor && !((ClassDescriptor) descriptor).getKind().isSingleton();
|
||||
private static boolean isClass(@Nullable DeclarationDescriptor descriptor) {
|
||||
return descriptor instanceof ClassDescriptor && ((ClassDescriptor) descriptor).getKind() != ClassKind.ENUM_ENTRY;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.name.LabelName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||
@@ -310,10 +309,6 @@ public class WritableScopeImpl extends WritableScopeWithImports {
|
||||
public void addClassifierDescriptor(@NotNull ClassifierDescriptor classDescriptor) {
|
||||
checkMayWrite();
|
||||
|
||||
if (DescriptorUtils.isSingleton(classDescriptor)) {
|
||||
throw new IllegalStateException("must not be object: " + classDescriptor);
|
||||
}
|
||||
|
||||
addClassifierAlias(classDescriptor.getName(), classDescriptor);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user