Interface companion object backing fields become static
This commit is contained in:
@@ -747,7 +747,9 @@ public class AsmUtil {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return isNonCompanionObject(propertyDescriptor.getContainingDeclaration()) || isPropertyWithBackingFieldInOuterClass(propertyDescriptor);
|
return isNonCompanionObject(propertyDescriptor.getContainingDeclaration()) ||
|
||||||
|
isPropertyWithBackingFieldInOuterClass(propertyDescriptor) ||
|
||||||
|
isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) {
|
public static boolean isPropertyWithBackingFieldInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) {
|
||||||
@@ -756,8 +758,14 @@ public class AsmUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int getVisibilityForSpecialPropertyBackingField(@NotNull PropertyDescriptor propertyDescriptor, boolean isDelegate) {
|
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;
|
boolean isExtensionProperty = propertyDescriptor.getExtensionReceiverParameter() != null;
|
||||||
if (isDelegate || isExtensionProperty) {
|
if (isDelegate ||
|
||||||
|
isExtensionProperty ||
|
||||||
|
(!skipInterfaceCheck && isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration()))) {
|
||||||
return ACC_PRIVATE;
|
return ACC_PRIVATE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -783,7 +791,7 @@ public class AsmUtil {
|
|||||||
&& !isExtensionProperty
|
&& !isExtensionProperty
|
||||||
&& isCompanionObject(propertyContainer) && isInterface(propertyContainer.getContainingDeclaration())
|
&& isCompanionObject(propertyContainer) && isInterface(propertyContainer.getContainingDeclaration())
|
||||||
&& areBothAccessorDefault(propertyDescriptor)
|
&& areBothAccessorDefault(propertyDescriptor)
|
||||||
&& getVisibilityForSpecialPropertyBackingField(propertyDescriptor, false) == ACC_PUBLIC;
|
&& getVisibilityForSpecialPropertyBackingField(propertyDescriptor, false, true) == ACC_PUBLIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) {
|
public static boolean isCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) {
|
||||||
|
|||||||
+1
-2
@@ -24,9 +24,8 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
||||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
// FLAGS: ACC_FINAL, ACC_PRIVATE, ACC_STATIC
|
||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test, prop$delegate
|
// TESTED_OBJECTS: Test, prop$delegate
|
||||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
|
||||||
// ABSENT: TRUE
|
// ABSENT: TRUE
|
||||||
+1
-1
@@ -20,7 +20,7 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
// TESTED_OBJECTS: Test$Companion, prop$delegate
|
||||||
// FLAGS: ACC_FINAL, ACC_PRIVATE
|
// FLAGS: ACC_FINAL, ACC_PRIVATE, ACC_STATIC
|
||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test, prop$delegate
|
// TESTED_OBJECTS: Test, prop$delegate
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// TESTED_OBJECTS: Test$Companion, prop
|
||||||
// FLAGS: ACC_PRIVATE
|
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||||
@@ -10,4 +10,4 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// TESTED_OBJECTS: Test$Companion, prop
|
||||||
// FLAGS: ACC_PRIVATE
|
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||||
@@ -10,4 +10,4 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// TESTED_OBJECTS: Test$Companion, prop
|
||||||
// FLAGS: ACC_PRIVATE
|
// FLAGS: ACC_PRIVATE, ACC_STATIC
|
||||||
@@ -10,4 +10,4 @@ interface Test {
|
|||||||
|
|
||||||
// TESTED_OBJECT_KIND: property
|
// TESTED_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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_OBJECT_KIND: property
|
||||||
// TESTED_OBJECTS: Test$Companion, prop
|
// 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();
|
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) {
|
public static boolean isObject(@NotNull DeclarationDescriptor descriptor) {
|
||||||
return isKindOf(descriptor, ClassKind.OBJECT);
|
return isKindOf(descriptor, ClassKind.OBJECT);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user