From 9471f33c38513d41c3e7a8112bc357be12110215 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 19 Jun 2017 19:12:31 +0300 Subject: [PATCH] Refactor getDefaultSupertype, drop obsolete diagnostic --- .../jetbrains/kotlin/diagnostics/Errors.java | 2 -- .../rendering/DefaultErrorMessages.java | 1 - .../kotlin/resolve/DescriptorResolver.java | 25 ++++++------------- .../tests/enum/typeParametersInEnum.kt | 2 +- 4 files changed, 8 insertions(+), 22 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 19f4cc86006..70c1ae5ab7a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -255,8 +255,6 @@ public interface Errors { DiagnosticFactory0 SUPERTYPE_IS_EXTENSION_FUNCTION_TYPE = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SUPERTYPE_IS_SUSPEND_FUNCTION_TYPE = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 NO_GENERICS_IN_SUPERTYPE_SPECIFIER = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 MANY_CLASSES_IN_SUPERTYPE_LIST = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SUPERTYPE_APPEARS_TWICE = DiagnosticFactory0.create(ERROR); DiagnosticFactory3> diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 1172cef0c06..02506b65595 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -405,7 +405,6 @@ public class DefaultErrorMessages { MAP.put(NO_COMPANION_OBJECT, "Please specify constructor invocation; classifier ''{0}'' does not have a companion object", NAME); MAP.put(TYPE_PARAMETER_IS_NOT_AN_EXPRESSION, "Type parameter ''{0}'' is not an expression", NAME); MAP.put(TYPE_PARAMETER_ON_LHS_OF_DOT, "Type parameter ''{0}'' cannot have or inherit a companion object, so it cannot be on the left hand side of dot", NAME); - MAP.put(NO_GENERICS_IN_SUPERTYPE_SPECIFIER, "Generic arguments of the base type must be specified"); MAP.put(NESTED_CLASS_ACCESSED_VIA_INSTANCE_REFERENCE, "Nested {0} accessed via instance reference", RENDER_CLASS_OR_OBJECT_NAME); MAP.put(NESTED_CLASS_SHOULD_BE_QUALIFIED, "Nested {0} should be qualified as ''{1}''", RENDER_CLASS_OR_OBJECT_NAME, TO_STRING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index df86762db8e..a0b41b54549 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -144,9 +144,7 @@ public class DescriptorResolver { syntheticResolveExtension.addSyntheticSupertypes(classDescriptor, supertypes); if (supertypes.isEmpty()) { - KotlinType defaultSupertype = correspondingClassOrObject == null ? builtIns.getAnyType() : - getDefaultSupertype(correspondingClassOrObject, trace, classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS); - addValidSupertype(supertypes, defaultSupertype); + addValidSupertype(supertypes, getDefaultSupertype(classDescriptor)); } return supertypes; @@ -168,27 +166,18 @@ public class DescriptorResolver { return false; } - private KotlinType getDefaultSupertype(KtPureClassOrObject ktClass, BindingTrace trace, boolean isAnnotation) { - // TODO : beautify - if (ktClass instanceof KtEnumEntry) { - KtEnumEntry enumEntry = (KtEnumEntry) ktClass; - KtClassOrObject parent = KtStubbedPsiUtil.getContainingDeclaration(enumEntry, KtClassOrObject.class); - ClassDescriptor parentDescriptor = trace.getBindingContext().get(BindingContext.CLASS, parent); - if (parentDescriptor.getTypeConstructor().getParameters().isEmpty()) { - return parentDescriptor.getDefaultType(); - } - else { - trace.report(NO_GENERICS_IN_SUPERTYPE_SPECIFIER.on(enumEntry.getNameIdentifier())); - return ErrorUtils.createErrorType("Supertype not specified"); - } + @NotNull + private KotlinType getDefaultSupertype(@NotNull ClassDescriptor classDescriptor) { + if (classDescriptor.getKind() == ClassKind.ENUM_ENTRY) { + return ((ClassDescriptor) classDescriptor.getContainingDeclaration()).getDefaultType(); } - else if (isAnnotation) { + else if (classDescriptor.getKind() == ClassKind.ANNOTATION_CLASS) { return builtIns.getAnnotationType(); } return builtIns.getAnyType(); } - public Collection resolveSuperTypeListEntries( + private static Collection resolveSuperTypeListEntries( LexicalScope extensibleScope, List delegationSpecifiers, @NotNull TypeResolver resolver, diff --git a/compiler/testData/diagnostics/tests/enum/typeParametersInEnum.kt b/compiler/testData/diagnostics/tests/enum/typeParametersInEnum.kt index a587186d80a..3b8746f7b7f 100644 --- a/compiler/testData/diagnostics/tests/enum/typeParametersInEnum.kt +++ b/compiler/testData/diagnostics/tests/enum/typeParametersInEnum.kt @@ -3,5 +3,5 @@ package bug public enum class Foo { - A() + A() }