Don't report 'protected in final' for implicitly protected

So #KT-16339 Fixed
This commit is contained in:
mglukhikh
2017-03-31 15:33:50 +03:00
committed by Mikhail Glukhikh
parent f13997750f
commit 8fb818fc74
2 changed files with 12 additions and 1 deletions
@@ -20,6 +20,7 @@ import com.intellij.codeInsight.FileModificationService
import com.intellij.codeInspection.*
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.idea.core.implicitVisibility
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -38,7 +39,8 @@ class ProtectedInFinalInspection : AbstractKotlinInspection() {
val modifierType = visibilityModifier.node?.elementType
if (modifierType == KtTokens.PROTECTED_KEYWORD) {
val parentClass = declaration.getParentOfType<KtClass>(true) ?: return
if (!parentClass.isInheritable() && !parentClass.isEnum()) {
if (!parentClass.isInheritable() && !parentClass.isEnum() &&
declaration.implicitVisibility() != KtTokens.PROTECTED_KEYWORD) {
holder.registerProblem(visibilityModifier,
"'protected' visibility is effectively 'private' in a final class",
ProblemHighlightType.WEAK_WARNING,
@@ -0,0 +1,9 @@
open class Test {
open protected fun test() {}
}
class Subclass : Test() {
protected override fun test() {
super.test()
}
}