Differentiate accessors by FieldAccessorKind
Otherwise accessors for backing fields (as in '{ field }') clash with
accessors for properties (as in '{ prop }').
#KT-21258 Fixed Target versions 1.2.30
This commit is contained in:
@@ -57,13 +57,16 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
|||||||
private static class AccessorKey {
|
private static class AccessorKey {
|
||||||
public final DeclarationDescriptor descriptor;
|
public final DeclarationDescriptor descriptor;
|
||||||
public final ClassDescriptor superCallLabelTarget;
|
public final ClassDescriptor superCallLabelTarget;
|
||||||
|
public final FieldAccessorKind fieldAccessorKind;
|
||||||
|
|
||||||
public AccessorKey(
|
public AccessorKey(
|
||||||
@NotNull DeclarationDescriptor descriptor,
|
@NotNull DeclarationDescriptor descriptor,
|
||||||
@Nullable ClassDescriptor superCallLabelTarget
|
@Nullable ClassDescriptor superCallLabelTarget,
|
||||||
|
@NotNull FieldAccessorKind fieldAccessorKind
|
||||||
) {
|
) {
|
||||||
this.descriptor = descriptor;
|
this.descriptor = descriptor;
|
||||||
this.superCallLabelTarget = superCallLabelTarget;
|
this.superCallLabelTarget = superCallLabelTarget;
|
||||||
|
this.fieldAccessorKind = fieldAccessorKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -71,13 +74,16 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
|||||||
if (!(obj instanceof AccessorKey)) return false;
|
if (!(obj instanceof AccessorKey)) return false;
|
||||||
AccessorKey other = (AccessorKey) obj;
|
AccessorKey other = (AccessorKey) obj;
|
||||||
return descriptor.equals(other.descriptor) &&
|
return descriptor.equals(other.descriptor) &&
|
||||||
|
fieldAccessorKind == other.fieldAccessorKind &&
|
||||||
(superCallLabelTarget == null ? other.superCallLabelTarget == null
|
(superCallLabelTarget == null ? other.superCallLabelTarget == null
|
||||||
: superCallLabelTarget.equals(other.superCallLabelTarget));
|
: superCallLabelTarget.equals(other.superCallLabelTarget));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return 31 * descriptor.hashCode() + (superCallLabelTarget == null ? 0 : superCallLabelTarget.hashCode());
|
return 31 * descriptor.hashCode() +
|
||||||
|
fieldAccessorKind.hashCode() +
|
||||||
|
(superCallLabelTarget == null ? 0 : superCallLabelTarget.hashCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -458,7 +464,7 @@ public abstract class CodegenContext<T extends DeclarationDescriptor> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
D descriptor = (D) possiblySubstitutedDescriptor.getOriginal();
|
D descriptor = (D) possiblySubstitutedDescriptor.getOriginal();
|
||||||
AccessorKey key = new AccessorKey(descriptor, superCallTarget);
|
AccessorKey key = new AccessorKey(descriptor, superCallTarget, accessorKind);
|
||||||
|
|
||||||
// NB should check for property accessor factory first (or change property accessor tracking under propertyAccessorFactory creation)
|
// NB should check for property accessor factory first (or change property accessor tracking under propertyAccessorFactory creation)
|
||||||
if (propertyAccessorFactories.containsKey(key)) {
|
if (propertyAccessorFactories.containsKey(key)) {
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
class Foo {
|
||||||
|
private val fld: String = "O"
|
||||||
|
get() = { field }() + "K"
|
||||||
|
|
||||||
|
val indirectFldGetter: () -> String = { fld }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() = Foo().indirectFldGetter()
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
class Foo {
|
||||||
|
private val fld: String = "O"
|
||||||
|
get() = { field }() + "K"
|
||||||
|
|
||||||
|
val indirectFldGetter: () -> String = { fld }
|
||||||
|
|
||||||
|
fun simpleFldGetter(): String {
|
||||||
|
return fld
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box() = Foo().simpleFldGetter()
|
||||||
+12
@@ -20153,6 +20153,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_indirect.kt")
|
||||||
|
public void testKt21258_indirect() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_indirect.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_simple.kt")
|
||||||
|
public void testKt21258_simple() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_simple.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt9717.kt")
|
@TestMetadata("kt9717.kt")
|
||||||
public void testKt9717() throws Exception {
|
public void testKt9717() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
||||||
|
|||||||
@@ -20153,6 +20153,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_indirect.kt")
|
||||||
|
public void testKt21258_indirect() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_indirect.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_simple.kt")
|
||||||
|
public void testKt21258_simple() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_simple.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt9717.kt")
|
@TestMetadata("kt9717.kt")
|
||||||
public void testKt9717() throws Exception {
|
public void testKt9717() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
||||||
|
|||||||
@@ -20153,6 +20153,18 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_indirect.kt")
|
||||||
|
public void testKt21258_indirect() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_indirect.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_simple.kt")
|
||||||
|
public void testKt21258_simple() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_simple.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt9717.kt")
|
@TestMetadata("kt9717.kt")
|
||||||
public void testKt9717() throws Exception {
|
public void testKt9717() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
||||||
|
|||||||
+12
@@ -23819,6 +23819,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_indirect.kt")
|
||||||
|
public void testKt21258_indirect() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_indirect.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt21258_simple.kt")
|
||||||
|
public void testKt21258_simple() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt21258_simple.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kt9717.kt")
|
@TestMetadata("kt9717.kt")
|
||||||
public void testKt9717() throws Exception {
|
public void testKt9717() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/syntheticAccessors/kt9717.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user