ProtectedInFinalInspection: don't report for finalize() method #KT-13311 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
b935f52a63
commit
0bfcfb5716
@@ -9,15 +9,16 @@ import com.intellij.codeInsight.FileModificationService
|
|||||||
import com.intellij.codeInspection.*
|
import com.intellij.codeInspection.*
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.idea.core.implicitVisibility
|
import org.jetbrains.kotlin.idea.core.implicitVisibility
|
||||||
import org.jetbrains.kotlin.idea.core.isInheritable
|
import org.jetbrains.kotlin.idea.core.isInheritable
|
||||||
|
import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.KtClass
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.KtModifierListOwner
|
|
||||||
import org.jetbrains.kotlin.psi.addRemoveModifier.addModifier
|
import org.jetbrains.kotlin.psi.addRemoveModifier.addModifier
|
||||||
import org.jetbrains.kotlin.psi.declarationVisitor
|
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier
|
||||||
|
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||||
|
|
||||||
class ProtectedInFinalInspection : AbstractKotlinInspection() {
|
class ProtectedInFinalInspection : AbstractKotlinInspection() {
|
||||||
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
|
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
|
||||||
@@ -27,7 +28,8 @@ class ProtectedInFinalInspection : AbstractKotlinInspection() {
|
|||||||
if (modifierType == KtTokens.PROTECTED_KEYWORD) {
|
if (modifierType == KtTokens.PROTECTED_KEYWORD) {
|
||||||
val parentClass = declaration.getParentOfType<KtClass>(true) ?: return
|
val parentClass = declaration.getParentOfType<KtClass>(true) ?: return
|
||||||
if (!parentClass.isInheritable() && !parentClass.isEnum() &&
|
if (!parentClass.isInheritable() && !parentClass.isEnum() &&
|
||||||
declaration.implicitVisibility() != KtTokens.PROTECTED_KEYWORD
|
declaration.implicitVisibility() != KtTokens.PROTECTED_KEYWORD &&
|
||||||
|
!declaration.isFinalizeMethod()
|
||||||
) {
|
) {
|
||||||
holder.registerProblem(
|
holder.registerProblem(
|
||||||
visibilityModifier,
|
visibilityModifier,
|
||||||
@@ -41,6 +43,13 @@ class ProtectedInFinalInspection : AbstractKotlinInspection() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun KtDeclaration.isFinalizeMethod(): Boolean {
|
||||||
|
val function = this as? KtNamedFunction ?: return false
|
||||||
|
return function.name == "finalize"
|
||||||
|
&& function.valueParameters.isEmpty()
|
||||||
|
&& (function.descriptor as? FunctionDescriptor)?.returnType?.isUnit() == true
|
||||||
|
}
|
||||||
|
|
||||||
class MakePrivateFix : LocalQuickFix {
|
class MakePrivateFix : LocalQuickFix {
|
||||||
override fun getName(): String = "Make private"
|
override fun getName(): String = "Make private"
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class C {
|
||||||
|
protected fun finalize() {
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user