Private setters are now deprecated for open properties
This commit is contained in:
@@ -340,6 +340,7 @@ public interface Errors {
|
|||||||
DiagnosticFactory0<PsiElement> GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<PsiElement> GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory0<PsiElement> SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<PsiElement> SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY = DiagnosticFactory0.create(ERROR);
|
||||||
DiagnosticFactory0<PsiElement> PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<PsiElement> PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR);
|
||||||
|
DiagnosticFactory0<PsiElement> PRIVATE_SETTER_FOR_OPEN_PROPERTY = DiagnosticFactory0.create(WARNING);
|
||||||
DiagnosticFactory2<KtTypeReference, KotlinType, KotlinType> WRONG_GETTER_RETURN_TYPE = DiagnosticFactory2.create(ERROR);
|
DiagnosticFactory2<KtTypeReference, KotlinType, KotlinType> WRONG_GETTER_RETURN_TYPE = DiagnosticFactory2.create(ERROR);
|
||||||
DiagnosticFactory0<KtTypeReference> WRONG_SETTER_RETURN_TYPE = DiagnosticFactory0.create(ERROR);
|
DiagnosticFactory0<KtTypeReference> WRONG_SETTER_RETURN_TYPE = DiagnosticFactory0.create(ERROR);
|
||||||
|
|
||||||
|
|||||||
+1
@@ -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(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(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_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(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, "Property must be initialized");
|
||||||
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
|
MAP.put(MUST_BE_INITIALIZED_OR_BE_ABSTRACT, "Property must be initialized or be abstract");
|
||||||
|
|||||||
@@ -829,10 +829,15 @@ public class DeclarationsChecker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (propertyDescriptor.getModality() == Modality.ABSTRACT
|
if (propertyDescriptor.getModality() != Modality.FINAL
|
||||||
&& accessorDescriptor.getVisibility() == Visibilities.PRIVATE
|
&& accessorDescriptor.getVisibility() == Visibilities.PRIVATE
|
||||||
&& propertyDescriptor.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()) {
|
else if (propertyDescriptor.isLateInit() && accessorDescriptor.getVisibility() != propertyDescriptor.getVisibility()) {
|
||||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY);
|
reportVisibilityModifierDiagnostics(tokens.values(), Errors.SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY);
|
||||||
|
|||||||
@@ -15,4 +15,7 @@ abstract class My {
|
|||||||
|
|
||||||
abstract var u: Int
|
abstract var u: Int
|
||||||
protected set
|
protected set
|
||||||
|
|
||||||
|
open var t: Int = 0
|
||||||
|
<!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@ package
|
|||||||
|
|
||||||
public abstract class My {
|
public abstract class My {
|
||||||
public constructor My()
|
public constructor My()
|
||||||
|
public open var t: kotlin.Int
|
||||||
public abstract var u: kotlin.Int
|
public abstract var u: kotlin.Int
|
||||||
internal abstract val w: kotlin.Int
|
internal abstract val w: kotlin.Int
|
||||||
public abstract var x: kotlin.Int
|
public abstract var x: kotlin.Int
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@ interface MyTrait {
|
|||||||
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
||||||
|
|
||||||
var b: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
var b: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||||
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; private set
|
var b1: Int = <!PROPERTY_INITIALIZER_IN_INTERFACE!>0<!>; <!PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set
|
||||||
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> var b2: Int <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||||
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
<!ABSTRACT_MODIFIER_IN_INTERFACE!>abstract<!> var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ abstract class ATest {
|
|||||||
class Test: ATest(), ITest {
|
class Test: ATest(), ITest {
|
||||||
override var prop : Int
|
override var prop : Int
|
||||||
get() = 12
|
get() = 12
|
||||||
<!CANNOT_WEAKEN_ACCESS_PRIVILEGE!>private<!> set(value) {}
|
<!CANNOT_WEAKEN_ACCESS_PRIVILEGE, PRIVATE_SETTER_FOR_OPEN_PROPERTY!>private<!> set(value) {}
|
||||||
|
|
||||||
override var prop2 : Int
|
override var prop2 : Int
|
||||||
get() = 14
|
get() = 14
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ public class QuickFixRegistrar : QuickFixContributor {
|
|||||||
GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(removeModifierFactory)
|
GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(removeModifierFactory)
|
||||||
SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY.registerFactory(removeModifierFactory)
|
SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY.registerFactory(removeModifierFactory)
|
||||||
PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY.registerFactory(removeModifierFactory)
|
PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY.registerFactory(removeModifierFactory)
|
||||||
|
PRIVATE_SETTER_FOR_OPEN_PROPERTY.registerFactory(removeModifierFactory)
|
||||||
REDUNDANT_MODIFIER_IN_GETTER.registerFactory(removeRedundantModifierFactory)
|
REDUNDANT_MODIFIER_IN_GETTER.registerFactory(removeRedundantModifierFactory)
|
||||||
WRONG_MODIFIER_TARGET.registerFactory(removeModifierFactory)
|
WRONG_MODIFIER_TARGET.registerFactory(removeModifierFactory)
|
||||||
REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(removeModifierFactory)
|
REDUNDANT_MODIFIER_FOR_TARGET.registerFactory(removeModifierFactory)
|
||||||
|
|||||||
Vendored
+1
-1
@@ -71,7 +71,7 @@ interface MyTrait {
|
|||||||
<warning>abstract</warning> val a3: Int = <error>1</error>
|
<warning>abstract</warning> val a3: Int = <error>1</error>
|
||||||
|
|
||||||
var b: Int <error>private</error> set
|
var b: Int <error>private</error> set
|
||||||
var b1: Int = <error>0</error>; private set
|
var b1: Int = <error>0</error>; <warning>private</warning> set
|
||||||
<warning>abstract</warning> var b2: Int <error>private</error> set
|
<warning>abstract</warning> var b2: Int <error>private</error> set
|
||||||
<warning>abstract</warning> var b3: Int = <error>0</error>; <error>private</error> set
|
<warning>abstract</warning> var b3: Int = <error>0</error>; <error>private</error> set
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user