Make proper check for defaults on delegation to DefaultImpls

This commit is contained in:
Mikhail Bogdanov
2020-06-10 09:35:09 +02:00
parent b8f0ad2111
commit 9d48ecfac3
4 changed files with 45 additions and 5 deletions
@@ -237,11 +237,14 @@ public abstract class ClassBodyCodegen extends MemberCodegen<KtPureClassOrObject
boolean isErasedInlineClass
) {
// Skip Java 8 default methods
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(interfaceFun) ||
JvmAnnotationUtilKt.isCallableMemberCompiledToJvmDefault(
DescriptorUtils.unwrapFakeOverrideToAnyDeclaration(interfaceFun), state.getJvmDefaultMode()
)
) {
if (CodegenUtilKt.isDefinitelyNotDefaultImplsMethod(interfaceFun)) {
return;
}
CallableMemberDescriptor actualImplementation =
interfaceFun.getKind().isReal() ? interfaceFun : ImplKt.findImplementationFromInterface(interfaceFun);
assert actualImplementation != null : "Can't find actual implementation for " + interfaceFun;
if (JvmAnnotationUtilKt.isCallableMemberCompiledToJvmDefault(actualImplementation, state.getJvmDefaultMode())) {
return;
}