[FIR] Support typealiases in FirJsRuntimeAnnotationChecker
This commit is contained in:
committed by
Space Team
parent
fc285c079e
commit
2e8b177262
+3
-6
@@ -12,16 +12,13 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclaratio
|
|||||||
import org.jetbrains.kotlin.fir.analysis.checkers.getExplicitAnnotationRetention
|
import org.jetbrains.kotlin.fir.analysis.checkers.getExplicitAnnotationRetention
|
||||||
import org.jetbrains.kotlin.fir.analysis.js.checkers.isEffectivelyExternal
|
import org.jetbrains.kotlin.fir.analysis.js.checkers.isEffectivelyExternal
|
||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
|
||||||
|
|
||||||
object FirJsRuntimeAnnotationChecker : FirBasicDeclarationChecker() {
|
object FirJsRuntimeAnnotationChecker : FirBasicDeclarationChecker() {
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
for (annotation in declaration.annotations) {
|
for (annotation in declaration.annotations) {
|
||||||
val annotationClass = annotation.unexpandedConeClassLikeType?.lookupTag?.toSymbol(context.session) ?: continue
|
val annotationClassSymbol = annotation.toAnnotationClassLikeSymbol(context.session) ?: continue
|
||||||
if (annotationClass.getExplicitAnnotationRetention(context.session) != AnnotationRetention.RUNTIME) continue
|
if (annotationClassSymbol.getExplicitAnnotationRetention(context.session) != AnnotationRetention.RUNTIME) continue
|
||||||
|
|
||||||
if (declaration is FirMemberDeclaration && declaration.symbol.isEffectivelyExternal(context)) {
|
if (declaration is FirMemberDeclaration && declaration.symbol.isEffectivelyExternal(context)) {
|
||||||
reporter.reportOn(annotation.source, FirJsErrors.RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION, context)
|
reporter.reportOn(annotation.source, FirJsErrors.RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION, context)
|
||||||
|
|||||||
+5
-1
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol
|
|||||||
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -35,8 +36,11 @@ fun FirAnnotation.toAnnotationClassId(session: FirSession): ClassId? =
|
|||||||
private fun FirAnnotation.toAnnotationClassIdSafe(session: FirSession): ClassId? =
|
private fun FirAnnotation.toAnnotationClassIdSafe(session: FirSession): ClassId? =
|
||||||
toAnnotationLookupTagSafe(session)?.classId
|
toAnnotationLookupTagSafe(session)?.classId
|
||||||
|
|
||||||
|
fun FirAnnotation.toAnnotationClassLikeSymbol(session: FirSession): FirClassLikeSymbol<*>? =
|
||||||
|
toAnnotationLookupTag(session)?.toSymbol(session)
|
||||||
|
|
||||||
private fun FirAnnotation.toAnnotationClass(session: FirSession): FirRegularClass? =
|
private fun FirAnnotation.toAnnotationClass(session: FirSession): FirRegularClass? =
|
||||||
toAnnotationLookupTag(session)?.toSymbol(session)?.fir as? FirRegularClass
|
toAnnotationClassLikeSymbol(session)?.fir as? FirRegularClass
|
||||||
|
|
||||||
// TODO: this is temporary solution, we need something better
|
// TODO: this is temporary solution, we need something better
|
||||||
private val FirExpression.callableNameOfMetaAnnotationArgument: Name?
|
private val FirExpression.callableNameOfMetaAnnotationArgument: Name?
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ external class B {
|
|||||||
val r: Int
|
val r: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typealias TY = Y
|
||||||
|
|
||||||
|
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@TY<!>
|
||||||
|
external class BB
|
||||||
|
|
||||||
@X
|
@X
|
||||||
class C {
|
class C {
|
||||||
@X
|
@X
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ package
|
|||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TY /* = Y */ public final external class BB {
|
||||||
|
public constructor BB()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
||||||
@X public final class C {
|
@X public final class C {
|
||||||
public constructor C()
|
public constructor C()
|
||||||
@X public final val p: kotlin.Int = 0
|
@X public final val p: kotlin.Int = 0
|
||||||
@@ -55,3 +62,5 @@ package
|
|||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
public typealias TY = Y
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user