[K/N] Get rid of using base class default values for annotations
They can be not available in incremental compilation case ^KT-50211
This commit is contained in:
+3
-1
@@ -65,13 +65,15 @@ abstract class AnnotationImplementationTransformer(val context: BackendContext,
|
||||
return super.visitClassNew(declaration)
|
||||
}
|
||||
|
||||
abstract fun chooseConstructor(implClass: IrClass, expression: IrConstructorCall) : IrConstructor
|
||||
|
||||
override fun visitConstructorCall(expression: IrConstructorCall): IrExpression {
|
||||
val constructedClass = expression.type.classOrNull?.owner ?: return super.visitConstructorCall(expression)
|
||||
if (!constructedClass.isAnnotationClass) return super.visitConstructorCall(expression)
|
||||
if (constructedClass.typeParameters.isNotEmpty()) return super.visitConstructorCall(expression) // Not supported yet
|
||||
|
||||
val implClass = implementations.getOrPut(constructedClass) { createAnnotationImplementation(constructedClass) }
|
||||
val ctor = implClass.constructors.single()
|
||||
val ctor = chooseConstructor(implClass, expression)
|
||||
val newCall = IrConstructorCallImpl.fromSymbolOwner(
|
||||
expression.startOffset,
|
||||
expression.endOffset,
|
||||
|
||||
+3
@@ -36,6 +36,9 @@ class JsAnnotationImplementationTransformer(val jsContext: JsIrBackendContext) :
|
||||
return expression
|
||||
}
|
||||
|
||||
override fun chooseConstructor(implClass: IrClass, expression: IrConstructorCall): IrConstructor =
|
||||
compilationException("Should not be called", implClass)
|
||||
|
||||
override fun visitClassNew(declaration: IrClass): IrStatement {
|
||||
if (declaration.isAnnotationClass) {
|
||||
implementGeneratedFunctions(declaration, declaration)
|
||||
|
||||
+4
@@ -41,6 +41,10 @@ class JvmAnnotationImplementationTransformer(val jvmContext: JvmBackendContext,
|
||||
private val inInlineFunctionScope: Boolean
|
||||
get() = allScopes.any { it.irElement.safeAs<IrDeclaration>()?.isInPublicInlineScope == true }
|
||||
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
override fun chooseConstructor(implClass: IrClass, expression: IrConstructorCall) =
|
||||
implClass.constructors.single()
|
||||
|
||||
override fun visitConstructorCall(expression: IrConstructorCall): IrExpression {
|
||||
val constructedClass = expression.type.classOrNull
|
||||
if (constructedClass?.owner?.isAnnotationClass == true && inInlineFunctionScope) {
|
||||
|
||||
Reference in New Issue
Block a user