Skip to content

Commit ec1ca0f

Browse files
committed
Self types: diagnostics for annotation classes
1 parent 9cdec30 commit ec1ca0f

File tree

8 files changed

+50
-2
lines changed

8 files changed

+50
-2
lines changed

analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
FILE: selfTypeForAnnotation.kt
2+
@R|kotlin/Self|() public final annotation class AnnotationClass<out <Self> : R|AnnotationClass<<Self>>|> : R|kotlin/Annotation| {
3+
public constructor<out <Self> : R|AnnotationClass<<Self>>|>(): R|AnnotationClass<<Self>>| {
4+
super<R|kotlin/Any|>()
5+
}
6+
7+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// FIR_DISABLE_LAZY_RESOLVE_CHECKS
2+
import kotlin.Self
3+
<!SELF_TYPE_INAPPLICABLE_TARGET!>@Self<!>
4+
annotation class AnnotationClass {
5+
6+
}

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
2121
import org.jetbrains.kotlin.fir.declarations.*
2222
import org.jetbrains.kotlin.fir.declarations.utils.fromPrimaryConstructor
2323
import org.jetbrains.kotlin.fir.declarations.utils.hasBackingField
24+
import org.jetbrains.kotlin.fir.declarations.utils.isAnnotationClass
2425
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
2526
import org.jetbrains.kotlin.fir.languageVersionSettings
2627
import org.jetbrains.kotlin.fir.packageFqName
@@ -71,8 +72,16 @@ object FirAnnotationChecker : FirBasicDeclarationChecker() {
7172
}
7273
}
7374

74-
if (declaration is FirClass && declaration.isEnumClass && self != null) {
75-
reporter.reportOn(self.source, FirErrors.SELF_TYPE_INAPPLICABLE_TARGET, "", context)
75+
if (self != null) {
76+
if (declaration is FirClass) {
77+
if (declaration.isEnumClass) {
78+
reporter.reportOn(self.source, FirErrors.SELF_TYPE_INAPPLICABLE_TARGET, "", context)
79+
}
80+
81+
if (declaration.isAnnotationClass) {
82+
reporter.reportOn(self.source, FirErrors.SELF_TYPE_INAPPLICABLE_TARGET, "", context)
83+
}
84+
}
7685
}
7786

7887
if (deprecatedSinceKotlin != null) {

compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirStatusUtils.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ inline val FirClass.isInterface: Boolean
5555
inline val FirClass.isEnumClass: Boolean
5656
get() = classKind.isEnumClass
5757

58+
inline val FirClass.isAnnotationClass: Boolean
59+
get() = classKind.isAnnotationClass
60+
5861
inline val FirRegularClass.isSealed: Boolean get() = status.modality == Modality.SEALED
5962

6063
inline val FirRegularClass.canHaveAbstractDeclaration: Boolean

0 commit comments

Comments
 (0)