diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantVisibilityModifierInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantVisibilityModifierInspection.kt
index fac5275c6a8..d693891ebe9 100644
--- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantVisibilityModifierInspection.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantVisibilityModifierInspection.kt
@@ -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
+ )
+ )
}
}
}
diff --git a/idea/testData/inspections/redundantVisibilityModifier/inspectionData/expected.xml b/idea/testData/inspections/redundantVisibilityModifier/inspectionData/expected.xml
index 446bcf69b1d..bd24667cf78 100644
--- a/idea/testData/inspections/redundantVisibilityModifier/inspectionData/expected.xml
+++ b/idea/testData/inspections/redundantVisibilityModifier/inspectionData/expected.xml
@@ -43,4 +43,20 @@
Redundant visibility modifier
Redundant visibility modifier
+
+ redundantVisibilityModifier.kt
+ 40
+ light_idea_test_case
+
+ Redundant visibility modifier
+ Redundant visibility modifier
+
+
+ redundantVisibilityModifier.kt
+ 46
+ light_idea_test_case
+
+ Redundant visibility modifier
+ Redundant visibility modifier
+
diff --git a/idea/testData/inspections/redundantVisibilityModifier/redundantVisibilityModifier.kt b/idea/testData/inspections/redundantVisibilityModifier/redundantVisibilityModifier.kt
index 2b48e98b44a..aeec17baf76 100644
--- a/idea/testData/inspections/redundantVisibilityModifier/redundantVisibilityModifier.kt
+++ b/idea/testData/inspections/redundantVisibilityModifier/redundantVisibilityModifier.kt
@@ -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
+}
\ No newline at end of file