Generate proper visibility for companion object instance field in LV1.3+

This commit is contained in:
Dmitry Petrov
2017-11-24 16:44:25 +03:00
parent 70d3e6592d
commit f586bd4a34
7 changed files with 76 additions and 5 deletions
@@ -839,11 +839,18 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
@Nullable KtObjectDeclaration companionObject = CollectionsKt.firstOrNull(myClass.getCompanionObjects());
int properFieldVisibilityFlag = getVisibilityAccessFlag(companionObjectDescriptor);
boolean deprecatedFieldForInvisibleCompanionObject =
state.getLanguageVersionSettings().supportsFeature(LanguageFeature.DeprecatedFieldForInvisibleCompanionObject);
boolean properVisibilityForCompanionObjectInstanceField =
state.getLanguageVersionSettings().supportsFeature(LanguageFeature.ProperVisibilityForCompanionObjectInstanceField);
boolean fieldShouldBeDeprecated =
state.getLanguageVersionSettings().supportsFeature(LanguageFeature.DeprecatedFieldForInvisibleCompanionObject) &&
deprecatedFieldForInvisibleCompanionObject &&
!properVisibilityForCompanionObjectInstanceField &&
(properFieldVisibilityFlag & (ACC_PRIVATE | ACC_PROTECTED)) != 0;
// TODO generate field with proper visibility in language version 1.3
int fieldAccessFlags = ACC_PUBLIC | ACC_STATIC | ACC_FINAL;
if (properVisibilityForCompanionObjectInstanceField) {
fieldAccessFlags |= properFieldVisibilityFlag;
}
if (fieldShouldBeDeprecated) {
fieldAccessFlags |= ACC_DEPRECATED;
}