[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.js.checkers.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.js.FirJsErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.expressions.unexpandedConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
|
||||
object FirJsRuntimeAnnotationChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
for (annotation in declaration.annotations) {
|
||||
val annotationClass = annotation.unexpandedConeClassLikeType?.lookupTag?.toSymbol(context.session) ?: continue
|
||||
if (annotationClass.getExplicitAnnotationRetention(context.session) != AnnotationRetention.RUNTIME) continue
|
||||
val annotationClassSymbol = annotation.toAnnotationClassLikeSymbol(context.session) ?: continue
|
||||
if (annotationClassSymbol.getExplicitAnnotationRetention(context.session) != AnnotationRetention.RUNTIME) continue
|
||||
|
||||
if (declaration is FirMemberDeclaration && declaration.symbol.isEffectivelyExternal(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.symbols.ConeClassLikeLookupTag
|
||||
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.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -35,8 +36,11 @@ fun FirAnnotation.toAnnotationClassId(session: FirSession): ClassId? =
|
||||
private fun FirAnnotation.toAnnotationClassIdSafe(session: FirSession): ClassId? =
|
||||
toAnnotationLookupTagSafe(session)?.classId
|
||||
|
||||
fun FirAnnotation.toAnnotationClassLikeSymbol(session: FirSession): FirClassLikeSymbol<*>? =
|
||||
toAnnotationLookupTag(session)?.toSymbol(session)
|
||||
|
||||
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
|
||||
private val FirExpression.callableNameOfMetaAnnotationArgument: Name?
|
||||
|
||||
@@ -30,6 +30,11 @@ external class B {
|
||||
val r: Int
|
||||
}
|
||||
|
||||
typealias TY = Y
|
||||
|
||||
<!RUNTIME_ANNOTATION_ON_EXTERNAL_DECLARATION!>@TY<!>
|
||||
external class BB
|
||||
|
||||
@X
|
||||
class C {
|
||||
@X
|
||||
|
||||
@@ -20,6 +20,13 @@ package
|
||||
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 {
|
||||
public constructor C()
|
||||
@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 toString(): kotlin.String
|
||||
}
|
||||
public typealias TY = Y
|
||||
|
||||
|
||||
Reference in New Issue
Block a user