Don't generate private members in compatibility mode in DefaultImpls

This commit is contained in:
Mikhael Bogdanov
2021-03-09 11:03:53 +01:00
committed by Space
parent f648d86d2b
commit efceb89b98
7 changed files with 71 additions and 12 deletions
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -150,7 +151,13 @@ internal class InterfaceLowering(val context: JvmBackendContext) : IrElementTran
* 5) JVM default declaration is bridged in DefaultImpls via accessor if in compatibility mode, ...
*/
isCompatibilityMode -> {
createJvmDefaultCompatibilityDelegate(function)
val visibility =
if (function.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER)
context.mapping.defaultArgumentsOriginalFunction[function]!!.visibility
else function.visibility
if (!DescriptorVisibilities.isPrivate(visibility)) {
createJvmDefaultCompatibilityDelegate(function)
}
}
// 6) ... otherwise we simply leave the default function implementation on the interface.