Slight cleanup for some Compose lint checks
Test: existing tests
Test: lintDebug
Change-Id: Ia0090cbfc7784c59eb1fc69fedc41566686ef651
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
index 704b120..4e93399 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/ComposableLambdaParameterDetector.kt
@@ -32,9 +32,11 @@
import org.jetbrains.kotlin.psi.KtFunctionType
import org.jetbrains.kotlin.psi.KtNullableType
import org.jetbrains.kotlin.psi.KtParameter
+import org.jetbrains.uast.UAnnotation
import org.jetbrains.uast.UElement
import org.jetbrains.uast.UMethod
import org.jetbrains.uast.UParameter
+import org.jetbrains.uast.toUElement
import java.util.EnumSet
/**
@@ -72,10 +74,11 @@
val typeReference = ktParameter.typeReference!!
- val hasComposableAnnotationOnType = typeReference.modifierList?.annotationEntries
- ?.any {
- it.shortName?.identifier == ComposableShortName
- }
+ // Ideally this annotation should be available on the PsiType itself
+ // https://youtrack.jetbrains.com/issue/KT-45244
+ val hasComposableAnnotationOnType = typeReference.annotationEntries.any {
+ (it.toUElement() as UAnnotation).qualifiedName == ComposableFqn
+ }
val functionType = when (val typeElement = typeReference.typeElement) {
is KtFunctionType -> typeElement
@@ -83,7 +86,7 @@
else -> null
}
- if (functionType != null && hasComposableAnnotationOnType == true) {
+ if (functionType != null && hasComposableAnnotationOnType) {
ComposableLambdaParameterInfo(parameter, functionType)
} else {
null
diff --git a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
index d05d0b1..74ff784e 100644
--- a/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
+++ b/compose/runtime/runtime-lint/src/main/java/androidx/compose/runtime/lint/RememberDetector.kt
@@ -18,7 +18,6 @@
package androidx.compose.runtime.lint
-import com.android.tools.lint.client.api.UElementHandler
import com.android.tools.lint.detector.api.Category
import com.android.tools.lint.detector.api.Detector
import com.android.tools.lint.detector.api.Implementation
@@ -28,6 +27,7 @@
import com.android.tools.lint.detector.api.Severity
import com.android.tools.lint.detector.api.SourceCodeScanner
import com.intellij.psi.PsiJavaFile
+import com.intellij.psi.PsiMethod
import com.intellij.psi.PsiType
import org.jetbrains.uast.UCallExpression
import java.util.EnumSet
@@ -36,22 +36,17 @@
* [Detector] that checks `remember` calls to make sure they are not returning [Unit].
*/
class RememberDetector : Detector(), SourceCodeScanner {
- override fun getApplicableUastTypes() = listOf(UCallExpression::class.java)
+ override fun getApplicableMethodNames(): List<String> = listOf(RememberShortName)
- override fun createUastHandler(context: JavaContext) = object : UElementHandler() {
- override fun visitCallExpression(node: UCallExpression) {
- val call = node.resolve() ?: return
- if (call.name == RememberShortName &&
- (call.containingFile as? PsiJavaFile)?.packageName == RuntimePackageName
- ) {
- if (node.getExpressionType() == PsiType.VOID) {
- context.report(
- RememberReturnType,
- node,
- context.getNameLocation(node),
- "`remember` calls must not return `Unit`"
- )
- }
+ override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
+ if ((method.containingFile as? PsiJavaFile)?.packageName == RuntimePackageName) {
+ if (node.getExpressionType() == PsiType.VOID) {
+ context.report(
+ RememberReturnType,
+ node,
+ context.getNameLocation(node),
+ "`remember` calls must not return `Unit`"
+ )
}
}
}