diff --git a/lint-rules/kotlinMigration-lint.gradle b/lint-rules/kotlinMigration-lint.gradle
index abbb09c26f..4a38220ef2 100644
--- a/lint-rules/kotlinMigration-lint.gradle
+++ b/lint-rules/kotlinMigration-lint.gradle
@@ -43,7 +43,7 @@ permission notice:
// Example of class name: "/com/ichi2/anki/UIUtils.kt"
// Ensure that it starts with '/' (slash)
def source = Source.MAIN
-def className = "/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt"
+def className = ""
enum Source {
MAIN("/src/main/java"),
diff --git a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt
index d4ab374439..b0b74dd619 100644
--- a/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt
+++ b/lint-rules/src/main/java/com/ichi2/anki/lint/rules/DirectSnackbarMakeUsage.kt
@@ -13,48 +13,38 @@
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
+package com.ichi2.anki.lint.rules
-package com.ichi2.anki.lint.rules;
-
-import com.android.tools.lint.client.api.JavaEvaluator;
-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.SourceCodeScanner;
-import com.google.common.annotations.VisibleForTesting;
-import com.ichi2.anki.lint.utils.Constants;
-import com.ichi2.anki.lint.utils.LintUtils;
-import com.intellij.psi.PsiMethod;
-
-import com.android.annotations.NonNull;
-import com.android.annotations.Nullable;
-import org.jetbrains.uast.UCallExpression;
-import org.jetbrains.uast.UClass;
-
-import java.util.ArrayList;
-import java.util.List;
+import com.android.tools.lint.detector.api.*
+import com.google.common.annotations.VisibleForTesting
+import com.ichi2.anki.lint.utils.Constants
+import com.ichi2.anki.lint.utils.KotlinCleanup
+import com.ichi2.anki.lint.utils.LintUtils
+import com.intellij.psi.PsiMethod
+import org.jetbrains.uast.UCallExpression
/**
* This custom Lint rules will raise an error if a developer uses the {com.google.android.material.snackbar.Snackbar#make(...)} method
* instead of using the method provided by the UIUtils class {com.ichi2.anki.UIUtils#showSimpleSnackbar(...)}
* or {com.ichi2.anki.UIUtils#showSnackbar(...)}.
*/
-public class DirectSnackbarMakeUsage extends Detector implements SourceCodeScanner {
+@KotlinCleanup("IDE lint")
+@KotlinCleanup("mutableListOf")
+class DirectSnackbarMakeUsage : Detector(), SourceCodeScanner {
- @VisibleForTesting
- static final String ID = "DirectSnackbarMakeUsage";
+ companion object {
+ @JvmField
+ @VisibleForTesting
+ val ID = "DirectSnackbarMakeUsage"
- @VisibleForTesting
- static final String DESCRIPTION = "Use UIUtils.showSimpleSnackbar or UIUtils.showSnackbar instead of Snackbar.make";
-
- private static final String EXPLANATION = "To improve code consistency within the codebase you should use UIUtils.showSimpleSnackbar or UIUtils.showSnackbar " +
- "in place of the library Snackbar.make(...).show()";
-
- private static final Implementation implementation = new Implementation(DirectSnackbarMakeUsage.class, Scope.JAVA_FILE_SCOPE);
-
- public static final Issue ISSUE = Issue.create(
+ @JvmField
+ @VisibleForTesting
+ val DESCRIPTION = "Use UIUtils.showSimpleSnackbar or UIUtils.showSnackbar instead of Snackbar.make"
+ private const val EXPLANATION = "To improve code consistency within the codebase you should use UIUtils.showSimpleSnackbar or UIUtils.showSnackbar " +
+ "in place of the library Snackbar.make(...).show()"
+ private val implementation = Implementation(DirectSnackbarMakeUsage::class.java, Scope.JAVA_FILE_SCOPE)
+ @JvmField
+ val ISSUE: Issue = Issue.create(
ID,
DESCRIPTION,
EXPLANATION,
@@ -62,37 +52,28 @@ public class DirectSnackbarMakeUsage extends Detector implements SourceCodeScann
Constants.ANKI_CODE_STYLE_PRIORITY,
Constants.ANKI_CODE_STYLE_SEVERITY,
implementation
- );
-
-
- public DirectSnackbarMakeUsage() {
-
+ )
}
-
- @Nullable
- @Override
- public List getApplicableMethodNames() {
- List forbiddenMethods = new ArrayList<>();
- forbiddenMethods.add("make");
- return forbiddenMethods;
+ override fun getApplicableMethodNames(): List? {
+ val forbiddenMethods: MutableList = ArrayList()
+ forbiddenMethods.add("make")
+ return forbiddenMethods
}
-
- @Override
- public void visitMethodCall(@NonNull JavaContext context, @NonNull UCallExpression node, @NonNull PsiMethod method) {
- super.visitMethodCall(context, node, method);
- JavaEvaluator evaluator = context.getEvaluator();
- List foundClasses = context.getUastFile().getClasses();
- if (!LintUtils.isAnAllowedClass(foundClasses, "UIUtils")
- && evaluator.isMemberInClass(method, "com.google.android.material.snackbar.Snackbar")) {
+ override fun visitMethodCall(context: JavaContext, node: UCallExpression, method: PsiMethod) {
+ super.visitMethodCall(context, node, method)
+ val evaluator = context.evaluator
+ val foundClasses = context.uastFile!!.classes
+ if (!LintUtils.isAnAllowedClass(foundClasses, "UIUtils") &&
+ evaluator.isMemberInClass(method, "com.google.android.material.snackbar.Snackbar")
+ ) {
context.report(
- ISSUE,
- node,
- context.getCallLocation(node, true, true),
- DESCRIPTION
- );
+ ISSUE,
+ node,
+ context.getCallLocation(node, true, true),
+ DESCRIPTION
+ )
}
}
-
-}
\ No newline at end of file
+}