Generate stubs for private function with default arguments as public in interfaces

This commit is contained in:
Mikhael Bogdanov
2021-03-09 07:12:10 +01:00
committed by Space
parent 7edbf79b4b
commit f648d86d2b
13 changed files with 371 additions and 4 deletions
@@ -137,9 +137,10 @@ class FunctionCodegen(
isAnonymousObject || origin == JvmLoweredDeclarationOrigin.CONTINUATION_CLASS || origin == JvmLoweredDeclarationOrigin.SUSPEND_LAMBDA
private fun IrFunction.getVisibilityForDefaultArgumentStub(): Int =
when (visibility) {
DescriptorVisibilities.PUBLIC -> Opcodes.ACC_PUBLIC
JavaDescriptorVisibilities.PACKAGE_VISIBILITY -> AsmUtil.NO_FLAG_PACKAGE_PRIVATE
when {
// TODO: maybe best to generate private default in interface as private
visibility == DescriptorVisibilities.PUBLIC || parentAsClass.isJvmInterface -> Opcodes.ACC_PUBLIC
visibility == JavaDescriptorVisibilities.PACKAGE_VISIBILITY -> AsmUtil.NO_FLAG_PACKAGE_PRIVATE
else -> throw IllegalStateException("Default argument stub should be either public or package private: ${ir2string(this)}")
}