Я настраиваю настраиваемое правило 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
последний символ?