public class StringFormatDetector
extends com.android.tools.lint.detector.api.ResourceXmlDetector
implements com.android.tools.lint.detector.api.Detector.JavaPsiScanner
TODO: Handle Resources.getQuantityString as well
com.android.tools.lint.detector.api.Detector.BinaryResourceScanner, com.android.tools.lint.detector.api.Detector.ClassScanner, com.android.tools.lint.detector.api.Detector.GradleScanner, com.android.tools.lint.detector.api.Detector.JavaPsiScanner, com.android.tools.lint.detector.api.Detector.JavaScanner, com.android.tools.lint.detector.api.Detector.OtherFileScanner, com.android.tools.lint.detector.api.Detector.ResourceFolderScanner, com.android.tools.lint.detector.api.Detector.XmlScanner
Modifier and Type | Field and Description |
---|---|
static com.android.tools.lint.detector.api.Issue |
ARG_COUNT
Whether formatting argument types are consistent across translations
|
static com.android.tools.lint.detector.api.Issue |
ARG_TYPES
Whether the string format supplied in a call to String.format matches the format string
|
static java.util.regex.Pattern |
FORMAT |
static com.android.tools.lint.detector.api.Issue |
INVALID
Whether formatting strings are invalid
|
static com.android.tools.lint.detector.api.Issue |
POTENTIAL_PLURAL
This plural does not use the quantity value
|
Constructor and Description |
---|
StringFormatDetector()
Constructs a new
StringFormatDetector check |
Modifier and Type | Method and Description |
---|---|
void |
afterCheckProject(com.android.tools.lint.detector.api.Context context) |
boolean |
appliesTo(com.android.tools.lint.detector.api.Context context,
java.io.File file) |
boolean |
appliesTo(com.android.resources.ResourceFolderType folderType) |
java.util.Collection<java.lang.String> |
getApplicableElements() |
java.util.List<java.lang.String> |
getApplicableMethodNames() |
static boolean |
isLocaleSpecific(java.lang.String format)
Determines whether the given
String.format(String, Object...)
formatting string is "locale dependent", meaning that its output depends
on the locale. |
void |
visitElement(com.android.tools.lint.detector.api.XmlContext context,
org.w3c.dom.Element element) |
void |
visitMethod(com.android.tools.lint.detector.api.JavaContext context,
com.intellij.psi.JavaElementVisitor visitor,
com.intellij.psi.PsiMethodCallExpression node,
com.intellij.psi.PsiMethod method) |
afterCheckFile, afterCheckLibraryProject, applicableSuperClasses, appliesToFolder, appliesToResourceRefs, beforeCheckFile, beforeCheckLibraryProject, beforeCheckProject, checkBinaryResource, checkCall, checkClass, checkClass, checkClass, checkFolder, checkInstruction, createJavaVisitor, createPsiVisitor, getApplicableAsmNodeTypes, getApplicableAttributes, getApplicableCallNames, getApplicableCallOwners, getApplicableConstructorTypes, getApplicableFiles, getApplicableNodeTypes, getApplicablePsiTypes, getApplicableReferenceNames, getSpeed, getSpeed, visitAttribute, visitBuildScript, visitConstructor, visitConstructor, visitDocument, visitElementAfter, visitMethod, visitReference, visitResourceReference, visitResourceReference
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
applicableSuperClasses, appliesToResourceRefs, checkClass, createPsiVisitor, getApplicableConstructorTypes, getApplicablePsiTypes, getApplicableReferenceNames, visitConstructor, visitReference, visitResourceReference
public static final com.android.tools.lint.detector.api.Issue INVALID
public static final com.android.tools.lint.detector.api.Issue ARG_COUNT
public static final com.android.tools.lint.detector.api.Issue ARG_TYPES
public static final com.android.tools.lint.detector.api.Issue POTENTIAL_PLURAL
public static final java.util.regex.Pattern FORMAT
public StringFormatDetector()
StringFormatDetector
checkpublic boolean appliesTo(@NonNull com.android.resources.ResourceFolderType folderType)
appliesTo
in class com.android.tools.lint.detector.api.ResourceXmlDetector
public boolean appliesTo(@NonNull com.android.tools.lint.detector.api.Context context, @NonNull java.io.File file)
appliesTo
in class com.android.tools.lint.detector.api.ResourceXmlDetector
public java.util.Collection<java.lang.String> getApplicableElements()
getApplicableElements
in interface com.android.tools.lint.detector.api.Detector.XmlScanner
getApplicableElements
in class com.android.tools.lint.detector.api.Detector
public void visitElement(@NonNull com.android.tools.lint.detector.api.XmlContext context, @NonNull org.w3c.dom.Element element)
visitElement
in interface com.android.tools.lint.detector.api.Detector.XmlScanner
visitElement
in class com.android.tools.lint.detector.api.Detector
public void afterCheckProject(@NonNull com.android.tools.lint.detector.api.Context context)
afterCheckProject
in class com.android.tools.lint.detector.api.Detector
public static boolean isLocaleSpecific(@NonNull java.lang.String format)
String.format(String, Object...)
formatting string is "locale dependent", meaning that its output depends
on the locale. This is the case if it for example references decimal
numbers of dates and times.format
- the format stringpublic java.util.List<java.lang.String> getApplicableMethodNames()
getApplicableMethodNames
in interface com.android.tools.lint.detector.api.Detector.JavaPsiScanner
getApplicableMethodNames
in class com.android.tools.lint.detector.api.Detector
public void visitMethod(@NonNull com.android.tools.lint.detector.api.JavaContext context, @Nullable com.intellij.psi.JavaElementVisitor visitor, @NonNull com.intellij.psi.PsiMethodCallExpression node, @NonNull com.intellij.psi.PsiMethod method)
visitMethod
in interface com.android.tools.lint.detector.api.Detector.JavaPsiScanner
visitMethod
in class com.android.tools.lint.detector.api.Detector