Пользовательское правило Android Lint

Я пытаюсь написать пользовательское правило Lint для библиотеки SDK, которую я написал. Я использую шаблон построителя в библиотеке, чего я хочу добиться с помощью правила Lint, так это проверить, вызывал ли пользователь определенный метод перед вызовом build().

Вот что я смог сделать до сих пор -

Исходный/java-файл для библиотеки с шаблоном Builder:

public class ShowCaseAPI {

private String regionCode = "";
private String subRegionCode = "";
private String latitude = "";
private String longitude = "";


private String REGION_CODE_KEY = "rc";
private String SUB_REGION_CODE_KEY = "sc";
private String CHANNEL_KEY = "ch";
private String LATITUDE_KEY = "lt";
private String LONGITUDE_KEY = "lg";
private String COMMAND_KEY = "cmd";

private String COMMAND_TYPE = "GETSHOWCASE";
private String CHANNEL_TYPE = "mobile";
private String showCaseUrl = Urls.GET_SHOWCASE_URL;


public ShowCaseAPI setRegionCode(String regionCode) {

    this.regionCode = regionCode;

    return this;
}

public ShowCaseAPI setSubRegionCode(String subRegionCode) {

    this.subRegionCode = subRegionCode;
    return  this;
}

public ShowCaseAPI setLatitude(String latitude) {
    this.latitude = latitude;
    return this;
}

public ShowCaseAPI setLongitude(String longitude) {
    this.longitude = longitude;
    return this;
}

public ShowCaseAPI overrideBaseURL(String newUrl) {

    this.showCaseUrl = newUrl;
    return this;

}

public String buildAPIParameters() {

    Uri builtUri = Uri.parse(showCaseUrl)
                        .buildUpon()
                        .appendQueryParameter(COMMAND_KEY, COMMAND_TYPE)
                        .appendQueryParameter(REGION_CODE_KEY, this.regionCode)
                        .appendQueryParameter(SUB_REGION_CODE_KEY, this.subRegionCode)
                        .appendQueryParameter(LATITUDE_KEY, this.latitude)
                        .appendQueryParameter(LONGITUDE_KEY, this.longitude)
                        .appendQueryParameter(CHANNEL_KEY, CHANNEL_TYPE)
                        .build();

    String showCaseUrl = builtUri.toString();

    return showCaseUrl;

}

Код Lint, который я смог придумать до сих пор:

@Override
public AstVisitor createJavaVisitor(@NonNull final JavaContext context) {
    return new ForwardingAstVisitor() {

        @Override
        public boolean visitMethodInvocation(MethodInvocation node) {

            String methodName = node.astName().astValue();

            if (methodName.equals("buildAPIParameters")){

                //Here is where I need to check if other methods have been invoked before calling this 

            }

            return super.visitMethodInvocation(node);
        }
    };
}

Я попытался просмотреть lint_rules в исходном коде, но не смог найти что-то подобное. Любые идеи или указатели относительно того, как это сделать, были бы действительно полезны.


person Adnan Mulla    schedule 04.01.2016    source источник
comment
Я не думаю, что роль lint заключается в том, чтобы убедиться, что вы вызываете свои методы в правильном порядке. Скорее API должен убедиться, что он не двусмысленный или что он принимает несколько конфигураций.   -  person njzk2    schedule 04.01.2016
comment
Да, я понимаю, что могу просто писать чеки в коде библиотеки. Мне просто было интересно, может ли ворс помочь, похоже, я пытаюсь использовать ворс неправильно.   -  person Adnan Mulla    schedule 04.01.2016
comment
См. мой вопрос по этой теме для пользовательской аннотации"> stackoverflow.com/questions/40133113/   -  person Moses    schedule 21.10.2016