diff --git a/compiler/builtins-serializer/src/BuiltInsSerializer.kt b/compiler/builtins-serializer/src/BuiltInsSerializer.kt index 642dfd3456f..f4b1aec38b5 100644 --- a/compiler/builtins-serializer/src/BuiltInsSerializer.kt +++ b/compiler/builtins-serializer/src/BuiltInsSerializer.kt @@ -43,6 +43,7 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolverUtil import org.jetbrains.jet.lang.descriptors.ModuleDescriptor import org.jetbrains.jet.lang.resolve.name.FqName import com.intellij.util.containers.ContainerUtil +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns public class BuiltInsSerializer(val out: PrintStream?) { private var totalSize = 0 @@ -96,11 +97,8 @@ public class BuiltInsSerializer(val out: PrintStream?) { // DescriptorValidator.validate(packageView) val serializer = DescriptorSerializer(object : SerializerExtension() { - private val set = setOf("Any", "Nothing") - - override fun hasSupertypes(descriptor: ClassDescriptor): Boolean { - return descriptor.getName().asString() !in set - } + override fun hasSupertypes(descriptor: ClassDescriptor): Boolean = + !KotlinBuiltIns.isSpecialClassWithNoSupertypes(descriptor) }) val classNames = ArrayList() diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index 352fbc001e9..d5bf2ed7ef8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -16,8 +16,6 @@ package org.jetbrains.jet.lang.resolve.lazy; -import com.google.common.base.Predicate; -import com.google.common.base.Predicates; import com.google.common.collect.Lists; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; @@ -37,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.PackageMemberDeclaration import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyPackageDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; -import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -70,8 +67,6 @@ public class ResolveSession implements KotlinCodeAnalyzer { private final BindingTrace trace; private final DeclarationProviderFactory declarationProviderFactory; - private final Predicate specialClasses; - private final Function classifierAliases; private final MemoizedFunctionToNullable packages; @@ -131,7 +126,6 @@ public class ResolveSession implements KotlinCodeAnalyzer { this.module = rootDescriptor; this.classifierAliases = NO_ALIASES; - this.specialClasses = Predicates.alwaysFalse(); this.packages = storageManager.createMemoizedFunctionWithNullableValues(new MemoizedFunctionToNullable() { @Nullable @@ -187,10 +181,6 @@ public class ResolveSession implements KotlinCodeAnalyzer { return new LazyPackageDescriptor(module, fqName, this, provider); } - public boolean isClassSpecial(@NotNull FqNameUnsafe fqName) { - return specialClasses.apply(fqName); - } - @Override public ModuleDescriptor getModuleDescriptor() { return module; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index dfb15ae442a..f94107a7b79 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -364,7 +364,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti new Function0>() { @Override public Collection invoke() { - if (resolveSession.isClassSpecial(DescriptorUtils.getFqName(LazyClassDescriptor.this))) { + if (KotlinBuiltIns.isSpecialClassWithNoSupertypes(LazyClassDescriptor.this)) { return Collections.emptyList(); } diff --git a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java index bec35a77670..0af2eeccb25 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java @@ -235,8 +235,7 @@ public class DescriptorValidator { Collection supertypes = descriptor.getTypeConstructor().getSupertypes(); if (supertypes.isEmpty() && descriptor.getKind() != ClassKind.TRAIT - && KotlinBuiltIns.getInstance().getAny() != descriptor - && KotlinBuiltIns.getInstance().getNothing() != descriptor) { + && !KotlinBuiltIns.isSpecialClassWithNoSupertypes(descriptor)) { report(collector, descriptor, "No supertypes for non-trait"); } validateTypes(descriptor, collector, supertypes); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java index 39f7516e540..a72af73e1f5 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/KotlinBuiltIns.java @@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.*; @@ -893,6 +894,12 @@ public class KotlinBuiltIns { // Recognized & special + public static boolean isSpecialClassWithNoSupertypes(@NotNull ClassDescriptor descriptor) { + FqNameUnsafe fqName = DescriptorUtils.getFqName(descriptor); + return BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("Any")).toUnsafe().equals(fqName) || + BUILT_INS_PACKAGE_FQ_NAME.child(Name.identifier("Nothing")).toUnsafe().equals(fqName); + } + public boolean isNothing(@NotNull JetType type) { return isNothingOrNullableNothing(type) && !type.isNullable();