Android lint - пользовательское правило не применяется к некоторым сценариям - PullRequest
0 голосов
/ 01 октября 2019

Я настраиваю настраиваемое правило lint для своего проекта и испытываю проблемы с отображением ошибки в конкретном сценарии.

Мое настраиваемое правило должно искать строковые файлы и проверять каждое строковое значение, если оно заканчивается определеннымхарактер.

strings.xml :

<resources>
<string name="app_name">My Application %</string>

InvalidStringResourceDetector:

public class InvalidStringResourceDetector extends ResourceXmlDetector {

@Override
public boolean appliesTo(ResourceFolderType folderType) {
    return folderType == ResourceFolderType.VALUES;
}

@Nullable
@Override
public Collection<String> getApplicableElements() {
    return Collections.singletonList(TAG_STRING);
}


@Override
public void visitElement(XmlContext context, Element element) {
    final String text = element.getTextContent();
    final String matchChar = "%";
    int index = text.indexOf(matchChar);

    if (index == text.length() - 1) {
        context.report(InvalidStringResourceIssue.ISSUE, element, context.getLocation(element), InvalidStringResourceIssue.EXPLANATION);
    }
}
}

С этимдетектор, я не получаю никакой ошибки в файле strings.xml . Только если я запускаю ./gradlew lintDebug, я получаю ожидаемую ошибку. Если изменить условие if моего детектора, он работает как положено -> strings.xml показывает красную линию, выделяя ошибку:

if (text.contains(matchChar)) {
        context.report(InvalidStringResourceIssue.ISSUE, element, context.getLocation(element), InvalidStringResourceIssue.EXPLANATION);
}

Как выделить ошибку на strings.xml когда matchChar последний символ?

...