[FIR] Add JVM_RECORD_EXTENDS_CLASS diagnostic
This commit is contained in:
+3
@@ -72,6 +72,9 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
|
||||
val INNER_JVM_RECORD by error<PsiElement>(PositioningStrategy.INNER_MODIFIER)
|
||||
val FIELD_IN_JVM_RECORD by error<PsiElement>()
|
||||
val DELEGATION_BY_IN_JVM_RECORD by error<PsiElement>()
|
||||
val JVM_RECORD_EXTENDS_CLASS by error<PsiElement>(PositioningStrategy.ACTUAL_DECLARATION_NAME) {
|
||||
parameter<ConeKotlinType>("superType")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
@@ -61,5 +61,6 @@ object FirJvmErrors {
|
||||
val INNER_JVM_RECORD by error0<PsiElement>(SourceElementPositioningStrategies.INNER_MODIFIER)
|
||||
val FIELD_IN_JVM_RECORD by error0<PsiElement>()
|
||||
val DELEGATION_BY_IN_JVM_RECORD by error0<PsiElement>()
|
||||
val JVM_RECORD_EXTENDS_CLASS by error1<PsiElement, ConeKotlinType>(SourceElementPositioningStrategies.ACTUAL_DECLARATION_NAME)
|
||||
|
||||
}
|
||||
|
||||
+11
@@ -6,9 +6,12 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.fir.FirFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.FirRealSourceElementKind
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirRegularClassChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors
|
||||
@@ -19,6 +22,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||
import org.jetbrains.kotlin.fir.declarations.getAnnotationByFqName
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.languageVersionSettings
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
object FirJvmRecordChecker : FirRegularClassChecker() {
|
||||
@@ -88,5 +92,12 @@ object FirJvmRecordChecker : FirRegularClassChecker() {
|
||||
reporter.reportOn(decl.source, FirJvmErrors.DELEGATION_BY_IN_JVM_RECORD, context)
|
||||
}
|
||||
}
|
||||
|
||||
declaration.superTypeRefs.firstOrNull()?.let { typeRef ->
|
||||
if (typeRef.source?.kind != FirRealSourceElementKind) return@let
|
||||
if (typeRef.toRegularClassSymbol(context.session)?.classKind == ClassKind.CLASS) {
|
||||
reporter.reportOn(declaration.source, FirJvmErrors.JVM_RECORD_EXTENDS_CLASS, typeRef.coneType, context)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -7,16 +7,16 @@ abstract class Abstract
|
||||
interface I
|
||||
|
||||
@JvmRecord
|
||||
data class A1(val x: String) : Abstract(), I
|
||||
data class <!JVM_RECORD_EXTENDS_CLASS!>A1<!>(val x: String) : Abstract(), I
|
||||
|
||||
@JvmRecord
|
||||
data class A2(val x: String) : Any(), I
|
||||
data class <!JVM_RECORD_EXTENDS_CLASS!>A2<!>(val x: String) : Any(), I
|
||||
|
||||
@JvmRecord
|
||||
data class A3(val x: String) : Record(), I
|
||||
data class <!JVM_RECORD_EXTENDS_CLASS!>A3<!>(val x: String) : Record(), I
|
||||
|
||||
@JvmRecord
|
||||
data class A4(val x: String) : java.lang.Record(), I
|
||||
data class <!JVM_RECORD_EXTENDS_CLASS!>A4<!>(val x: String) : java.lang.Record(), I
|
||||
|
||||
@JvmRecord
|
||||
data class A5(val x: String) : I
|
||||
|
||||
Reference in New Issue
Block a user