ImplicitSubclassInspection no more subclasses AbstractBaseUastLocalInspectionTool

because `AbstractBaseUastLocalInspectionTool` uses `UastVisitorAdapter` which is very expensive
This commit is contained in:
Nicolay Mitropolsky
2018-05-22 13:03:31 +03:00
parent 3331ddf321
commit 8c29971a6c
@@ -33,10 +33,11 @@ import com.intellij.util.IncorrectOperationException
import com.intellij.util.SmartList
import org.jetbrains.uast.UClass
import org.jetbrains.uast.UDeclaration
import org.jetbrains.uast.toUElementOfType
class ImplicitSubclassInspection : AbstractBaseUastLocalInspectionTool() {
class ImplicitSubclassInspection : LocalInspectionTool() {
override fun checkClass(aClass: UClass, manager: InspectionManager, isOnTheFly: Boolean): Array<ProblemDescriptor>? {
private fun checkClass(aClass: UClass, manager: InspectionManager, isOnTheFly: Boolean): Array<ProblemDescriptor>? {
val classIsFinal = aClass.isFinal || aClass.hasModifierProperty(PsiModifier.PRIVATE)
@@ -213,4 +214,15 @@ class ImplicitSubclassInspection : AbstractBaseUastLocalInspectionTool() {
}
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean): PsiElementVisitor = object : PsiElementVisitor() {
override fun visitElement(element: PsiElement) {
super.visitElement(element)
val uClass = element.toUElementOfType<UClass>() ?: return
val problems = checkClass(uClass, holder.manager, isOnTheFly) ?: return
for (problem in problems) {
holder.registerProblem(problem)
}
}
}
}