[FIR] Add INNER_JVM_RECORD diagnostic
This commit is contained in:
+1
@@ -69,6 +69,7 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
|
|||||||
val NON_DATA_CLASS_JVM_RECORD by error<PsiElement>()
|
val NON_DATA_CLASS_JVM_RECORD by error<PsiElement>()
|
||||||
val JVM_RECORD_NOT_VAL_PARAMETER by error<PsiElement>()
|
val JVM_RECORD_NOT_VAL_PARAMETER by error<PsiElement>()
|
||||||
val JVM_RECORD_NOT_LAST_VARARG_PARAMETER by error<PsiElement>()
|
val JVM_RECORD_NOT_LAST_VARARG_PARAMETER by error<PsiElement>()
|
||||||
|
val INNER_JVM_RECORD by error<PsiElement>(PositioningStrategy.INNER_MODIFIER)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+1
@@ -58,5 +58,6 @@ object FirJvmErrors {
|
|||||||
val NON_DATA_CLASS_JVM_RECORD by error0<PsiElement>()
|
val NON_DATA_CLASS_JVM_RECORD by error0<PsiElement>()
|
||||||
val JVM_RECORD_NOT_VAL_PARAMETER by error0<PsiElement>()
|
val JVM_RECORD_NOT_VAL_PARAMETER by error0<PsiElement>()
|
||||||
val JVM_RECORD_NOT_LAST_VARARG_PARAMETER by error0<PsiElement>()
|
val JVM_RECORD_NOT_LAST_VARARG_PARAMETER by error0<PsiElement>()
|
||||||
|
val INNER_JVM_RECORD by error0<PsiElement>(SourceElementPositioningStrategies.INNER_MODIFIER)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -43,6 +43,11 @@ object FirJvmRecordChecker : FirRegularClassChecker() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (declaration.isInner) {
|
||||||
|
reporter.reportOn(declaration.source, FirJvmErrors.INNER_JVM_RECORD, context)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (!declaration.isFinal) {
|
if (!declaration.isFinal) {
|
||||||
reporter.reportOn(declaration.source, FirJvmErrors.NON_FINAL_JVM_RECORD, context)
|
reporter.reportOn(declaration.source, FirJvmErrors.NON_FINAL_JVM_RECORD, context)
|
||||||
return
|
return
|
||||||
|
|||||||
-56
@@ -1,56 +0,0 @@
|
|||||||
// !API_VERSION: 1.5
|
|
||||||
// !LANGUAGE: +JvmRecordSupport
|
|
||||||
// SKIP_TXT
|
|
||||||
// JVM_TARGET: 15
|
|
||||||
// ENABLE_JVM_PREVIEW
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A0
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A1 {
|
|
||||||
constructor()
|
|
||||||
}
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A2()
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A3(name: String)
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A4(var name: String)
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A5(vararg val name: String, y: Int)
|
|
||||||
|
|
||||||
@JvmRecord
|
|
||||||
<!NON_FINAL_JVM_RECORD!>open<!> class A6(val x: String)
|
|
||||||
|
|
||||||
@JvmRecord
|
|
||||||
<!NON_FINAL_JVM_RECORD!>abstract<!> class A7(val x: String)
|
|
||||||
|
|
||||||
@JvmRecord
|
|
||||||
<!NON_FINAL_JVM_RECORD!>sealed<!> class A8(val x: String)
|
|
||||||
|
|
||||||
@JvmRecord
|
|
||||||
<!ENUM_JVM_RECORD!>enum<!> class A9(val x: String) {
|
|
||||||
X("");
|
|
||||||
}
|
|
||||||
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class A10(
|
|
||||||
val x: String,
|
|
||||||
val y: Int,
|
|
||||||
vararg val z: Double,
|
|
||||||
)
|
|
||||||
|
|
||||||
fun main() {
|
|
||||||
<!LOCAL_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
class Local
|
|
||||||
}
|
|
||||||
|
|
||||||
class Outer {
|
|
||||||
<!NON_DATA_CLASS_JVM_RECORD!>@JvmRecord<!>
|
|
||||||
inner class Inner(val name: String)
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// !API_VERSION: 1.5
|
// !API_VERSION: 1.5
|
||||||
// !LANGUAGE: +JvmRecordSupport
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
// SKIP_TXT
|
// SKIP_TXT
|
||||||
|
|||||||
+6
@@ -3580,4 +3580,10 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
|||||||
token,
|
token,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
add(FirJvmErrors.INNER_JVM_RECORD) { firDiagnostic ->
|
||||||
|
InnerJvmRecordImpl(
|
||||||
|
firDiagnostic as FirPsiDiagnostic,
|
||||||
|
token,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
@@ -2493,4 +2493,8 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
|||||||
override val diagnosticClass get() = JvmRecordNotLastVarargParameter::class
|
override val diagnosticClass get() = JvmRecordNotLastVarargParameter::class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class InnerJvmRecord : KtFirDiagnostic<PsiElement>() {
|
||||||
|
override val diagnosticClass get() = InnerJvmRecord::class
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -4042,3 +4042,10 @@ internal class JvmRecordNotLastVarargParameterImpl(
|
|||||||
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal class InnerJvmRecordImpl(
|
||||||
|
firDiagnostic: FirPsiDiagnostic,
|
||||||
|
override val token: ValidityToken,
|
||||||
|
) : KtFirDiagnostic.InnerJvmRecord(), KtAbstractFirDiagnostic<PsiElement> {
|
||||||
|
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user