From 8fb818fc740dba2035d4c0f2890844f9a3a0f075 Mon Sep 17 00:00:00 2001 From: mglukhikh Date: Fri, 31 Mar 2017 15:33:50 +0300 Subject: [PATCH] Don't report 'protected in final' for implicitly protected So #KT-16339 Fixed --- .../idea/inspections/ProtectedInFinalInspection.kt | 4 +++- idea/testData/inspections/protectedInFinal/overridden.kt | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 idea/testData/inspections/protectedInFinal/overridden.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/ProtectedInFinalInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/ProtectedInFinalInspection.kt index 68dc57440b0..eb2af90638b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/ProtectedInFinalInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/ProtectedInFinalInspection.kt @@ -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(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, diff --git a/idea/testData/inspections/protectedInFinal/overridden.kt b/idea/testData/inspections/protectedInFinal/overridden.kt new file mode 100644 index 00000000000..4acb480057e --- /dev/null +++ b/idea/testData/inspections/protectedInFinal/overridden.kt @@ -0,0 +1,9 @@ +open class Test { + open protected fun test() {} +} + +class Subclass : Test() { + protected override fun test() { + super.test() + } +} \ No newline at end of file