9

次の注釈を書きました。

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 に表示されるように警告するにはどうすればよいですか?

4

1 に答える 1

2

でも、ここからどう進めばいいのかわからない

最初のテストを書くことをお勧めしますDetectorDetector以下は、テストの書き方を示すサンプル プロジェクトです[1]。そうすれば、好きなように調整してみることができますDetector

メソッドに注釈が存在するかどうかを確認するにはどうすればよいですか

Android のデフォルトのディテクタを確認することをお勧めします [2]。そこにはおそらく、開始するのに適したポイントが見つかるでしょう。例えばAnnotationDetector

Android Studioで表示されるように警告しますか?

カスタム ルールをプロジェクトに正しく統合すると、Lint によって警告が表示されます。プロジェクトにカスタム ルールを統合する方法に関するさまざまなオプションについては、こちら [3] を参照してください。注:カスタムルールのAFAIK警告は、対応するGradleタスクを実行しているときにのみ報告されます。Android Studio の「自動ハイライト」は、カスタム ルールでは機能しません。

  1. https://github.com/a11n/CustomLintRules
  2. https://android.googlesource.com/platform/tools/base/+/master/lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks
  3. https://github.com/a11n/android-lint/tree/master/6_application
于 2016-10-19T16:00:47.143 に答える