[FIR] Add symbol to all declarations. Get rid of FirSymbolOwner

This commit is contained in:
Dmitriy Novozhilov
2021-06-20 11:42:52 +03:00
parent 39cd1c8504
commit b3e5c6e079
254 changed files with 1305 additions and 1297 deletions
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus
import org.jetbrains.kotlin.fir.declarations.FirPluginKey
import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension
import org.jetbrains.kotlin.fir.extensions.predicate.*
import org.jetbrains.kotlin.fir.extensions.predicate.DeclarationPredicate
import org.jetbrains.kotlin.fir.extensions.predicate.hasOrUnder
import org.jetbrains.kotlin.fir.extensions.predicate.metaHasOrUnder
import org.jetbrains.kotlin.fir.extensions.predicate.or
import org.jetbrains.kotlin.fir.extensions.transform
import org.jetbrains.kotlin.name.FqName
@@ -21,7 +24,7 @@ class AllOpenStatusTransformer(session: FirSession) : FirStatusTransformerExtens
private val ALL_OPEN = FqName("org.jetbrains.kotlin.fir.plugin.AllOpen")
}
override fun transformStatus(declaration: FirDeclaration, owners: List<FirAnnotatedDeclaration>, status: FirDeclarationStatus): FirDeclarationStatus {
override fun transformStatus(declaration: FirDeclaration<*>, owners: List<FirAnnotatedDeclaration<*>>, status: FirDeclarationStatus): FirDeclarationStatus {
if (status.modality != null) return status
return status.transform(modality = Modality.OPEN)
}
@@ -30,4 +33,4 @@ class AllOpenStatusTransformer(session: FirSession) : FirStatusTransformerExtens
override val key: FirPluginKey
get() = AllOpenPluginKey
}
}
@@ -39,8 +39,8 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx
}
override fun transformStatus(
declaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>,
declaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>,
status: FirDeclarationStatus
): FirDeclarationStatus {
val visibility = findVisibility(declaration, owners) ?: return status
@@ -48,7 +48,7 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx
return status.transform(visibility = visibility)
}
private fun findVisibility(declaration: FirDeclaration, owners: List<FirAnnotatedDeclaration>): Visibility? {
private fun findVisibility(declaration: FirDeclaration<*>, owners: List<FirAnnotatedDeclaration<*>>): Visibility? {
(declaration as? FirAnnotatedDeclaration)?.visibilityFromAnnotation()?.let { return it }
for (owner in owners) {
owner.visibilityFromAnnotation()?.let { return it }
@@ -56,7 +56,7 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx
return null
}
private fun FirAnnotatedDeclaration.visibilityFromAnnotation(): Visibility? {
private fun FirAnnotatedDeclaration<*>.visibilityFromAnnotation(): Visibility? {
val annotation = annotations.firstOrNull {
it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.lookupTag?.classId == AllPublicClassId
} ?: return null
@@ -7,12 +7,14 @@ package org.jetbrains.kotlin.fir.plugin.checkers
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMemberDeclarationChecker
import org.jetbrains.kotlin.fir.analysis.diagnostics.*
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
object DummyNameChecker : FirMemberDeclarationChecker() {
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
override fun check(declaration: FirMemberDeclaration<*>, context: CheckerContext, reporter: DiagnosticReporter) {
if (declaration !is FirSimpleFunction) return
if (declaration.name.asString() == "dummy") {
reporter.reportOn(declaration.source, FirErrors.SYNTAX, context)
@@ -23,19 +23,19 @@ import org.jetbrains.kotlin.name.Name
class AllOpenMemberGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) {
override fun generateClasses(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<FirRegularClass>> {
return emptyList()
}
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration> {
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration<*>> {
return emptyList()
}
override fun generateMembers(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<*>> {
if (annotatedDeclaration !is FirProperty) return emptyList()
val owner = owners.last() as? FirRegularClass ?: return emptyList()
@@ -33,8 +33,8 @@ import org.jetbrains.kotlin.name.Name
class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) {
override fun generateClasses(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<FirRegularClass>> {
val owner = annotatedDeclaration as? FirRegularClass ?: return emptyList()
val newClass = buildRegularClass {
@@ -56,7 +56,7 @@ class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGeneratio
return listOf(GeneratedDeclaration(newClass, owner))
}
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration> {
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration<*>> {
val klass = generatedClass.klass
val classId = klass.symbol.classId
@@ -92,8 +92,8 @@ class AllOpenNestedClassGenerator(session: FirSession) : FirDeclarationGeneratio
}
override fun generateMembers(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<*>> {
return emptyList()
}
@@ -30,8 +30,8 @@ import org.jetbrains.kotlin.name.Name
class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) {
override fun generateClasses(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<FirRegularClass>> {
if (owners.size > 2) return emptyList()
val owner = annotatedDeclaration as? FirRegularClass ?: return emptyList()
@@ -62,13 +62,13 @@ class AllOpenRecursiveNestedClassGenerator(session: FirSession) : FirDeclaration
return listOf(GeneratedDeclaration(newClass, owner))
}
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration> {
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration<*>> {
return emptyList()
}
override fun generateMembers(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<*>> {
return emptyList()
}
@@ -28,8 +28,8 @@ import org.jetbrains.kotlin.name.Name
class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclarationGenerationExtension(session) {
override fun generateClasses(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<FirRegularClass>> {
val file = owners.first() as FirFile
val klass = annotatedDeclaration as? FirRegularClass ?: return emptyList()
@@ -50,7 +50,7 @@ class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclaration
return listOf(GeneratedDeclaration(newClass, file))
}
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration> {
override fun generateMembersForGeneratedClass(generatedClass: GeneratedClass): List<FirDeclaration<*>> {
val klass = generatedClass.klass
val function = buildSimpleFunction {
moduleData = session.moduleData
@@ -69,8 +69,8 @@ class AllOpenTopLevelDeclarationsGenerator(session: FirSession) : FirDeclaration
}
override fun generateMembers(
annotatedDeclaration: FirDeclaration,
owners: List<FirAnnotatedDeclaration>
annotatedDeclaration: FirDeclaration<*>,
owners: List<FirAnnotatedDeclaration<*>>
): List<GeneratedDeclaration<*>> {
return emptyList()
}