diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 73e7d483ea5..4b4064cbc46 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -340,6 +340,7 @@ public interface Errors { DiagnosticFactory0 GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR); + DiagnosticFactory0 PRIVATE_SETTER_FOR_OPEN_PROPERTY = DiagnosticFactory0.create(WARNING); DiagnosticFactory2 WRONG_GETTER_RETURN_TYPE = DiagnosticFactory2.create(ERROR); DiagnosticFactory0 WRONG_SETTER_RETURN_TYPE = DiagnosticFactory0.create(ERROR); 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 326936f4a39..cf8bab8a3b7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/rendering/DefaultErrorMessages.java @@ -211,6 +211,7 @@ public class DefaultErrorMessages { MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility"); MAP.put(SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY, "Setter visibility must be the same as lateinit property visibility"); MAP.put(PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY, "Private setters are not allowed for abstract properties"); + MAP.put(PRIVATE_SETTER_FOR_OPEN_PROPERTY, "Private setters are deprecated for open properties"); MAP.put(BACKING_FIELD_IN_INTERFACE, "Property in an interface cannot have a backing field"); MAP.put(MUST_BE_INITIALIZED, "Property must be initialized"); MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java index ed01e9d50ca..cbb3bf37d49 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DeclarationsChecker.java @@ -829,10 +829,15 @@ public class DeclarationsChecker { } } else { - if (propertyDescriptor.getModality() == Modality.ABSTRACT + if (propertyDescriptor.getModality() != Modality.FINAL && accessorDescriptor.getVisibility() == Visibilities.PRIVATE && propertyDescriptor.getVisibility() != Visibilities.PRIVATE) { - reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY); + if (propertyDescriptor.getModality() == Modality.ABSTRACT) { + reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY); + } + else { + reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_FOR_OPEN_PROPERTY); + } } else if (propertyDescriptor.isLateInit() && accessorDescriptor.getVisibility() != propertyDescriptor.getVisibility()) { reportVisibilityModifierDiagnostics(tokens.values(), Errors.SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY); diff --git a/compiler/testData/diagnostics/tests/AbstractAccessor.kt b/compiler/testData/diagnostics/tests/AbstractAccessor.kt index 253340a9a85..f1bdb737aa1 100644 --- a/compiler/testData/diagnostics/tests/AbstractAccessor.kt +++ b/compiler/testData/diagnostics/tests/AbstractAccessor.kt @@ -15,4 +15,7 @@ abstract class My { abstract var u: Int protected set + + open var t: Int = 0 + private set } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/AbstractAccessor.txt b/compiler/testData/diagnostics/tests/AbstractAccessor.txt index 931032e8823..d7f065633d8 100644 --- a/compiler/testData/diagnostics/tests/AbstractAccessor.txt +++ b/compiler/testData/diagnostics/tests/AbstractAccessor.txt @@ -2,6 +2,7 @@ package public abstract class My { public constructor My() + public open var t: kotlin.Int public abstract var u: kotlin.Int internal abstract val w: kotlin.Int public abstract var x: kotlin.Int diff --git a/compiler/testData/diagnostics/tests/AbstractInTrait.kt b/compiler/testData/diagnostics/tests/AbstractInTrait.kt index a3573742b8a..30ea1bdc4f6 100644 --- a/compiler/testData/diagnostics/tests/AbstractInTrait.kt +++ b/compiler/testData/diagnostics/tests/AbstractInTrait.kt @@ -8,7 +8,7 @@ interface MyTrait { abstract val a3: Int = 1 var b: Int private set - var b1: Int = 0; private set + var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set diff --git a/compiler/testData/diagnostics/tests/OverridenSetterVisibility.kt b/compiler/testData/diagnostics/tests/OverridenSetterVisibility.kt index bd2c6ad393b..87336c4b47c 100644 --- a/compiler/testData/diagnostics/tests/OverridenSetterVisibility.kt +++ b/compiler/testData/diagnostics/tests/OverridenSetterVisibility.kt @@ -13,7 +13,7 @@ abstract class ATest { class Test: ATest(), ITest { override var prop : Int get() = 12 - private set(value) {} + private set(value) {} override var prop2 : Int get() = 14 diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 67a1ad334a3..4ec7ca4747f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -117,6 +117,7 @@ public class QuickFixRegistrar : QuickFixContributor { GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(removeModifierFactory) SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY.registerFactory(removeModifierFactory) PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY.registerFactory(removeModifierFactory) + PRIVATE_SETTER_FOR_OPEN_PROPERTY.registerFactory(removeModifierFactory) REDUNDANT_MODIFIER_IN_GETTER.registerFactory(removeRedundantModifierFactory) WRONG_MODIFIER_TARGET.registerFactory(removeModifierFactory) REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(removeModifierFactory) diff --git a/idea/testData/checker/Abstract.kt b/idea/testData/checker/Abstract.kt index 812ab11c211..8ce57040cb9 100644 --- a/idea/testData/checker/Abstract.kt +++ b/idea/testData/checker/Abstract.kt @@ -71,7 +71,7 @@ interface MyTrait { abstract val a3: Int = 1 var b: Int private set - var b1: Int = 0; private set + var b1: Int = 0; private set abstract var b2: Int private set abstract var b3: Int = 0; private set