K1: report ENUM_DECLARING_CLASS_DEPRECATED on enum entry properly

#KT-53807 Fixed
This commit is contained in:
Mikhail Glukhikh
2022-09-09 11:31:34 +02:00
committed by Space
parent 62f67e46fd
commit 769a2ca9b1
4 changed files with 38 additions and 1 deletions
@@ -23,7 +23,10 @@ object EnumDeclaringClassDeprecationChecker : CallChecker {
if (resultingDescriptor !is PropertyDescriptor || resultingDescriptor.kind != CallableMemberDescriptor.Kind.SYNTHESIZED) return
val extensionReceiver = resultingDescriptor.extensionReceiverParameter?.value as? ExtensionReceiver ?: return
if (resultingDescriptor.name.asString() != "declaringClass") return
if (extensionReceiver.type.constructor.declarationDescriptor.classId != StandardClassIds.Enum) return
val extensionReceiverConstructor = extensionReceiver.type.constructor
if (extensionReceiverConstructor.declarationDescriptor.classId != StandardClassIds.Enum &&
extensionReceiverConstructor.supertypes.none { it.constructor.declarationDescriptor.classId == StandardClassIds.Enum }
) return
context.trace.report(ErrorsJvm.ENUM_DECLARING_CLASS_DEPRECATED.on(context.languageVersionSettings, reportOn))
}
}
@@ -4,6 +4,12 @@
import java.util.*
enum class SomeEnum { A }
fun bar() {
SomeEnum.A.declaringClass
}
fun <E : Enum<E>> foo(values: Array<E>) {
EnumSet.noneOf(values.first().declaringClass)
EnumSet.noneOf(values.first().getDeclaringClass())
@@ -4,6 +4,12 @@
import java.util.*
enum class SomeEnum { A }
fun bar() {
SomeEnum.A.<!ENUM_DECLARING_CLASS_DEPRECATED_WARNING!>declaringClass<!>
}
fun <E : Enum<E>> foo(values: Array<E>) {
EnumSet.noneOf(values.first().<!ENUM_DECLARING_CLASS_DEPRECATED_WARNING!>declaringClass<!>)
EnumSet.noneOf(values.first().<!UNRESOLVED_REFERENCE!>getDeclaringClass<!>())
@@ -1,3 +1,25 @@
package
public fun bar(): kotlin.Unit
public fun </*0*/ E : kotlin.Enum<E>> foo(/*0*/ values: kotlin.Array<E>): kotlin.Unit
public final enum class SomeEnum : kotlin.Enum<SomeEnum> {
enum entry A
private constructor SomeEnum()
@kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: SomeEnum): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit
public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class<SomeEnum!>!
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ val entries: kotlin.enums.EnumEntries<SomeEnum>
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): SomeEnum
public final /*synthesized*/ fun values(): kotlin.Array<SomeEnum>
}