diff --git a/compiler/testData/diagnostics/tests/ExternalAccessors.kt b/compiler/testData/diagnostics/tests/ExternalAccessors.kt new file mode 100644 index 00000000000..b88881b6c4e --- /dev/null +++ b/compiler/testData/diagnostics/tests/ExternalAccessors.kt @@ -0,0 +1,19 @@ +// See KT-13997 + +class Foo { + var bar: Int // Ok + external get + external set +} + +class Bar { + val foo: Int // Ok + external get + + var baz: Int + external get + + var gav: Int + external set +} + diff --git a/compiler/testData/diagnostics/tests/ExternalAccessors.txt b/compiler/testData/diagnostics/tests/ExternalAccessors.txt new file mode 100644 index 00000000000..438ea391e1a --- /dev/null +++ b/compiler/testData/diagnostics/tests/ExternalAccessors.txt @@ -0,0 +1,19 @@ +package + +public final class Bar { + public constructor Bar() + public final var baz: kotlin.Int + public final val foo: kotlin.Int + public final var gav: kotlin.Int + 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 +} + +public final class Foo { + public constructor Foo() + public final var bar: kotlin.Int + 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/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 5873e994fbc..207feef67f3 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -254,6 +254,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("ExternalAccessors.kt") + public void testExternalAccessors() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/ExternalAccessors.kt"); + doTest(fileName); + } + @TestMetadata("ExternalAndAbstract.kt") public void testExternalAndAbstract() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/ExternalAndAbstract.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt index 110b5296b88..742f928ef4f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.kt @@ -422,6 +422,11 @@ fun MemberDescriptor.isEffectivelyExternal(): Boolean { if (variableDescriptor.isEffectivelyExternal()) return true } + if (this is PropertyDescriptor) { + if (getter?.isExternal == true && + (!isVar || setter?.isExternal == true)) return true + } + val containingClass = getContainingClass(this) return containingClass != null && containingClass.isEffectivelyExternal() }