Skip to content

Commit 847c79c

Browse files
Googlercopybara-github
authored andcommitted
[J2KT] Fix visibility translation of protected methods overriding protected methods which are translated as public.
These overrides are currently translated as `protected`, but should also be translated as `public`. PiperOrigin-RevId: 926042301
1 parent 14ade23 commit 847c79c

5 files changed

Lines changed: 20 additions & 76 deletions

File tree

transpiler/java/com/google/j2cl/transpiler/backend/kotlin/MemberDescriptorUtils.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,17 @@ internal val MemberDescriptor.ktVisibility: KtVisibility
4646
isConstructor && hasInjectAnnotation -> KtVisibility.PUBLIC
4747
// When not translating actual visibilites, map protected to public, to allow access within
4848
// the same package across different types.
49-
!useActualKtVisibility && visibility.isProtected -> KtVisibility.PUBLIC
49+
isProtectedTranslatedAsPublic -> KtVisibility.PUBLIC
50+
// Overrides of protected methods translated as public needs to be public.
51+
this is MethodDescriptor && overridesProtectedAsPublic -> KtVisibility.PUBLIC
5052
// For all other cases, use the default visibility mapping.
5153
else -> KtVisibility.from(visibility)
5254
}
55+
56+
internal val MemberDescriptor.isProtectedTranslatedAsPublic: Boolean
57+
get() = !useActualKtVisibility && visibility.isProtected
58+
59+
internal val MethodDescriptor.overridesProtectedAsPublic: Boolean
60+
get() = javaOverriddenMethodDescriptors.any {
61+
it.isProtectedTranslatedAsPublic || it.overridesProtectedAsPublic
62+
}

transpiler/javatests/com/google/j2cl/readable/java/j2kt/VisibilityModifiers.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,11 @@ protected void protectedMethod() {}
5858
private void privateMethod() {}
5959
}
6060

61-
// TODO(b/519538678): Uncomment when fixed.
62-
// public static class ProtectedOverrideOfVisibilityWarningsSuppressed
63-
// extends VisibilityWarningsSuppressed.Public {
64-
// @Override
65-
// protected void protectedMethod() {}
66-
// }
61+
public static class ProtectedOverrideOfVisibilityWarningsSuppressed
62+
extends VisibilityWarningsSuppressed.Public {
63+
@Override
64+
protected void protectedMethod() {}
65+
}
6766

6867
@AutoValue
6968
abstract static class Value {

transpiler/javatests/com/google/j2cl/readable/java/j2kt/output_kt/VisibilityModifiers.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ class VisibilityModifiers {
6464
private fun privateMethod() {}
6565
}
6666

67+
open class ProtectedOverrideOfVisibilityWarningsSuppressed: j2kt.VisibilityModifiers.VisibilityWarningsSuppressed.Public() {
68+
override fun protectedMethod() {}
69+
}
70+
6771
@WasAutoValue
6872
internal abstract class Value {
6973
@javaemul.lang.annotations.WasAutoValue.Builder

transpiler/javatests/com/google/j2cl/readable/java/j2ktnotpassing/VisibilityModifiers.java

Lines changed: 0 additions & 34 deletions
This file was deleted.

transpiler/javatests/com/google/j2cl/readable/java/j2ktnotpassing/output_kt/VisibilityModifiers.kt.txt

Lines changed: 0 additions & 35 deletions
This file was deleted.

0 commit comments

Comments
 (0)