Support accessors for private methods for default methods
This commit is contained in:
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.codegen.*;
|
||||
import org.jetbrains.kotlin.codegen.binding.MutableClosure;
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState;
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper;
|
||||
import org.jetbrains.kotlin.config.JvmDefaultMode;
|
||||
import org.jetbrains.kotlin.descriptors.*;
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities;
|
||||
import org.jetbrains.kotlin.load.java.sam.SamConstructorDescriptor;
|
||||
@@ -651,7 +652,10 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
||||
return descriptor;
|
||||
}
|
||||
|
||||
if (JvmAnnotationUtilKt.isCompiledToJvmDefaultIfNoAbstract(descriptor, getState().getJvmDefaultMode()) && descriptorContext instanceof DefaultImplsClassContext) {
|
||||
//in other default modes there shouldn't be any accessors form DefaultImpls to Interface cause all compiled inside interface
|
||||
if (getState().getJvmDefaultMode() == JvmDefaultMode.ENABLE &&
|
||||
JvmAnnotationUtilKt.hasJvmDefaultAnnotation(descriptor) &&
|
||||
descriptorContext instanceof DefaultImplsClassContext) {
|
||||
descriptorContext = ((DefaultImplsClassContext) descriptorContext).getInterfaceContext();
|
||||
}
|
||||
|
||||
|
||||
@@ -456,7 +456,9 @@ class KotlinTypeMapper @JvmOverloads constructor(
|
||||
if (isInterface && (superCall || descriptor.visibility == Visibilities.PRIVATE || isAccessor(descriptor))) {
|
||||
thisClass = mapClass(functionParent)
|
||||
dispatchReceiverKotlinType = functionParent.defaultType
|
||||
if (declarationOwner is JavaClassDescriptor || declarationFunctionDescriptor.isCompiledToJvmDefaultIfNoAbstract(jvmDefaultMode)) {
|
||||
if (declarationOwner is JavaClassDescriptor ||
|
||||
(declarationFunctionDescriptor.isCompiledToJvmDefaultIfNoAbstract(jvmDefaultMode) && !isAccessor(descriptor))
|
||||
) {
|
||||
invokeOpcode = INVOKESPECIAL
|
||||
signature = mapSignatureSkipGeneric(functionDescriptor)
|
||||
returnKotlinType = functionDescriptor.returnType
|
||||
|
||||
Reference in New Issue
Block a user