Abstract var setter visibilities: now only private setters are forbidden
This commit is contained in:
committed by
Mikhail Glukhikh
parent
5ebbdd9f58
commit
98e0771ffa
+1
-1
@@ -209,7 +209,7 @@ public class DefaultErrorMessages {
|
||||
|
||||
MAP.put(GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY, "Getter visibility must be the same as property visibility");
|
||||
MAP.put(PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR, "Private setter is not allowed on non-private lateinit property");
|
||||
MAP.put(ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY, "Accessor visibilities are not allowed for abstract properties");
|
||||
MAP.put(ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY, "Private accessor visibilities are not allowed for abstract 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");
|
||||
|
||||
@@ -829,10 +829,7 @@ public class DeclarationsChecker {
|
||||
Map<KtModifierKeywordToken, PsiElement> tokens = modifiersChecker.getTokensCorrespondingToModifiers(accessorModifierList, Sets
|
||||
.newHashSet(KtTokens.PUBLIC_KEYWORD, KtTokens.PROTECTED_KEYWORD, KtTokens.PRIVATE_KEYWORD,
|
||||
KtTokens.INTERNAL_KEYWORD));
|
||||
if (propertyDescriptor.getModality() == Modality.ABSTRACT && accessorDescriptor.getVisibility() != propertyDescriptor.getVisibility()) {
|
||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY);
|
||||
}
|
||||
else if (accessor.isGetter()) {
|
||||
if (accessor.isGetter()) {
|
||||
if (accessorDescriptor.getVisibility() != propertyDescriptor.getVisibility()) {
|
||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY);
|
||||
}
|
||||
@@ -841,9 +838,13 @@ public class DeclarationsChecker {
|
||||
}
|
||||
}
|
||||
else if (accessorDescriptor.getVisibility() == Visibilities.PRIVATE
|
||||
&& propertyDescriptor.getVisibility() != Visibilities.PRIVATE
|
||||
&& propertyDescriptor.isLateInit()) {
|
||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR);
|
||||
&& propertyDescriptor.getVisibility() != Visibilities.PRIVATE) {
|
||||
if (propertyDescriptor.getModality() == Modality.ABSTRACT) {
|
||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY);
|
||||
}
|
||||
else if (propertyDescriptor.isLateInit()) {
|
||||
reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -4,12 +4,15 @@ abstract class My {
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||
|
||||
abstract val y: Int
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>protected<!> get
|
||||
<!GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY!>protected<!> get
|
||||
|
||||
abstract protected var z: Int
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>internal<!> get
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>public<!> set
|
||||
<!GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY!>internal<!> get
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>private<!> set
|
||||
|
||||
abstract internal val w: Int
|
||||
<!ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY!>protected<!> get
|
||||
<!GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY!>protected<!> get
|
||||
|
||||
abstract var u: Int
|
||||
protected set
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package
|
||||
|
||||
public abstract class My {
|
||||
public constructor My()
|
||||
public abstract var u: kotlin.Int
|
||||
internal abstract val w: kotlin.Int
|
||||
public abstract var x: kotlin.Int
|
||||
public abstract val y: kotlin.Int
|
||||
|
||||
Reference in New Issue
Block a user