JVM_IR: permit @NoArg if super constructor is already zero-argument
#KT-46537 Fixed
This commit is contained in:
+5
-1
@@ -35,7 +35,8 @@ class InitializersLowering(context: CommonBackendContext) : InitializersLowering
|
||||
|
||||
val irClass = container.constructedClass
|
||||
val instanceInitializerStatements = extractInitializers(irClass) {
|
||||
(it is IrField && !it.isStatic) || (it is IrAnonymousInitializer && !it.isStatic)
|
||||
(it is IrField && !it.isStatic && (container.isPrimary || !it.primaryConstructorParameter)) ||
|
||||
(it is IrAnonymousInitializer && !it.isStatic)
|
||||
}
|
||||
val block = IrBlockImpl(irClass.startOffset, irClass.endOffset, context.irBuiltIns.unitType, null, instanceInitializerStatements)
|
||||
// Check that the initializers contain no local classes. Deep-copying them is a disaster for code size, and liable to break randomly.
|
||||
@@ -54,6 +55,9 @@ class InitializersLowering(context: CommonBackendContext) : InitializersLowering
|
||||
}
|
||||
}
|
||||
|
||||
private val IrField.primaryConstructorParameter: Boolean
|
||||
get() = (initializer?.expression as? IrGetValue)?.origin == IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER
|
||||
|
||||
abstract class InitializersLoweringBase(open val context: CommonBackendContext) {
|
||||
protected fun extractInitializers(irClass: IrClass, filter: (IrDeclaration) -> Boolean) =
|
||||
// TODO What about fields that were added by lowerings? e.g. captured outer class or locals?
|
||||
|
||||
Reference in New Issue
Block a user