[Android] Android LintのDetectorを読む Day4: AppCompatCallDetector
ソースコード
背景
AppCompatのメソッドを使う時、 通常のものではなく support
のものを使うこと。
ちなみに現在SupportLibraryはAndroidXに役割を渡しており新しい開発についてもそちらで行われる。
なおAndroidXのLintについて、actionaBarは
でチェックしている。
気づき
LintFixする
自動でlintが修正したい場合には、 LintFix
を用いる。
String message = String.format("Should use `%1$s` instead of `%2$s` name", replace, name); LintFix fix = fix().name("Replace with " + replace + "()") .replace() .text(name) .with(replace) .build(); context.report(ISSUE, node, context.getLocation(node), message, fix);
メソッドが特定のクラスのサブクラスににあることを判定
isMemberInSubClassOf
の第3引数のbooleanは、厳密にサブクラスかを判定している。
この場合 false
のため、サブクラスではないその特定のクラスにメソッドが生えていてもtrueになる。
override fun visitMethodCall(context: JavaContext, node: UCallExpression, method:PsiMethod){ val answer = context.getEvaluator().isMemberInSubClassOf(method, CLASS, false) }