@@ -4,11 +4,13 @@ import com.android.tools.lint.detector.api.Category.Companion.CORRECTNESS
44import com.android.tools.lint.detector.api.Severity.WARNING
55import com.android.tools.lint.client.api.UElementHandler
66import com.android.tools.lint.detector.api.*
7+ import com.intellij.psi.PsiType
78import org.jetbrains.uast.*
89import org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression
910import java.util.*
1011import org.jetbrains.uast.visitor.AbstractUastVisitor
1112import kotlin.collections.ArrayList
13+ import kotlin.collections.HashSet
1214
1315
1416val ISSUE_PATTERN = Issue .create(" CheckedExceptions" ,
@@ -58,6 +60,15 @@ class CheckedExceptionsDetector : Detector(), Detector.UastScanner {
5860 return namedExpressions
5961 }
6062
63+ fun findRecursiveExtentionsInClass (superTypes : Array <PsiType >):HashSet <String > {
64+ val classes = HashSet <String >()
65+ superTypes.forEach {
66+ classes.addAll(findRecursiveExtentionsInClass(it.superTypes))
67+ classes.add(it.canonicalText)
68+ }
69+ return classes
70+ }
71+
6172 override fun createUastHandler (context : JavaContext ) = object : UElementHandler () {
6273
6374 init {
@@ -100,13 +111,21 @@ class CheckedExceptionsDetector : Detector(), Detector.UastScanner {
100111
101112 override fun visitClassLiteralExpression (node : UClassLiteralExpression ): Boolean {
102113
114+ val arrayList = ArrayList <String >()
115+
103116 val clazzName = node.type?.canonicalText? : return super .visitClassLiteralExpression(node)
104117
118+ arrayList.add(clazzName)
119+
105120 if (haveTryCatch.contains(clazzName))
106121 return super .visitClassLiteralExpression(node)
107122
108- node.type?.superTypes?.forEach {
109- if (haveTryCatch.contains(it.canonicalText))
123+ if (node.type?.superTypes!= null ) {
124+ arrayList.addAll(findRecursiveExtentionsInClass(node.type?.superTypes!! ))
125+ }
126+
127+ for (clazz in arrayList) {
128+ if (haveTryCatch.contains(clazz))
110129 return super .visitClassLiteralExpression(node)
111130 }
112131
0 commit comments