次の注釈を書きました。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.METHOD})
public @interface Warning {
}
これは、不用意に呼び出された場合に問題を引き起こす可能性のあるメソッドに注釈を付けることを目的としています。プロジェクトに注釈プロセッサを追加しましたが、javac コマンドのログ出力に警告しか表示されません。この警告を、この注釈を含むメソッドが呼び出された場所の他の lint 警告とともに Android Studio に表示したいと考えています。これが、カスタム lint ルールを作成しようとしている理由です。私はリントルールの基本的な骨組みを持っています:
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.Scope;
import com.android.tools.lint.detector.api.Severity;
public class CaimitoDetector extends Detector implements Detector.JavaScanner {
public static final Issue ISSUE = Issue.create(
"WarningAnnotation",
"This method has been annotated with @Warning",
"This method has special conditions surrounding it's use, be careful when using it and refer to its documentation.",
Category.USABILITY, 7, Severity.WARNING,
new Implementation(CaimitoDetector.class, Scope.JAVA_FILE_SCOPE));
@Override
public void visitMethod(JavaContext context, AstVisitor visitor, MethodInvocation node) {
}
}
import com.android.tools.lint.client.api.IssueRegistry;
import com.android.tools.lint.detector.api.Issue;
import java.util.Collections;
import java.util.List;
public class CaimitoIssueRegistry extends IssueRegistry {
@Override
public List<Issue> getIssues() {
return Collections.singletonList(CaimitoDetector.ISSUE);
}
}
しかし、ここから先に進む方法がわかりません。メソッドにアノテーションが存在するかどうかを確認し、それが Android Studio に表示されるように警告するにはどうすればよいですか?