Copy to interface just companion object public const properties

This commit is contained in:
Michael Bogdanov
2015-10-07 18:02:02 +03:00
parent a9aa2bc147
commit 12afbffb09
33 changed files with 111 additions and 79 deletions
@@ -758,14 +758,8 @@ 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 ||
(!skipInterfaceCheck && isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration()))) {
if (isDelegate || isExtensionProperty) {
return ACC_PRIVATE;
}
else {
@@ -785,13 +779,10 @@ public class AsmUtil {
}
public static boolean isPropertyWithBackingFieldCopyInOuterClass(@NotNull PropertyDescriptor propertyDescriptor) {
boolean isExtensionProperty = propertyDescriptor.getExtensionReceiverParameter() != null;
DeclarationDescriptor propertyContainer = propertyDescriptor.getContainingDeclaration();
return !propertyDescriptor.isVar()
&& !isExtensionProperty
&& isCompanionObject(propertyContainer) && isInterface(propertyContainer.getContainingDeclaration())
&& areBothAccessorDefault(propertyDescriptor)
&& getVisibilityForSpecialPropertyBackingField(propertyDescriptor, false, true) == ACC_PUBLIC;
return propertyDescriptor.isConst()
&& isInterfaceCompanionObject(propertyContainer)
&& propertyDescriptor.getVisibility() == Visibilities.PUBLIC;
}
public static boolean isCompanionObjectWithBackingFieldsInOuter(@NotNull DeclarationDescriptor companionObject) {
@@ -59,6 +59,7 @@ import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isCompanionObject;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isInterfaceCompanionObject;
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.PROPERTY_METADATA_TYPE;
import static org.jetbrains.kotlin.resolve.jvm.diagnostics.DiagnosticsPackage.OtherOrigin;
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
@@ -315,7 +316,9 @@ public class PropertyCodegen {
else if (hasPublicFieldAnnotation && !isDelegate) {
modifiers |= ACC_PUBLIC;
}
else {
else if (isInterfaceCompanionObject(propertyDescriptor.getContainingDeclaration())) {
modifiers |= ACC_PRIVATE;
} else {
modifiers |= getVisibilityForSpecialPropertyBackingField(propertyDescriptor, isDelegate);
}
@@ -66,14 +66,14 @@ public class GenerationState @JvmOverloads constructor(
public val incrementalCompilationComponents: IncrementalCompilationComponents? = null,
public val progress: Progress = Progress.DEAF
) {
public interface GenerateClassFilter {
public fun shouldAnnotateClass(classOrObject: JetClassOrObject): Boolean
public fun shouldGenerateClass(classOrObject: JetClassOrObject): Boolean
public fun shouldGeneratePackagePart(jetFile: JetFile): Boolean
public fun shouldGenerateScript(script: JetScript): Boolean
public abstract class GenerateClassFilter {
public abstract fun shouldAnnotateClass(classOrObject: JetClassOrObject): Boolean
public abstract fun shouldGenerateClass(classOrObject: JetClassOrObject): Boolean
public abstract fun shouldGeneratePackagePart(jetFile: JetFile): Boolean
public abstract fun shouldGenerateScript(script: JetScript): Boolean
companion object {
public val GENERATE_ALL: GenerateClassFilter = object : GenerateClassFilter {
public val GENERATE_ALL: GenerateClassFilter = object : GenerateClassFilter() {
override fun shouldAnnotateClass(classOrObject: JetClassOrObject): Boolean = true
override fun shouldGenerateClass(classOrObject: JetClassOrObject): Boolean = true