K2: expand type aliases in annotation position #KT-55615 Fixed
This commit is contained in:
committed by
Space Team
parent
3cf811012a
commit
0d50f71fb8
+2
-2
@@ -14,12 +14,12 @@ import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
|
||||
fun DiagnosticReporter.reportIfHasAnnotation(
|
||||
declaration: FirDeclaration,
|
||||
declaration: FirDeclaration,
|
||||
annotationClassId: ClassId,
|
||||
error: KtDiagnosticFactory0,
|
||||
context: CheckerContext
|
||||
) {
|
||||
val annotation = declaration.getAnnotationByClassId(annotationClassId)
|
||||
val annotation = declaration.getAnnotationByClassId(annotationClassId, context.session)
|
||||
if (annotation != null) {
|
||||
reportOn(annotation.source, error, context)
|
||||
}
|
||||
|
||||
+12
-11
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirBasicDeclarationChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
||||
@@ -51,7 +52,7 @@ object FirNativeObjCNameChecker : FirBasicDeclarationChecker() {
|
||||
|
||||
private fun checkDeclaration(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (declaration is FirValueParameter) return // those are checked with the FirFunction
|
||||
val objCNames = declaration.symbol.getObjCNames().filterNotNull()
|
||||
val objCNames = declaration.symbol.getObjCNames(context.session).filterNotNull()
|
||||
if (objCNames.isEmpty()) return
|
||||
if (declaration is FirCallableDeclaration && declaration.isOverride) {
|
||||
for (objCName in objCNames) {
|
||||
@@ -115,20 +116,20 @@ object FirNativeObjCNameChecker : FirBasicDeclarationChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirAnnotationContainer.getObjCName(): ObjCName? =
|
||||
getAnnotationByClassId(objCNameClassId)?.let(::ObjCName)
|
||||
private fun FirAnnotationContainer.getObjCName(session: FirSession): ObjCName? =
|
||||
getAnnotationByClassId(objCNameClassId, session)?.let(::ObjCName)
|
||||
|
||||
private fun FirBasedSymbol<*>.getObjCName(): ObjCName? =
|
||||
getAnnotationByClassId(objCNameClassId)?.let(::ObjCName)
|
||||
private fun FirBasedSymbol<*>.getObjCName(session: FirSession): ObjCName? =
|
||||
getAnnotationByClassId(objCNameClassId, session)?.let(::ObjCName)
|
||||
|
||||
fun FirBasedSymbol<*>.getObjCNames(): List<ObjCName?> = when (this) {
|
||||
fun FirBasedSymbol<*>.getObjCNames(session: FirSession): List<ObjCName?> = when (this) {
|
||||
is FirFunctionSymbol<*> -> buildList {
|
||||
add((this@getObjCNames as FirBasedSymbol<*>).getObjCName())
|
||||
add(resolvedReceiverTypeRef?.getObjCName())
|
||||
add(receiverParameter?.getObjCName())
|
||||
valueParameterSymbols.forEach { add(it.getObjCName()) }
|
||||
add((this@getObjCNames as FirBasedSymbol<*>).getObjCName(session))
|
||||
add(resolvedReceiverTypeRef?.getObjCName(session))
|
||||
add(receiverParameter?.getObjCName(session))
|
||||
valueParameterSymbols.forEach { add(it.getObjCName(session)) }
|
||||
}
|
||||
|
||||
else -> listOf(getObjCName())
|
||||
else -> listOf(getObjCName(session))
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -44,9 +44,11 @@ object FirNativeObjCNameOverridesChecker : FirClassChecker() {
|
||||
) {
|
||||
val overriddenSymbols = firTypeScope.retrieveDirectOverriddenOf(memberSymbol)
|
||||
if (overriddenSymbols.isEmpty()) return
|
||||
val objCNames = overriddenSymbols.map { it.getFirstBaseSymbol(firTypeScope).getObjCNames() }
|
||||
val objCNames = overriddenSymbols.map { it.getFirstBaseSymbol(firTypeScope).getObjCNames(context.session) }
|
||||
if (!objCNames.allNamesEquals()) {
|
||||
val containingDeclarations = overriddenSymbols.mapNotNull { it.containingClassLookupTag()?.toFirRegularClassSymbol(context.session) }
|
||||
val containingDeclarations = overriddenSymbols.mapNotNull {
|
||||
it.containingClassLookupTag()?.toFirRegularClassSymbol(context.session)
|
||||
}
|
||||
reporter.reportOn(
|
||||
declarationToReport.source,
|
||||
INCOMPATIBLE_OBJC_NAME_OVERRIDE,
|
||||
|
||||
+6
-4
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirRegularClassChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getAllowedAnnotationTargets
|
||||
@@ -24,7 +25,8 @@ object FirNativeObjCRefinementAnnotationChecker : FirRegularClassChecker() {
|
||||
|
||||
override fun check(declaration: FirRegularClass, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (declaration.classKind != ClassKind.ANNOTATION_CLASS) return
|
||||
val (objCAnnotation, swiftAnnotation) = declaration.findMetaAnnotations()
|
||||
val session = context.session
|
||||
val (objCAnnotation, swiftAnnotation) = declaration.findMetaAnnotations(session)
|
||||
if (objCAnnotation == null && swiftAnnotation == null) return
|
||||
if (objCAnnotation != null && swiftAnnotation != null) {
|
||||
reporter.reportOn(
|
||||
@@ -33,7 +35,7 @@ object FirNativeObjCRefinementAnnotationChecker : FirRegularClassChecker() {
|
||||
context
|
||||
)
|
||||
}
|
||||
val targets = declaration.getAllowedAnnotationTargets()
|
||||
val targets = declaration.getAllowedAnnotationTargets(session)
|
||||
val unsupportedTargets = targets - supportedTargets
|
||||
if (unsupportedTargets.isNotEmpty()) {
|
||||
objCAnnotation?.let { reporter.reportOn(it.source, FirNativeErrors.INVALID_OBJC_REFINEMENT_TARGETS, context) }
|
||||
@@ -41,11 +43,11 @@ object FirNativeObjCRefinementAnnotationChecker : FirRegularClassChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun FirRegularClass.findMetaAnnotations(): Pair<FirAnnotation?, FirAnnotation?> {
|
||||
private fun FirRegularClass.findMetaAnnotations(session: FirSession): Pair<FirAnnotation?, FirAnnotation?> {
|
||||
var objCAnnotation: FirAnnotation? = null
|
||||
var swiftAnnotation: FirAnnotation? = null
|
||||
for (annotation in annotations) {
|
||||
when (annotation.toAnnotationClassId()) {
|
||||
when (annotation.toAnnotationClassId(session)) {
|
||||
hidesFromObjCClassId -> objCAnnotation = annotation
|
||||
refinesInSwiftClassId -> swiftAnnotation = annotation
|
||||
}
|
||||
|
||||
+1
-1
@@ -46,7 +46,7 @@ object FirNativeObjCRefinementChecker : FirCallableDeclarationChecker() {
|
||||
for (annotation in annotations) {
|
||||
val metaAnnotations = annotation.coneClassLikeType?.lookupTag?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty()
|
||||
for (metaAnnotation in metaAnnotations) {
|
||||
when (metaAnnotation.toAnnotationClassId()) {
|
||||
when (metaAnnotation.toAnnotationClassId(session)) {
|
||||
hidesFromObjCClassId -> {
|
||||
objCAnnotations.add(annotation)
|
||||
break
|
||||
|
||||
+1
-1
@@ -85,7 +85,7 @@ object FirNativeObjCRefinementOverridesChecker : FirClassChecker() {
|
||||
for (annotation in resolvedAnnotationsWithClassIds) {
|
||||
val metaAnnotations = annotation.coneClassLikeType?.lookupTag?.toSymbol(session)?.resolvedAnnotationsWithClassIds.orEmpty()
|
||||
for (metaAnnotation in metaAnnotations) {
|
||||
when (metaAnnotation.toAnnotationClassId()) {
|
||||
when (metaAnnotation.toAnnotationClassId(session)) {
|
||||
hidesFromObjCClassId -> {
|
||||
hasObjC = true
|
||||
break
|
||||
|
||||
+2
-2
@@ -45,7 +45,7 @@ object FirNativeThrowsChecker : FirBasicDeclarationChecker() {
|
||||
)
|
||||
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
val throwsAnnotation = declaration.getAnnotationByClassId(throwsClassId) as? FirAnnotationCall
|
||||
val throwsAnnotation = declaration.getAnnotationByClassId(throwsClassId, context.session) as? FirAnnotationCall
|
||||
|
||||
if (!checkInheritance(declaration, throwsAnnotation, context, reporter)) return
|
||||
|
||||
@@ -123,7 +123,7 @@ object FirNativeThrowsChecker : FirBasicDeclarationChecker() {
|
||||
val annotation = if (overriddenFunction.isSubstitutionOrIntersectionOverride) {
|
||||
null
|
||||
} else {
|
||||
overriddenFunction.getAnnotationByClassId(throwsClassId) as? FirAnnotationCall
|
||||
overriddenFunction.getAnnotationByClassId(throwsClassId, context.session) as? FirAnnotationCall
|
||||
}
|
||||
getInheritedThrows(annotation, overriddenFunction)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user