From 76acd23bd7fcb335f95180bd755a2a6fb64bf956 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 1 Sep 2017 16:09:16 +0300 Subject: [PATCH] Revert "Fix synthetic accessor generation for properties" This reverts commit 2427b2c --- .../codegen/context/CodegenContext.java | 22 +++++------------ ...orForProtectedPropertyWithPrivateSetter.kt | 24 ------------------- .../flags/WriteFlagsTestGenerated.java | 15 ------------ 3 files changed, 6 insertions(+), 55 deletions(-) delete mode 100644 compiler/testData/writeFlags/property/accessors/accessorForProtectedPropertyWithPrivateSetter.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java index 3d6c22506d5..e1389b9278e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java @@ -580,8 +580,7 @@ public abstract class CodegenContext { superCallTarget = (ClassDescriptor) enclosed; } - boolean isSuperCallTarget = superCallTarget != null; - if (descriptorContext == null && withinInliningContext && isSuperCallTarget) { + if (descriptorContext == null && withinInliningContext && superCallTarget != null) { //generate super calls within inline function through synthetic accessors descriptorContext = ExpressionCodegen.getParentContextSubclassOf((ClassDescriptor) enclosed, this); } @@ -607,9 +606,8 @@ public abstract class CodegenContext { PropertyGetterDescriptor getter = propertyDescriptor.getGetter(); int getterAccessFlag = getter == null ? propertyAccessFlag : propertyAccessFlag | getVisibilityAccessFlag(getter); - boolean getterAccessorRequired = - canGenerateAccessorInContext(getter == null ? propertyDescriptor : getter, descriptorContext) && - isAccessorRequired(getterAccessFlag, unwrappedDescriptor, descriptorContext, withinInliningContext, isSuperCallTarget); + boolean getterAccessorRequired = isAccessorRequired(getterAccessFlag, unwrappedDescriptor, descriptorContext, + withinInliningContext, superCallTarget != null); PropertySetterDescriptor setter = propertyDescriptor.getSetter(); @@ -617,9 +615,8 @@ public abstract class CodegenContext { if (setter != null && setter.getVisibility().normalize() != Visibilities.INVISIBLE_FAKE) { setterAccessFlag = propertyAccessFlag | getVisibilityAccessFlag(setter); } - boolean setterAccessorRequired = - canGenerateAccessorInContext(setter == null ? propertyDescriptor : setter, descriptorContext) && - isAccessorRequired(setterAccessFlag, unwrappedDescriptor, descriptorContext, withinInliningContext, isSuperCallTarget); + boolean setterAccessorRequired = isAccessorRequired(setterAccessFlag, unwrappedDescriptor, descriptorContext, + withinInliningContext, superCallTarget != null); if (!getterAccessorRequired && !setterAccessorRequired) { return descriptor; @@ -628,20 +625,13 @@ public abstract class CodegenContext { } else { int flag = getVisibilityAccessFlag(unwrappedDescriptor); - if (!isAccessorRequired(flag, unwrappedDescriptor, descriptorContext, withinInliningContext, isSuperCallTarget)) { + if (!isAccessorRequired(flag, unwrappedDescriptor, descriptorContext, withinInliningContext, superCallTarget != null)) { return descriptor; } return (D) descriptorContext.getAccessor(descriptor, superCallTarget); } } - private static boolean canGenerateAccessorInContext( - @NotNull CallableMemberDescriptor callableDescriptor, - @NotNull CodegenContext hostContext - ) { - return Visibilities.isVisibleWithAnyReceiver(callableDescriptor, hostContext.contextDescriptor); - } - private static boolean isAccessorRequired( int accessFlag, @NotNull CallableMemberDescriptor unwrappedDescriptor, diff --git a/compiler/testData/writeFlags/property/accessors/accessorForProtectedPropertyWithPrivateSetter.kt b/compiler/testData/writeFlags/property/accessors/accessorForProtectedPropertyWithPrivateSetter.kt deleted file mode 100644 index 27bbcd391c5..00000000000 --- a/compiler/testData/writeFlags/property/accessors/accessorForProtectedPropertyWithPrivateSetter.kt +++ /dev/null @@ -1,24 +0,0 @@ -// FILE: A.kt -package a - -abstract class A { - protected var property: String = "" - private set -} - -// FILE: B.kt -package b - -import a.A - -class B : A() { - init { - invoke { property } - } - - fun invoke(func: () -> String): String = func() -} - -// TESTED_OBJECT_KIND: function -// TESTED_OBJECTS: b/B, access$setProperty$p -// ABSENT: true \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index 986fcee45ba..d594273b59c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -746,21 +746,6 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/property"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } - @TestMetadata("compiler/testData/writeFlags/property/accessors") - @TestDataPath("$PROJECT_ROOT") - @RunWith(JUnit3RunnerWithInners.class) - public static class Accessors extends AbstractWriteFlagsTest { - @TestMetadata("accessorForProtectedPropertyWithPrivateSetter.kt") - public void testAccessorForProtectedPropertyWithPrivateSetter() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/property/accessors/accessorForProtectedPropertyWithPrivateSetter.kt"); - doTest(fileName); - } - - public void testAllFilesPresentInAccessors() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/property/accessors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); - } - } - @TestMetadata("compiler/testData/writeFlags/property/classObject") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)