lateinit setter now must have the same visibility as its property visibility

This commit is contained in:
Mikhail Glukhikh
2015-11-03 14:54:57 +03:00
parent 9d3fa7da80
commit 873550b0bb
7 changed files with 23 additions and 14 deletions
@@ -337,7 +337,7 @@ public interface Errors {
DiagnosticFactory0<PsiElement> REDUNDANT_MODIFIER_IN_GETTER = DiagnosticFactory0.create(WARNING); DiagnosticFactory0<PsiElement> REDUNDANT_MODIFIER_IN_GETTER = DiagnosticFactory0.create(WARNING);
DiagnosticFactory0<PsiElement> GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR); DiagnosticFactory0<PsiElement> ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY = DiagnosticFactory0.create(ERROR);
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);
@@ -208,7 +208,7 @@ public class DefaultErrorMessages {
MAP.put(INAPPLICABLE_LATEINIT_MODIFIER, "''lateinit'' modifier {0}", STRING); MAP.put(INAPPLICABLE_LATEINIT_MODIFIER, "''lateinit'' modifier {0}", STRING);
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(PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR, "Private setter is not allowed on non-private lateinit property"); MAP.put(SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY, "Setter visibility must be the same as lateinit property visibility");
MAP.put(ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY, "Private 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(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");
@@ -837,13 +837,14 @@ public class DeclarationsChecker {
reportVisibilityModifierDiagnostics(tokens.values(), Errors.REDUNDANT_MODIFIER_IN_GETTER); reportVisibilityModifierDiagnostics(tokens.values(), Errors.REDUNDANT_MODIFIER_IN_GETTER);
} }
} }
else if (accessorDescriptor.getVisibility() == Visibilities.PRIVATE else {
&& propertyDescriptor.getVisibility() != Visibilities.PRIVATE) { if (propertyDescriptor.getModality() == Modality.ABSTRACT
if (propertyDescriptor.getModality() == Modality.ABSTRACT) { && accessorDescriptor.getVisibility() == Visibilities.PRIVATE
&& propertyDescriptor.getVisibility() != Visibilities.PRIVATE) {
reportVisibilityModifierDiagnostics(tokens.values(), Errors.ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY); reportVisibilityModifierDiagnostics(tokens.values(), Errors.ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY);
} }
else if (propertyDescriptor.isLateInit()) { else if (propertyDescriptor.isLateInit() && accessorDescriptor.getVisibility() != propertyDescriptor.getVisibility()) {
reportVisibilityModifierDiagnostics(tokens.values(), Errors.PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR); reportVisibilityModifierDiagnostics(tokens.values(), Errors.SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY);
} }
} }
} }
+1 -1
View File
@@ -16,7 +16,7 @@ public abstract class A<T: Any, V: String?>(<!INAPPLICABLE_LATEINIT_MODIFIER!>la
public lateinit var e: String public lateinit var e: String
get get
<!PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR!>private<!> set <!SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY!>private<!> set
fun a() { fun a() {
<!WRONG_MODIFIER_TARGET!>lateinit<!> var <!UNUSED_VARIABLE!>a<!>: String <!WRONG_MODIFIER_TARGET!>lateinit<!> var <!UNUSED_VARIABLE!>a<!>: String
+11 -5
View File
@@ -1,16 +1,22 @@
class My { class My {
lateinit var x: String lateinit var x: String
<!PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR!>private<!> set <!SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY!>private<!> set
lateinit var y: String lateinit var y: String
// Ok, non-private setter <!SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY!>internal<!> set
internal set
lateinit protected var z: String lateinit protected var z: String
<!PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR!>private<!> set <!SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY!>private<!> set
lateinit private var w: String lateinit private var w: String
// Ok, private var // Ok, private var / private set
private set private set
lateinit protected var v: String
<!SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY!>public<!> set
lateinit public var u: String
// Ok, public var / public set
public set
} }
@@ -2,6 +2,8 @@ package
public final class My { public final class My {
public constructor My() public constructor My()
public final lateinit var u: kotlin.String
protected final lateinit var v: kotlin.String
private final lateinit var w: kotlin.String private final lateinit var w: kotlin.String
public final lateinit var x: kotlin.String public final lateinit var x: kotlin.String
public final lateinit var y: kotlin.String public final lateinit var y: kotlin.String
@@ -114,7 +114,7 @@ public class QuickFixRegistrar : QuickFixContributor {
val removeModifierFactory = RemoveModifierFix.createRemoveModifierFactory() val removeModifierFactory = RemoveModifierFix.createRemoveModifierFactory()
GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(removeModifierFactory) GETTER_VISIBILITY_DIFFERS_FROM_PROPERTY_VISIBILITY.registerFactory(removeModifierFactory)
PRIVATE_SETTER_ON_NON_PRIVATE_LATE_INIT_VAR.registerFactory(removeModifierFactory) SETTER_VISIBILITY_DIFFERS_FROM_LATEINIT_VISIBILITY.registerFactory(removeModifierFactory)
ACCESSOR_VISIBILITY_FOR_ABSTRACT_PROPERTY.registerFactory(removeModifierFactory) ACCESSOR_VISIBILITY_FOR_ABSTRACT_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)