[FIR] Introduce the PluginGenerated source kind

Make parcelize work consistently with
`FirOverrideChecker`.

Actually, there is a philosophical question about
what to do when a plugin generates a class
in a new package, and this class is red code
(for instance, doesn't implement an abstract
member from a supertype). There's no source
to report such an error, but we probably do
want to run checkers to avoid trying to
compile red code to binaries (because it may
crash in backend, or it may silently work).
This commit is contained in:
Nikolay Lunyak
2024-01-16 11:34:59 +02:00
committed by Space Team
parent 694029d67f
commit afd8895e51
14 changed files with 318 additions and 196 deletions
@@ -6,8 +6,10 @@
package org.jetbrains.kotlin.fir.plugin
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.containingClassForLocalAttr
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
@@ -68,6 +70,7 @@ public class ClassBuildingContext(
classKind = this@ClassBuildingContext.classKind
scopeProvider = session.kotlinScopeProvider
status = generateStatus()
source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated)
name = classId.shortClassName
symbol = FirRegularClassSymbol(classId)
@@ -6,8 +6,10 @@
package org.jetbrains.kotlin.fir.plugin
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
@@ -69,6 +71,8 @@ public class PropertyBuildingContext(
moduleData = session.moduleData
origin = key.origin
source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated)
symbol = FirPropertySymbol(callableId)
name = callableId.callableName
@@ -6,6 +6,8 @@
package org.jetbrains.kotlin.fir.plugin
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.KtFakeSourceElementKind
import org.jetbrains.kotlin.fakeElement
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
@@ -57,6 +59,8 @@ public class SimpleFunctionBuildingContext(
moduleData = session.moduleData
origin = key.origin
source = owner?.source?.fakeElement(KtFakeSourceElementKind.PluginGenerated)
symbol = FirNamedFunctionSymbol(callableId)
name = callableId.callableName