diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRecordChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRecordChecker.kt index 891111ef207..7890d7d204b 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRecordChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmRecordChecker.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClassId import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.languageVersionSettings @@ -30,7 +31,7 @@ object FirJvmRecordChecker : FirRegularClassChecker() { override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) { declaration.superTypeRefs.firstOrNull()?.let { typeRef -> // compiler automatically adds java.lang.Record supertype, so we should check only for explicit type declarations - if (typeRef.source != null && typeRef.coneTypeSafe()?.classId == StandardClassIds.Java.Record) { + if (typeRef.source != null && typeRef.coneTypeSafe()?.fullyExpandedClassId(context.session) == StandardClassIds.Java.Record) { reporter.reportOn(typeRef.source, FirJvmErrors.ILLEGAL_JAVA_LANG_RECORD_SUPERTYPE, context) return } diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.fir.kt b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.fir.kt index 39dcba593bb..78aba569fd0 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.fir.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.fir.kt @@ -25,3 +25,7 @@ data class A5(val x: String) : I data class A6(val x: String) : Record(), I data class A7(val x: String) : java.lang.Record(), I + +typealias TA = Record + +data class A8(val x: String) : TA(), I \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.kt b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.kt index b5b20995bfa..69a1946ed7d 100644 --- a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.kt +++ b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.kt @@ -25,3 +25,7 @@ data class A5(val x: String) : I data class A6(val x: String) : Record(), I data class A7(val x: String) : java.lang.Record(), I + +typealias TA = Record + +data class A8(val x: String) : TA(), I \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.txt b/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.txt deleted file mode 100644 index e33f8d91d92..00000000000 --- a/compiler/testData/diagnostics/tests/testsWithJava17/jvmRecord/supertypesCheck.txt +++ /dev/null @@ -1,84 +0,0 @@ -package - -@kotlin.jvm.JvmRecord public final data class A1 : Abstract, I, java.lang.Record { - public constructor A1(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A1 - public open override /*3*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*3*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*3*/ /*synthesized*/ fun toString(): kotlin.String -} - -@kotlin.jvm.JvmRecord public final data class A2 : kotlin.Any, I, java.lang.Record { - public constructor A2(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A2 - public open override /*3*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*3*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*3*/ /*synthesized*/ fun toString(): kotlin.String -} - -@kotlin.jvm.JvmRecord public final data class A3 : java.lang.Record, I { - public constructor A3(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A3 - public open override /*2*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*2*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*2*/ /*synthesized*/ fun toString(): kotlin.String -} - -@kotlin.jvm.JvmRecord public final data class A4 : java.lang.Record, I { - public constructor A4(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A4 - public open override /*2*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*2*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*2*/ /*synthesized*/ fun toString(): kotlin.String -} - -@kotlin.jvm.JvmRecord public final data class A5 : I, java.lang.Record { - public constructor A5(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A5 - public open override /*2*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*2*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*2*/ /*synthesized*/ fun toString(): kotlin.String -} - -public final data class A6 : java.lang.Record, I { - public constructor A6(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A6 - public open override /*2*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*2*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*2*/ /*synthesized*/ fun toString(): kotlin.String -} - -public final data class A7 : java.lang.Record, I { - public constructor A7(/*0*/ x: kotlin.String) - public final val x: kotlin.String - public final operator /*synthesized*/ fun component1(): kotlin.String - public final /*synthesized*/ fun copy(/*0*/ x: kotlin.String = ...): A7 - public open override /*2*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*2*/ /*synthesized*/ fun hashCode(): kotlin.Int - public open override /*2*/ /*synthesized*/ fun toString(): kotlin.String -} - -public abstract class Abstract { - public constructor Abstract() - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} - -public interface I { - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -}