Interface companion object backing fields become static

This commit is contained in:
Michael Bogdanov
2015-10-07 17:15:38 +03:00
parent 8f20595e8c
commit a9aa2bc147
18 changed files with 31 additions and 20 deletions
@@ -747,7 +747,9 @@ public class AsmUtil {
return false;
}
return isNonCompanionObject(propertyDescriptor.getContainingDeclaration()) || isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
return isNonCompanionObject(propertyDescriptor.getContainingDeclaration()) ||
isPropertyWithBackingFieldInOuterClass(propertyDescriptor) ||
isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration());
}
public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) {
@@ -756,8 +758,14 @@ public class AsmUtil {
}
public static int getVisibilityForSpecialPropertyBackingField(@NotNull PropertyDescriptor propertyDescriptor, boolean isDelegate) {
return getVisibilityForSpecialPropertyBackingField(propertyDescriptor, isDelegate, false);
}
public static int getVisibilityForSpecialPropertyBackingField(@NotNull PropertyDescriptor propertyDescriptor, boolean isDelegate, boolean skipInterfaceCheck) {
boolean isExtensionProperty = propertyDescriptor.getExtensionReceiverParameter() != null;
if (isDelegate || isExtensionProperty) {
if (isDelegate ||
isExtensionProperty ||
(!skipInterfaceCheck && isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration()))) {
return ACC_PRIVATE;
}
else {
@@ -783,7 +791,7 @@ public class AsmUtil {
&& !isExtensionProperty
&& isCompanionObject(propertyContainer) && isInterface(propertyContainer.getContainingDeclaration())
&& areBothAccessorDefault(propertyDescriptor)
&& getVisibilityForSpecialPropertyBackingField(propertyDescriptor, false) == ACC_PUBLIC;
&& getVisibilityForSpecialPropertyBackingField(propertyDescriptor, false, true) == ACC_PUBLIC;
}
public static boolean isCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) {