Default modality is abstract for interface. REDUNDANT_MODIFIER_FOR_TARGET applicability reduced #KT-12302 Fixed

This commit is contained in:
Mikhail Glukhikh
2016-05-20 14:55:48 +03:00
parent 93defed324
commit e66acd8101
6 changed files with 35 additions and 12 deletions
@@ -93,9 +93,7 @@ object ModifierCheckerCore {
// NOTE: redundant targets must be possible! // NOTE: redundant targets must be possible!
private val redundantTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>( private val redundantTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
ABSTRACT_KEYWORD to EnumSet.of(INTERFACE), OPEN_KEYWORD to EnumSet.of(INTERFACE)
OPEN_KEYWORD to EnumSet.of(INTERFACE),
FINAL_KEYWORD to EnumSet.of(ENUM_CLASS, OBJECT)
) )
val possibleParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>( val possibleParentTargetMap = mapOf<KtModifierKeywordToken, Set<KotlinTarget>>(
@@ -6,13 +6,13 @@
<!WRONG_MODIFIER_TARGET!>override<!> companion object {} <!WRONG_MODIFIER_TARGET!>override<!> companion object {}
<!WRONG_MODIFIER_TARGET!>open<!> companion object {} <!WRONG_MODIFIER_TARGET!>open<!> companion object {}
<!WRONG_MODIFIER_TARGET!>abstract<!> companion object {} <!WRONG_MODIFIER_TARGET!>abstract<!> companion object {}
<!REDUNDANT_MODIFIER_FOR_TARGET!>final<!> companion object {} final companion object {}
} }
<!WRONG_MODIFIER_TARGET!>override<!> object B1 {} <!WRONG_MODIFIER_TARGET!>override<!> object B1 {}
<!WRONG_MODIFIER_TARGET!>open<!> object B2 {} <!WRONG_MODIFIER_TARGET!>open<!> object B2 {}
<!WRONG_MODIFIER_TARGET!>abstract<!> object B3 {} <!WRONG_MODIFIER_TARGET!>abstract<!> object B3 {}
<!REDUNDANT_MODIFIER_FOR_TARGET!>final<!> object B4 {} final object B4 {}
<!WRONG_MODIFIER_TARGET!>override<!> enum class C {} <!WRONG_MODIFIER_TARGET!>override<!> enum class C {}
<!WRONG_MODIFIER_TARGET!>override<!> interface D {} <!WRONG_MODIFIER_TARGET!>override<!> interface D {}
@@ -1,10 +1,10 @@
<!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface First <!REDUNDANT_MODIFIER_FOR_TARGET!>open<!> interface First
// Now inspection
<!REDUNDANT_MODIFIER_FOR_TARGET!>abstract<!> interface Second abstract interface Second
// Now inspection
<!REDUNDANT_MODIFIER_FOR_TARGET!>final<!> enum class Third { final enum class Third {
FOURTH, FOURTH,
FIFTH FIFTH
} }
// Now inspection
<!REDUNDANT_MODIFIER_FOR_TARGET!>final<!> object Sixth final object Sixth
@@ -229,7 +229,10 @@ fun KtModifierListOwner.canBeProtected(): Boolean {
} }
fun KtDeclaration.implicitModality(): KtModifierKeywordToken { fun KtDeclaration.implicitModality(): KtModifierKeywordToken {
if (this is KtClassOrObject) return KtTokens.FINAL_KEYWORD if (this is KtClassOrObject) {
if (this is KtClass && this.isInterface()) return KtTokens.ABSTRACT_KEYWORD
return KtTokens.FINAL_KEYWORD
}
val klass = containingClassOrObject ?: return KtTokens.FINAL_KEYWORD val klass = containingClassOrObject ?: return KtTokens.FINAL_KEYWORD
if (hasModifier(KtTokens.OVERRIDE_KEYWORD)) { if (hasModifier(KtTokens.OVERRIDE_KEYWORD)) {
if (klass.hasModifier(KtTokens.ABSTRACT_KEYWORD) || if (klass.hasModifier(KtTokens.ABSTRACT_KEYWORD) ||
@@ -87,4 +87,20 @@
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant modality modifier</problem_class> <problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant modality modifier</problem_class>
<description>Redundant modality modifier</description> <description>Redundant modality modifier</description>
</problem> </problem>
<problem>
<file>redundantModalityModifier.kt</file>
<line>56</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/redundantModalityModifier.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant modality modifier</problem_class>
<description>Redundant modality modifier</description>
</problem>
<problem>
<file>redundantModalityModifier.kt</file>
<line>58</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/redundantModalityModifier.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant modality modifier</problem_class>
<description>Redundant modality modifier</description>
</problem>
</problems> </problems>
@@ -52,3 +52,9 @@ abstract class AbstractDerived2 : Interface {
// Redundant // Redundant
override open val gav = 13 override open val gav = 13
} }
// Redundant abstract interface
abstract interface AbstractInterface
// Redundant final object
final object FinalObject
// Open interface
open interface OpenInterface