KT-29144 Interface companion object field should always be ACC_PUBLIC

This commit is contained in:
Dmitry Petrov
2019-01-21 17:08:25 +03:00
parent 129ea49d64
commit ae8a90f7b4
@@ -795,16 +795,14 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
!properVisibilityForCompanionObjectInstanceField && !properVisibilityForCompanionObjectInstanceField &&
(hasPrivateOrProtectedProperVisibility || hasPackagePrivateProperVisibility || (hasPrivateOrProtectedProperVisibility || hasPackagePrivateProperVisibility ||
isNonIntrinsicPrivateCompanionObjectInInterface(companionObjectDescriptor)); isNonIntrinsicPrivateCompanionObjectInInterface(companionObjectDescriptor));
boolean doNotGeneratePublic = boolean fieldIsForcedToBePublic =
properVisibilityForCompanionObjectInstanceField && hasPrivateOrProtectedProperVisibility; JvmCodegenUtil.isJvmInterface(descriptor) ||
int fieldAccessFlags; !properVisibilityForCompanionObjectInstanceField;
if (doNotGeneratePublic) { int fieldAccessFlags = ACC_STATIC | ACC_FINAL;
fieldAccessFlags = ACC_STATIC | ACC_FINAL; if (fieldIsForcedToBePublic) {
fieldAccessFlags |= ACC_PUBLIC;
} }
else { else {
fieldAccessFlags = ACC_PUBLIC | ACC_STATIC | ACC_FINAL;
}
if (properVisibilityForCompanionObjectInstanceField) {
fieldAccessFlags |= properFieldVisibilityFlag; fieldAccessFlags |= properFieldVisibilityFlag;
} }
if (fieldShouldBeDeprecated) { if (fieldShouldBeDeprecated) {