[Serialization] Implement serialization checker for K2 version of plugin
^KT-53178 Fixed
This commit is contained in:
committed by
teamcity
parent
e048ffcf6d
commit
671083c701
+21
-7
@@ -16,10 +16,7 @@ import org.jetbrains.kotlin.fir.resolvedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -99,11 +96,15 @@ private val DEFAULT_USE_SITE_TARGETS: Set<AnnotationUseSiteTarget> =
|
||||
USE_SITE_TARGET_NAME_MAP.values.fold(setOf<AnnotationUseSiteTarget>()) { a, b -> a + b } - setOf(AnnotationUseSiteTarget.FILE)
|
||||
|
||||
fun FirDeclaration.hasAnnotation(classId: ClassId): Boolean {
|
||||
return annotations.any { it.toAnnotationClassId() == classId }
|
||||
return annotations.hasAnnotation(classId)
|
||||
}
|
||||
|
||||
fun FirBasedSymbol<*>.hasAnnotation(classId: ClassId): Boolean {
|
||||
return resolvedAnnotationsWithClassIds.any { it.toAnnotationClassId() == classId }
|
||||
return resolvedAnnotationsWithClassIds.hasAnnotation(classId)
|
||||
}
|
||||
|
||||
fun List<FirAnnotation>.hasAnnotation(classId: ClassId): Boolean {
|
||||
return this.any { it.toAnnotationClassId() == classId }
|
||||
}
|
||||
|
||||
fun <D> FirBasedSymbol<out D>.getAnnotationByClassId(classId: ClassId): FirAnnotation? where D : FirAnnotationContainer, D : FirDeclaration {
|
||||
@@ -111,7 +112,11 @@ fun <D> FirBasedSymbol<out D>.getAnnotationByClassId(classId: ClassId): FirAnnot
|
||||
}
|
||||
|
||||
fun FirAnnotationContainer.getAnnotationByClassId(classId: ClassId): FirAnnotation? {
|
||||
return annotations.find {
|
||||
return annotations.getAnnotationByClassId(classId)
|
||||
}
|
||||
|
||||
fun List<FirAnnotation>.getAnnotationByClassId(classId: ClassId): FirAnnotation? {
|
||||
return find {
|
||||
it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag?.classId == classId
|
||||
}
|
||||
}
|
||||
@@ -173,6 +178,15 @@ private inline fun <reified T> FirAnnotation.getPrimitiveArgumentValue(name: Nam
|
||||
}
|
||||
}
|
||||
|
||||
fun FirAnnotation.getKClassArgument(name: Name): ConeKotlinType? {
|
||||
val argument = findArgumentByName(name) as? FirGetClassCall ?: return null
|
||||
return argument.getTargetType()
|
||||
}
|
||||
|
||||
fun FirGetClassCall.getTargetType(): ConeKotlinType? {
|
||||
return typeRef.coneType.typeArguments.getOrNull(0)?.type
|
||||
}
|
||||
|
||||
fun FirAnnotationContainer.getJvmNameFromAnnotation(target: AnnotationUseSiteTarget? = null): String? {
|
||||
val annotationCalls = getAnnotationsByClassId(StandardClassIds.Annotations.JvmName)
|
||||
return annotationCalls.firstNotNullOfOrNull { call ->
|
||||
|
||||
+3
-2
@@ -32,12 +32,13 @@ fun FirClass.primaryConstructorIfAny(session: FirSession): FirConstructorSymbol?
|
||||
return constructors(session).find(FirConstructorSymbol::isPrimary)
|
||||
}
|
||||
|
||||
fun FirRegularClass.collectEnumEntries(): Collection<FirEnumEntry> {
|
||||
// TODO: dog shit, rewrite with scopes
|
||||
fun FirClass.collectEnumEntries(): Collection<FirEnumEntry> {
|
||||
assert(classKind == ClassKind.ENUM_CLASS)
|
||||
return declarations.filterIsInstance<FirEnumEntry>()
|
||||
}
|
||||
|
||||
fun FirRegularClassSymbol.collectEnumEntries(): Collection<FirEnumEntrySymbol> {
|
||||
fun FirClassSymbol<*>.collectEnumEntries(): Collection<FirEnumEntrySymbol> {
|
||||
return fir.collectEnumEntries().map { it.symbol }
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -118,6 +118,10 @@ fun FirSession.declaredMemberScope(klass: FirClassSymbol<*>): FirContainingNames
|
||||
return declaredMemberScope(klass.fir)
|
||||
}
|
||||
|
||||
fun FirClassSymbol<*>.declaredMemberScope(session: FirSession): FirContainingNamesAwareScope {
|
||||
return session.declaredMemberScope(fir)
|
||||
}
|
||||
|
||||
fun FirSession.declaredMemberScopeWithLazyNestedScope(
|
||||
klass: FirClass,
|
||||
existingNames: List<Name>,
|
||||
|
||||
Reference in New Issue
Block a user