diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index 33b7502212d..de4be006fa7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -776,11 +776,11 @@ public class BodyResolver { ); // Synthetic "field" creation - if (functionDescriptor instanceof PropertyAccessorDescriptor) { + if (functionDescriptor instanceof PropertyAccessorDescriptor && functionDescriptor.getExtensionReceiverParameter() == null) { PropertyAccessorDescriptor accessorDescriptor = (PropertyAccessorDescriptor) functionDescriptor; JetProperty property = (JetProperty) function.getParent(); final SyntheticFieldDescriptor fieldDescriptor = new SyntheticFieldDescriptor(accessorDescriptor, property); - innerScope = new LexicalScopeImpl(innerScope, functionDescriptor, true, functionDescriptor.getExtensionReceiverParameter(), + innerScope = new LexicalScopeImpl(innerScope, functionDescriptor, true, null, "Accessor inner scope with synthetic field", RedeclarationHandler.DO_NOTHING, new Function1() { @Override diff --git a/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.kt b/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.kt new file mode 100644 index 00000000000..461ae219f3c --- /dev/null +++ b/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.kt @@ -0,0 +1,17 @@ +// See KT-9303: synthetic field variable does not exist for extension properties +val String.foo: Int + get() { + // No shadowing here + val field = 42 + return field + } + +val String.bar: Int = 13 + // Error + get() = field + +class My { + val String.x: Int = 7 + // Error + get() = field +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.txt b/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.txt new file mode 100644 index 00000000000..b95a582a7df --- /dev/null +++ b/compiler/testData/diagnostics/tests/backingField/ExtensionProperty.txt @@ -0,0 +1,12 @@ +package + +public val kotlin.String.bar: kotlin.Int = 13 +public val kotlin.String.foo: kotlin.Int + +public final class My { + public constructor My() + public final val kotlin.String.x: kotlin.Int = 7 + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java index 629a335c45c..7bdd5b1a4e8 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -1374,6 +1374,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("ExtensionProperty.kt") + public void testExtensionProperty() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/backingField/ExtensionProperty.kt"); + doTest(fileName); + } + @TestMetadata("FieldAsParam.kt") public void testFieldAsParam() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/backingField/FieldAsParam.kt");