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
@@ -1691,7 +1691,7 @@ public class FunctionCodegen {
return (kind != OwnerKind.DEFAULT_IMPLS && !isSyntheticInCompatibilityOrJvmDefault) ||
(kind == OwnerKind.DEFAULT_IMPLS &&
(isSyntheticInCompatibilityOrJvmDefault ||
(mode.isCompatibility() && !JvmAnnotationUtilKt.hasJvmDefaultNoCompatibilityAnnotation(containingDeclaration))));
(mode.isCompatibility() && !JvmAnnotationUtilKt.hasJvmDefaultNoCompatibilityAnnotation(containingDeclaration))) && !DescriptorVisibilities.isPrivate(memberDescriptor.getVisibility()));
} else {
switch (kind) {
case DEFAULT_IMPLS: return true;
@@ -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.
@@ -8,7 +8,6 @@ public final class Delegate {
@kotlin.Metadata
public final class Foo$DefaultImpls {
// source: 'localDelegatedProperties.kt'
private deprecated static @java.lang.Deprecated method test$lambda-0(p0: Delegate): java.lang.String
public deprecated static @java.lang.Deprecated @org.jetbrains.annotations.NotNull method test(@org.jetbrains.annotations.NotNull p0: Foo): java.lang.String
public final inner class Foo$DefaultImpls
}
@@ -19,7 +18,6 @@ public interface Foo {
public synthetic final static field $$delegatedProperties: kotlin.reflect.KProperty[]
static method <clinit>(): void
public synthetic static method access$test$jd(p0: Foo): java.lang.String
public synthetic static method access$test$lambda-0(p0: Delegate): java.lang.String
private static method test$lambda-0(p0: Delegate): java.lang.String
public @org.jetbrains.annotations.NotNull method test(): java.lang.String
public final inner class Foo$DefaultImpls
@@ -5,8 +5,6 @@
// WITH_COROUTINES
// WITH_RUNTIME
// IGNORE_BACKEND: JVM
import helpers.*
import kotlin.coroutines.*
import kotlin.coroutines.intrinsics.*
@@ -0,0 +1,31 @@
@kotlin.Metadata
public final class Foo$DefaultImpls {
// source: 'privateFunWithDefaultArg2.kt'
public deprecated static @java.lang.Deprecated @org.jetbrains.annotations.NotNull method bar(@org.jetbrains.annotations.NotNull p0: Foo): java.lang.String
public final inner class Foo$DefaultImpls
}
@kotlin.Metadata
public interface Foo {
// source: 'privateFunWithDefaultArg2.kt'
public synthetic static method access$bar$jd(p0: Foo): java.lang.String
public @org.jetbrains.annotations.NotNull method bar(): java.lang.String
public synthetic static method foo$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): java.lang.String
private method foo(p0: java.lang.String): java.lang.String
public final inner class Foo$DefaultImpls
}
@kotlin.Metadata
public final class PrivateFunWithDefaultArg2Kt$box$1 {
// source: 'privateFunWithDefaultArg2.kt'
enclosing method PrivateFunWithDefaultArg2Kt.box()Ljava/lang/String;
inner (anonymous) class PrivateFunWithDefaultArg2Kt$box$1
method <init>(): void
}
@kotlin.Metadata
public final class PrivateFunWithDefaultArg2Kt {
// source: 'privateFunWithDefaultArg2.kt'
inner (anonymous) class PrivateFunWithDefaultArg2Kt$box$1
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -0,0 +1,31 @@
@kotlin.Metadata
public final class Foo$DefaultImpls {
// source: 'privateFunWithDefaultArg2.kt'
public deprecated static @java.lang.Deprecated @org.jetbrains.annotations.NotNull method bar(@org.jetbrains.annotations.NotNull p0: Foo): java.lang.String
public final inner class Foo$DefaultImpls
}
@kotlin.Metadata
public interface Foo {
// source: 'privateFunWithDefaultArg2.kt'
public synthetic static method access$bar$jd(p0: Foo): java.lang.String
public @org.jetbrains.annotations.NotNull method bar(): java.lang.String
public synthetic static method foo$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): java.lang.String
private method foo(p0: java.lang.String): java.lang.String
public final inner class Foo$DefaultImpls
}
@kotlin.Metadata
public final class PrivateFunWithDefaultArg2Kt$box$1 {
// source: 'privateFunWithDefaultArg2.kt'
enclosing method PrivateFunWithDefaultArg2Kt.box()Ljava/lang/String;
inner (anonymous) class PrivateFunWithDefaultArg2Kt$box$1
method <init>(): void
}
@kotlin.Metadata
public final class PrivateFunWithDefaultArg2Kt {
// source: 'privateFunWithDefaultArg2.kt'
inner (anonymous) class PrivateFunWithDefaultArg2Kt$box$1
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
}
@@ -1,12 +1,7 @@
@kotlin.Metadata
public final class Foo$DefaultImpls {
// source: 'privateFunWithDefaultArg.kt'
public synthetic final static method access$fooSuspend(p0: Foo, p1: java.lang.String, p2: kotlin.coroutines.Continuation): java.lang.Object
public deprecated static @java.lang.Deprecated @org.jetbrains.annotations.NotNull method bar(@org.jetbrains.annotations.NotNull p0: Foo): java.lang.String
public synthetic static method foo$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): java.lang.String
private deprecated static @java.lang.Deprecated method foo(p0: Foo, p1: java.lang.String): java.lang.String
public synthetic static method fooSuspend$default(p0: Foo, p1: java.lang.String, p2: kotlin.coroutines.Continuation, p3: int, p4: java.lang.Object): java.lang.Object
private deprecated static @java.lang.Deprecated method fooSuspend(p0: Foo, p1: java.lang.String, p2: kotlin.coroutines.Continuation): java.lang.Object
public final inner class Foo$DefaultImpls
}
@@ -32,7 +27,6 @@ public interface Foo {
// source: 'privateFunWithDefaultArg.kt'
inner (anonymous) class Foo$bar$1
public synthetic static method access$bar$jd(p0: Foo): java.lang.String
public synthetic static method access$foo(p0: Foo, p1: java.lang.String): java.lang.String
public synthetic static method access$fooSuspend(p0: Foo, p1: java.lang.String, p2: kotlin.coroutines.Continuation): java.lang.Object
public @org.jetbrains.annotations.NotNull method bar(): java.lang.String
public synthetic static method foo$default(p0: Foo, p1: java.lang.String, p2: int, p3: java.lang.Object): java.lang.String