Interface companion object backing fields become static
This commit is contained in:
@@ -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) {
|
||||
|
||||
+1
-2
@@ -24,9 +24,8 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
||||
// FLAGS: ACC_FINAL, ACC_PRIVATE, ACC_STATIC
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test, prop$delegate
|
||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
||||
// ABSENT: TRUE
|
||||
+1
-1
@@ -20,7 +20,7 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
||||
// FLAGS: ACC_FINAL, ACC_PRIVATE, ACC_STATIC
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test, prop$delegate
|
||||
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
|
||||
+1
-1
@@ -11,4 +11,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL, ACC_STATIC
|
||||
+1
-1
@@ -11,4 +11,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL, ACC_STATIC
|
||||
+1
-1
@@ -13,4 +13,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL
|
||||
// FLAGS: ACC_PRIVATE, ACC_FINAL, ACC_STATIC
|
||||
@@ -10,4 +10,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
+1
-1
@@ -13,4 +13,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
+1
-1
@@ -11,4 +11,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
+1
-1
@@ -11,4 +11,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
|
||||
+1
-1
@@ -11,4 +11,4 @@ interface Test {
|
||||
|
||||
// TESTED_OBJECT_KIND: property
|
||||
// TESTED_OBJECTS: Test$Companion, prop
|
||||
// FLAGS: ACC_PRIVATE
|
||||
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||
|
||||
@@ -305,6 +305,10 @@ public class DescriptorUtils {
|
||||
return isKindOf(descriptor, ClassKind.OBJECT) && !((ClassDescriptor) descriptor).isCompanionObject();
|
||||
}
|
||||
|
||||
public static boolean isInterfaceCompanionObject(@NotNull DeclarationDescriptor descriptor) {
|
||||
return isCompanionObject(descriptor) && isKindOf(descriptor.getContainingDeclaration(), ClassKind.INTERFACE);
|
||||
}
|
||||
|
||||
public static boolean isObject(@NotNull DeclarationDescriptor descriptor) {
|
||||
return isKindOf(descriptor, ClassKind.OBJECT);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user