Add inspection: redundant internal in local anonymous object / class

So #KT-23617 Fixed
This commit is contained in:
Toshiaki Kameyama
2018-04-11 17:31:22 +03:00
committed by Mikhail Glukhikh
parent 1d3ba5641d
commit ff63ba4dc1
3 changed files with 53 additions and 6 deletions
@@ -9,7 +9,9 @@ import com.intellij.codeInspection.*
import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.idea.core.implicitVisibility
import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.declarationVisitor
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
class RedundantVisibilityModifierInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
@@ -17,12 +19,24 @@ class RedundantVisibilityModifierInspection : AbstractKotlinInspection(), Cleanu
return declarationVisitor { declaration ->
val visibilityModifier = declaration.visibilityModifier() ?: return@declarationVisitor
val implicitVisibility = declaration.implicitVisibility()
if (visibilityModifier.node.elementType == implicitVisibility) {
holder.registerProblem(visibilityModifier,
"Redundant visibility modifier",
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
IntentionWrapper(RemoveModifierFix(declaration, implicitVisibility, isRedundant = true),
declaration.containingFile))
val redundantVisibility = when {
visibilityModifier.node.elementType == implicitVisibility ->
implicitVisibility
declaration.hasModifier(KtTokens.INTERNAL_KEYWORD) && declaration.containingClassOrObject?.isLocal == true ->
KtTokens.INTERNAL_KEYWORD
else ->
null
}
if (redundantVisibility != null) {
holder.registerProblem(
visibilityModifier,
"Redundant visibility modifier",
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
IntentionWrapper(
RemoveModifierFix(declaration, redundantVisibility, isRedundant = true),
declaration.containingFile
)
)
}
}
}
@@ -43,4 +43,20 @@
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant visibility modifier</problem_class>
<description>Redundant visibility modifier</description>
</problem>
<problem>
<file>redundantVisibilityModifier.kt</file>
<line>40</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/redundantVisibilityModifier.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant visibility modifier</problem_class>
<description>Redundant visibility modifier</description>
</problem>
<problem>
<file>redundantVisibilityModifier.kt</file>
<line>46</line>
<module>light_idea_test_case</module>
<entry_point TYPE="file" FQNAME="temp:///src/redundantVisibilityModifier.kt" />
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant visibility modifier</problem_class>
<description>Redundant visibility modifier</description>
</problem>
</problems>
@@ -30,3 +30,20 @@ sealed class G constructor(val y: Int) {
object H : G()
}
interface I {
fun bar()
}
fun f() {
val i = object : I {
internal var foo = 0
override fun bar() {}
}
i.foo = 1
class LocalClass {
internal var foo = 0
}
LocalClass().foo = 1
}