From 2a76146be04e6ee025ce9fb9ce450f5bd3b34078 Mon Sep 17 00:00:00 2001 From: oxy Date: Sat, 7 Oct 2023 17:11:34 +0800 Subject: [PATCH] lint: StaredImportsDetector. --- lint.xml | 1 + ...tsIssueRegistry.kt => M3UIssueRegistry.kt} | 13 +++--- .../HelperDetector.kt} | 6 +-- .../lint/detectors/StaredImportsDetector.kt | 45 +++++++++++++++++++ ...ndroid.tools.lint.client.api.IssueRegistry | 2 +- 5 files changed, 58 insertions(+), 9 deletions(-) rename lint/src/main/java/com/m3u/lint/{helper/UseHelperInsteadOfWindowInsetsIssueRegistry.kt => M3UIssueRegistry.kt} (53%) rename lint/src/main/java/com/m3u/lint/{helper/UseHelperInsteadOfWindowInsetsDetector.kt => detectors/HelperDetector.kt} (95%) create mode 100644 lint/src/main/java/com/m3u/lint/detectors/StaredImportsDetector.kt diff --git a/lint.xml b/lint.xml index 95127e04..8a9e187a 100644 --- a/lint.xml +++ b/lint.xml @@ -2,4 +2,5 @@ + \ No newline at end of file diff --git a/lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsIssueRegistry.kt b/lint/src/main/java/com/m3u/lint/M3UIssueRegistry.kt similarity index 53% rename from lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsIssueRegistry.kt rename to lint/src/main/java/com/m3u/lint/M3UIssueRegistry.kt index 181a0c76..70e3dc91 100644 --- a/lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsIssueRegistry.kt +++ b/lint/src/main/java/com/m3u/lint/M3UIssueRegistry.kt @@ -1,13 +1,16 @@ -package com.m3u.lint.helper +package com.m3u.lint import com.android.tools.lint.client.api.IssueRegistry import com.android.tools.lint.client.api.Vendor import com.android.tools.lint.detector.api.Issue -import com.m3u.lint.helper.UseHelperInsteadOfWindowInsetsDetector.Companion.UseHelperIssue +import com.m3u.lint.detectors.HelperDetector +import com.m3u.lint.detectors.StaredImportsDetector -class UseHelperInsteadOfWindowInsetsIssueRegistry : IssueRegistry() { - override val issues: List - get() = listOf(UseHelperIssue) +class M3UIssueRegistry : IssueRegistry() { + override val issues: List = listOf( + HelperDetector.UseHelperIssue, + StaredImportsDetector.StaredImportsIssue + ) override val vendor: Vendor = Vendor( vendorName = "M3UAndroid Project", feedbackUrl = "https://t.me/m3u_android_chat", diff --git a/lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsDetector.kt b/lint/src/main/java/com/m3u/lint/detectors/HelperDetector.kt similarity index 95% rename from lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsDetector.kt rename to lint/src/main/java/com/m3u/lint/detectors/HelperDetector.kt index 24778d6f..b6d640eb 100644 --- a/lint/src/main/java/com/m3u/lint/helper/UseHelperInsteadOfWindowInsetsDetector.kt +++ b/lint/src/main/java/com/m3u/lint/detectors/HelperDetector.kt @@ -1,4 +1,4 @@ -package com.m3u.lint.helper +package com.m3u.lint.detectors import com.android.tools.lint.detector.api.Category import com.android.tools.lint.detector.api.Detector @@ -13,7 +13,7 @@ import com.intellij.psi.PsiMethod import org.jetbrains.uast.UCallExpression import org.jetbrains.uast.getContainingUMethod -class UseHelperInsteadOfWindowInsetsDetector : Detector(), SourceCodeScanner { +class HelperDetector : Detector(), SourceCodeScanner { override fun getApplicableMethodNames(): List = listOf("show", "hide") override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) { @@ -98,7 +98,7 @@ class UseHelperInsteadOfWindowInsetsDetector : Detector(), SourceCodeScanner { category = Category.CORRECTNESS, severity = Severity.FATAL, implementation = Implementation( - UseHelperInsteadOfWindowInsetsDetector::class.java, + HelperDetector::class.java, Scope.JAVA_FILE_SCOPE ) ) diff --git a/lint/src/main/java/com/m3u/lint/detectors/StaredImportsDetector.kt b/lint/src/main/java/com/m3u/lint/detectors/StaredImportsDetector.kt new file mode 100644 index 00000000..5b11d5e5 --- /dev/null +++ b/lint/src/main/java/com/m3u/lint/detectors/StaredImportsDetector.kt @@ -0,0 +1,45 @@ +package com.m3u.lint.detectors + +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 +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.Scope +import com.android.tools.lint.detector.api.Severity +import com.android.tools.lint.detector.api.SourceCodeScanner +import org.jetbrains.uast.UImportStatement +import java.util.EnumSet + +class StaredImportsDetector : Detector(), SourceCodeScanner { + override fun getApplicableUastTypes() = listOf(UImportStatement::class.java) + + override fun createUastHandler(context: JavaContext) = object : UElementHandler() { + override fun visitImportStatement(node: UImportStatement) { + val reference = node.importReference ?: return + if (node.isOnDemand) { + context.report( + issue = StaredImportsIssue, + scope = reference, + location = context.getLocation(reference), + message = "Using special import instead of star-import." + ) + } + } + } + + companion object { + val StaredImportsIssue = Issue.create( + id = "StaredImportsIssue", + briefDescription = "using special imports instead", + explanation = "using special imports instead of stared imports", + category = Category.CORRECTNESS, + severity = Severity.WARNING, + implementation = Implementation( + StaredImportsDetector::class.java, + EnumSet.of(Scope.JAVA_FILE, Scope.TEST_SOURCES) + ) + ) + } +} \ No newline at end of file diff --git a/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry b/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry index 61d0075d..8ec1fd7f 100644 --- a/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry +++ b/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry @@ -1 +1 @@ -com.m3u.lint.helper.UseHelperInsteadOfWindowInsetsIssueRegistry \ No newline at end of file +com.m3u.lint.M3UIssueRegistry \ No newline at end of file