Add inspection: redundant internal in local anonymous object / class
So #KT-23617 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
1d3ba5641d
commit
ff63ba4dc1
+20
-6
@@ -9,7 +9,9 @@ import com.intellij.codeInspection.*
|
|||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
import org.jetbrains.kotlin.idea.core.implicitVisibility
|
import org.jetbrains.kotlin.idea.core.implicitVisibility
|
||||||
import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix
|
import org.jetbrains.kotlin.idea.quickfix.RemoveModifierFix
|
||||||
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.declarationVisitor
|
import org.jetbrains.kotlin.psi.declarationVisitor
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
||||||
|
|
||||||
class RedundantVisibilityModifierInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
|
class RedundantVisibilityModifierInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool {
|
||||||
@@ -17,12 +19,24 @@ class RedundantVisibilityModifierInspection : AbstractKotlinInspection(), Cleanu
|
|||||||
return declarationVisitor { declaration ->
|
return declarationVisitor { declaration ->
|
||||||
val visibilityModifier = declaration.visibilityModifier() ?: return@declarationVisitor
|
val visibilityModifier = declaration.visibilityModifier() ?: return@declarationVisitor
|
||||||
val implicitVisibility = declaration.implicitVisibility()
|
val implicitVisibility = declaration.implicitVisibility()
|
||||||
if (visibilityModifier.node.elementType == implicitVisibility) {
|
val redundantVisibility = when {
|
||||||
holder.registerProblem(visibilityModifier,
|
visibilityModifier.node.elementType == implicitVisibility ->
|
||||||
"Redundant visibility modifier",
|
implicitVisibility
|
||||||
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
declaration.hasModifier(KtTokens.INTERNAL_KEYWORD) && declaration.containingClassOrObject?.isLocal == true ->
|
||||||
IntentionWrapper(RemoveModifierFix(declaration, implicitVisibility, isRedundant = true),
|
KtTokens.INTERNAL_KEYWORD
|
||||||
declaration.containingFile))
|
else ->
|
||||||
|
null
|
||||||
|
}
|
||||||
|
if (redundantVisibility != null) {
|
||||||
|
holder.registerProblem(
|
||||||
|
visibilityModifier,
|
||||||
|
"Redundant visibility modifier",
|
||||||
|
ProblemHighlightType.LIKE_UNUSED_SYMBOL,
|
||||||
|
IntentionWrapper(
|
||||||
|
RemoveModifierFix(declaration, redundantVisibility, isRedundant = true),
|
||||||
|
declaration.containingFile
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
@@ -43,4 +43,20 @@
|
|||||||
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant visibility modifier</problem_class>
|
<problem_class severity="WARNING" attribute_key="NOT_USED_ELEMENT_ATTRIBUTES">Redundant visibility modifier</problem_class>
|
||||||
<description>Redundant visibility modifier</description>
|
<description>Redundant visibility modifier</description>
|
||||||
</problem>
|
</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>
|
</problems>
|
||||||
|
|||||||
+17
@@ -30,3 +30,20 @@ sealed class G constructor(val y: Int) {
|
|||||||
|
|
||||||
object H : G()
|
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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user