diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java index 799e7e957e9..be184bceafc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -203,7 +203,7 @@ public class DefaultErrorMessages { MAP.put(ABSTRACT_PROPERTY_WITH_SETTER, "Property with setter implementation cannot be abstract"); MAP.put(ABSTRACT_DELEGATED_PROPERTY, "Delegated property cannot be abstract"); - MAP.put(ACCESSOR_FOR_DELEGATED_PROPERTY, "Delegated property cannot have accessor"); + MAP.put(ACCESSOR_FOR_DELEGATED_PROPERTY, "Delegated property cannot have accessors with non-default implementations"); MAP.put(DELEGATED_PROPERTY_IN_TRAIT, "Delegated properties are not allowed in traits"); MAP.put(LOCAL_VARIABLE_WITH_DELEGATE, "Local variables are not allowed to have delegates"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index e59810dfb67..a2885ccf174 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -514,12 +514,12 @@ public class BodyResolver { @NotNull JetScope propertyScope ) { JetPropertyAccessor getter = jetProperty.getGetter(); - if (getter != null) { + if (getter != null && getter.hasBody()) { trace.report(ACCESSOR_FOR_DELEGATED_PROPERTY.on(getter)); } JetPropertyAccessor setter = jetProperty.getSetter(); - if (setter != null) { + if (setter != null && setter.hasBody()) { trace.report(ACCESSOR_FOR_DELEGATED_PROPERTY.on(setter)); } diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.kt b/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.kt new file mode 100644 index 00000000000..3b172935461 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.kt @@ -0,0 +1,10 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +val a: Int by Delegate() + get + +class Delegate { + fun get(t: Any?, p: PropertyMetadata): Int { + return 1 + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.txt b/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.txt new file mode 100644 index 00000000000..dd962f51820 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.txt @@ -0,0 +1,11 @@ +package + +internal val a: kotlin.Int + +internal final class Delegate { + public constructor Delegate() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + internal final fun get(/*0*/ t: kotlin.Any?, /*1*/ p: kotlin.PropertyMetadata): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.kt b/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.kt new file mode 100644 index 00000000000..727cb6013b3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +var a: Int by Delegate() + private set + +class Delegate { + fun get(t: Any?, p: PropertyMetadata): Int { + return 1 + } + + fun set(t: Any?, p: PropertyMetadata, i: Int) {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.txt b/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.txt new file mode 100644 index 00000000000..7dc74dd3adc --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.txt @@ -0,0 +1,12 @@ +package + +internal var a: kotlin.Int + +internal final class Delegate { + public constructor Delegate() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + internal final fun get(/*0*/ t: kotlin.Any?, /*1*/ p: kotlin.PropertyMetadata): kotlin.Int + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + internal final fun set(/*0*/ t: kotlin.Any?, /*1*/ p: kotlin.PropertyMetadata, /*2*/ i: kotlin.Int): kotlin.Unit + 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 0e2730a5492..18b45b26634 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/JetDiagnosticsTestGenerated.java @@ -3129,6 +3129,18 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("defaultGetter.kt") + public void testDefaultGetter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegatedProperty/defaultGetter.kt"); + doTest(fileName); + } + + @TestMetadata("defaultSetter.kt") + public void testDefaultSetter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegatedProperty/defaultSetter.kt"); + doTest(fileName); + } + @TestMetadata("delegatedPropertyOverridedInTrait.kt") public void testDelegatedPropertyOverridedInTrait() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/delegatedProperty/delegatedPropertyOverridedInTrait.kt");