Skip to content

Commit 7e3716c

Browse files
KvanTTTSpace Team
authored andcommitted
[FIR] Introduce generalized NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS
and report it on all expect classes not only annotation ones
1 parent a63b501 commit 7e3716c

File tree

20 files changed

+50
-45
lines changed

20 files changed

+50
-45
lines changed

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDataClassConverters.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KaDiagnosticConverterBuilder.buildConvert
529529
token,
530530
)
531531
}
532+
add(FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS) { firDiagnostic ->
533+
NoImplicitDefaultConstructorOnExpectClassImpl(
534+
firDiagnostic as KtPsiDiagnostic,
535+
token,
536+
)
537+
}
532538
add(FirErrors.FUNCTION_CALL_EXPECTED) { firDiagnostic ->
533539
FunctionCallExpectedImpl(
534540
firDiagnostic.a,
@@ -1457,12 +1463,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KaDiagnosticConverterBuilder.buildConvert
14571463
token,
14581464
)
14591465
}
1460-
add(FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS) { firDiagnostic ->
1461-
NoImplicitDefaultConstructorOnExpectAnnotationClassImpl(
1462-
firDiagnostic as KtPsiDiagnostic,
1463-
token,
1464-
)
1465-
}
14661466
add(FirJsErrors.JS_MODULE_PROHIBITED_ON_VAR) { firDiagnostic ->
14671467
JsModuleProhibitedOnVarImpl(
14681468
firDiagnostic as KtPsiDiagnostic,

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnostics.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,10 @@ sealed interface KaFirDiagnostic<PSI : PsiElement> : KaDiagnosticWithPsi<PSI> {
415415
override val diagnosticClass get() = NoConstructor::class
416416
}
417417

418+
interface NoImplicitDefaultConstructorOnExpectClass : KaFirDiagnostic<PsiElement> {
419+
override val diagnosticClass get() = NoImplicitDefaultConstructorOnExpectClass::class
420+
}
421+
418422
interface FunctionCallExpected : KaFirDiagnostic<PsiElement> {
419423
override val diagnosticClass get() = FunctionCallExpected::class
420424
val functionName: String
@@ -1043,10 +1047,6 @@ sealed interface KaFirDiagnostic<PSI : PsiElement> : KaDiagnosticWithPsi<PSI> {
10431047
override val diagnosticClass get() = DslMarkerPropagatesToMany::class
10441048
}
10451049

1046-
interface NoImplicitDefaultConstructorOnExpectAnnotationClass : KaFirDiagnostic<KtAnnotationEntry> {
1047-
override val diagnosticClass get() = NoImplicitDefaultConstructorOnExpectAnnotationClass::class
1048-
}
1049-
10501050
interface JsModuleProhibitedOnVar : KaFirDiagnostic<KtElement> {
10511051
override val diagnosticClass get() = JsModuleProhibitedOnVar::class
10521052
}

analysis/analysis-api-fir/gen/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KaFirDiagnosticsImpl.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,11 @@ internal class NoConstructorImpl(
484484
token: KaLifetimeToken,
485485
) : KaAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KaFirDiagnostic.NoConstructor
486486

487+
internal class NoImplicitDefaultConstructorOnExpectClassImpl(
488+
firDiagnostic: KtPsiDiagnostic,
489+
token: KaLifetimeToken,
490+
) : KaAbstractFirDiagnostic<PsiElement>(firDiagnostic, token), KaFirDiagnostic.NoImplicitDefaultConstructorOnExpectClass
491+
487492
internal class FunctionCallExpectedImpl(
488493
override val functionName: String,
489494
override val hasValueParameters: Boolean,
@@ -1253,11 +1258,6 @@ internal class DslMarkerPropagatesToManyImpl(
12531258
token: KaLifetimeToken,
12541259
) : KaAbstractFirDiagnostic<KtAnnotationEntry>(firDiagnostic, token), KaFirDiagnostic.DslMarkerPropagatesToMany
12551260

1256-
internal class NoImplicitDefaultConstructorOnExpectAnnotationClassImpl(
1257-
firDiagnostic: KtPsiDiagnostic,
1258-
token: KaLifetimeToken,
1259-
) : KaAbstractFirDiagnostic<KtAnnotationEntry>(firDiagnostic, token), KaFirDiagnostic.NoImplicitDefaultConstructorOnExpectAnnotationClass
1260-
12611261
internal class JsModuleProhibitedOnVarImpl(
12621262
firDiagnostic: KtPsiDiagnostic,
12631263
token: KaLifetimeToken,

compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
207207
val CALL_RESOLUTION by object : DiagnosticGroup("Call resolution") {
208208
val CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS by error<KtExpression>()
209209
val NO_CONSTRUCTOR by error<PsiElement>(PositioningStrategy.VALUE_ARGUMENTS_LIST)
210+
val NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS by error<PsiElement>(PositioningStrategy.SUPERTYPES_LIST)
210211
val FUNCTION_CALL_EXPECTED by error<PsiElement>(PositioningStrategy.REFERENCED_NAME_BY_QUALIFIED) {
211212
parameter<String>("functionName")
212213
parameter<Boolean>("hasValueParameters")
@@ -485,8 +486,6 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
485486
val IGNORABILITY_ANNOTATIONS_WITH_CHECKER_DISABLED by error<KtAnnotationEntry>()
486487

487488
val DSL_MARKER_PROPAGATES_TO_MANY by warning<KtAnnotationEntry>()
488-
489-
val NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS by error<KtAnnotationEntry>()
490489
}
491490

492491
val OPT_IN by object : DiagnosticGroup("OptIn") {

compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ object FirErrors : KtDiagnosticsContainer() {
224224
// Call resolution
225225
val CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS: KtDiagnosticFactory0 = KtDiagnosticFactory0("CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS", ERROR, SourceElementPositioningStrategies.DEFAULT, KtExpression::class, getRendererFactory())
226226
val NO_CONSTRUCTOR: KtDiagnosticFactory0 = KtDiagnosticFactory0("NO_CONSTRUCTOR", ERROR, SourceElementPositioningStrategies.VALUE_ARGUMENTS_LIST, PsiElement::class, getRendererFactory())
227+
val NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS: KtDiagnosticFactory0 = KtDiagnosticFactory0("NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS", ERROR, SourceElementPositioningStrategies.SUPERTYPES_LIST, PsiElement::class, getRendererFactory())
227228
val FUNCTION_CALL_EXPECTED: KtDiagnosticFactory2<String, Boolean> = KtDiagnosticFactory2("FUNCTION_CALL_EXPECTED", ERROR, SourceElementPositioningStrategies.REFERENCED_NAME_BY_QUALIFIED, PsiElement::class, getRendererFactory())
228229
val ILLEGAL_SELECTOR: KtDiagnosticFactory0 = KtDiagnosticFactory0("ILLEGAL_SELECTOR", ERROR, SourceElementPositioningStrategies.DEFAULT, PsiElement::class, getRendererFactory())
229230
val NO_RECEIVER_ALLOWED: KtDiagnosticFactory0 = KtDiagnosticFactory0("NO_RECEIVER_ALLOWED", ERROR, SourceElementPositioningStrategies.DEFAULT, PsiElement::class, getRendererFactory())
@@ -364,7 +365,6 @@ object FirErrors : KtDiagnosticsContainer() {
364365
val ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE: KtDiagnosticFactory0 = KtDiagnosticFactory0("ANNOTATIONS_ON_BLOCK_LEVEL_EXPRESSION_ON_THE_SAME_LINE", WARNING, SourceElementPositioningStrategies.DEFAULT, PsiElement::class, getRendererFactory())
365366
val IGNORABILITY_ANNOTATIONS_WITH_CHECKER_DISABLED: KtDiagnosticFactory0 = KtDiagnosticFactory0("IGNORABILITY_ANNOTATIONS_WITH_CHECKER_DISABLED", ERROR, SourceElementPositioningStrategies.DEFAULT, KtAnnotationEntry::class, getRendererFactory())
366367
val DSL_MARKER_PROPAGATES_TO_MANY: KtDiagnosticFactory0 = KtDiagnosticFactory0("DSL_MARKER_PROPAGATES_TO_MANY", WARNING, SourceElementPositioningStrategies.DEFAULT, KtAnnotationEntry::class, getRendererFactory())
367-
val NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS: KtDiagnosticFactory0 = KtDiagnosticFactory0("NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS", ERROR, SourceElementPositioningStrategies.DEFAULT, KtAnnotationEntry::class, getRendererFactory())
368368

369369
// OptIn
370370
val OPT_IN_USAGE: KtDiagnosticFactory2<ClassId, String> = KtDiagnosticFactory2("OPT_IN_USAGE", WARNING, SourceElementPositioningStrategies.REFERENCE_BY_QUALIFIED, PsiElement::class, getRendererFactory())

compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
6565
"MISSING_DEPENDENCY_IN_INFERRED_TYPE_ANNOTATION_ERROR",
6666
"CREATING_AN_INSTANCE_OF_ABSTRACT_CLASS",
6767
"NO_CONSTRUCTOR",
68+
"NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS",
6869
"FUNCTION_CALL_EXPECTED",
6970
"ILLEGAL_SELECTOR",
7071
"NO_RECEIVER_ALLOWED",
@@ -181,7 +182,6 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set<String> = setOf(
181182
"NON_INTERNAL_PUBLISHED_API",
182183
"NON_SOURCE_ANNOTATION_ON_INLINED_LAMBDA_EXPRESSION",
183184
"IGNORABILITY_ANNOTATIONS_WITH_CHECKER_DISABLED",
184-
"NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS",
185185
"JS_MODULE_PROHIBITED_ON_VAR",
186186
"JS_MODULE_PROHIBITED_ON_NON_NATIVE",
187187
"NESTED_JS_MODULE_PROHIBITED",

compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_DEPENDENC
773773
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.MISSING_DEPENDENCY_IN_INFERRED_TYPE_ANNOTATION
774774
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NAME_BASED_DESTRUCTURING_UNDERSCORE_WITHOUT_RENAMING
775775
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NON_FINAL_PROPERTY_WITH_EXPLICIT_BACKING_FIELD
776-
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS
776+
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS
777777
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.OVERRIDING_IGNORABLE_WITH_MUST_USE
778778
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.PROPERTY_WITH_EXPLICIT_FIELD_AND_ACCESSORS
779779
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.TYPE_PARAMETER_ON_LHS_OF_DOT
@@ -1426,8 +1426,8 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
14261426
""".trimIndent(),
14271427
)
14281428
map.put(
1429-
NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS,
1430-
"""No implicit default constructor on expect annotation class."""
1429+
NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS,
1430+
"""Expect class does not declare any constructors."""
14311431
)
14321432

14331433
// OptIn

compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ private fun ConeDiagnostic.toKtDiagnostic(
9393
is ConeFunctionCallExpectedError -> FirErrors.FUNCTION_CALL_EXPECTED.createOn(source, this.name.asString(), this.hasValueParameters, session)
9494
is ConeFunctionExpectedError -> FirErrors.FUNCTION_EXPECTED.createOn(source, this.expression, this.type, session)
9595
is ConeNoConstructorError -> FirErrors.NO_CONSTRUCTOR.createOn(callOrAssignmentSource ?: source, session)
96-
is ConeNoImplicitDefaultConstructorOnExpectAnnotationClass -> FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_ANNOTATION_CLASS.createOn(callOrAssignmentSource ?: source, session)
96+
is ConeNoImplicitDefaultConstructorOnExpectClass -> FirErrors.NO_IMPLICIT_DEFAULT_CONSTRUCTOR_ON_EXPECT_CLASS.createOn(callOrAssignmentSource ?: source, session)
9797
is ConeResolutionToClassifierError -> when (this.candidateSymbol.classKind) {
9898
ClassKind.INTERFACE -> FirErrors.INTERFACE_AS_FUNCTION.createOn(source, this.candidateSymbol, session)
9999
ClassKind.CLASS -> when {

compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirCallResolver.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ class FirCallResolver(
653653
} else {
654654
buildReferenceWithErrorCandidate(
655655
callInfo,
656-
if (annotationClassSymbol.isExpect) ConeNoImplicitDefaultConstructorOnExpectAnnotationClass else ConeNoConstructorError,
656+
if (annotationClassSymbol.isExpect) ConeNoImplicitDefaultConstructorOnExpectClass else ConeNoConstructorError,
657657
reference.source
658658
)
659659
}
@@ -844,8 +844,14 @@ class FirCallResolver(
844844
explicitReceiver.value?.toString() ?: "",
845845
explicitReceiver.resolvedType,
846846
)
847-
reference is FirSuperReference && (reference.superTypeRef.firClassLike(session) as? FirClass)?.isInterface == true -> ConeNoConstructorError
848-
else -> ConeUnresolvedNameError(name, operatorToken, explicitReceiver?.resolvedType)
847+
else -> {
848+
val classLikeBySuperRef = (reference as? FirSuperReference)?.superTypeRef?.firClassLike(session) as? FirClass
849+
when {
850+
classLikeBySuperRef?.isInterface == true -> ConeNoConstructorError
851+
classLikeBySuperRef?.isExpect == true -> ConeNoImplicitDefaultConstructorOnExpectClass
852+
else -> ConeUnresolvedNameError(name, operatorToken, explicitReceiver?.resolvedType)
853+
}
854+
}
849855
}
850856
}
851857

compiler/fir/tree/src/org/jetbrains/kotlin/fir/diagnostics/ConeSimpleDiagnostic.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ object ConeNoConstructorError : ConeDiagnostic {
9292
override val reason: String get() = "This type does not have a constructor"
9393
}
9494

95-
object ConeNoImplicitDefaultConstructorOnExpectAnnotationClass : ConeDiagnostic {
96-
override val reason: String get() = "No implicit default constructor on expect annotation class"
95+
object ConeNoImplicitDefaultConstructorOnExpectClass : ConeDiagnostic {
96+
override val reason: String get() = "No implicit default constructor on expect class"
9797
}
9898

9999
object ConeContractShouldBeFirstStatement : ConeDiagnostic {

0 commit comments

Comments
 (0)