Revert "Fix synthetic accessor generation for properties"

This reverts commit 2427b2c
This commit is contained in:
Dmitry Petrov
2017-09-01 16:09:16 +03:00
parent db840a73a9
commit 76acd23bd7
3 changed files with 6 additions and 55 deletions
@@ -580,8 +580,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
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<T extends DeclarationDescriptor> {
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<T extends DeclarationDescriptor> {
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<T extends DeclarationDescriptor> {
}
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,
@@ -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
@@ -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)