private void scanJavaFile(Context context, File file) { String fileName = file.getName(); if (fileName.endsWith(DOT_JAVA) && file.exists()) { if (fileName.equals("R.java")) { //$NON-NLS-1$ addJavaDeclarations(context, file); } else { addJavaReferences(context, file); } } else if (file.isDirectory()) { File[] children = file.listFiles(); if (children != null) { for (File child : children) { scanJavaFile(context, child); } } } }
private void addInactiveReferences(@NonNull AndroidProject model, @NonNull Variant variant) { for (SourceProvider provider : getInactiveSourceProviders(model, variant)) { for (File res : provider.getResDirectories()) { // Scan resource directory if (res.isDirectory()) { recordInactiveXmlResources(res); } } for (File file : provider.getJavaDirectories()) { // Scan Java directory if (file.isDirectory()) { recordInactiveJavaReferences(file); } } } }
@Override public void beforeCheckFile(@NonNull Context context) { if (context.getPhase() == 1) { mNames = new HashSet<String>(); } // Convention seen in various projects mIgnoreFile = context.file.getName().startsWith("donottranslate") //$NON-NLS-1$ || UnusedResourceDetector.isAnalyticsFile(context); if (!context.getProject().getReportIssues()) { mIgnoreFile = true; } }
checkChildRefs(item); } else { assert context.getPhase() == 2; if (mUnused.containsKey(resource)) { if (context.getDriver().isSuppressed(context, getIssue(resource), item)) { mUnused.remove(resource); continue; if (isAnalyticsFile(context)) { mUnused.remove(resource); continue; recordLocation(resource, context.getLocation(nameAttribute)); || TAG_STRING_ARRAY.equals(element.getTagName()); for (Element item : LintUtils.getChildren(element)) { checkChildRefs(item);
Variant variant = project.getCurrentVariant(); if (model != null && variant != null) { addInactiveReferences(model, variant); addDynamicResources(context); mModel.processToolsAttributes(); location = Location.create(context.getProject().getDir()); context.report(getIssue(resource), location, message);
mDeclarations.add(resource); } else if (mUnused.containsKey(resource)) { if (context.getDriver().isSuppressed(context, getIssue(resource), attribute)) { mUnused.remove(resource); return; return; recordLocation(resource, context.getLocation(attribute)); return;
private void recordInactiveXmlResources(@NonNull File resDir) { File[] resourceFolders = resDir.listFiles(); if (resourceFolders != null) { for (File folder : resourceFolders) { ResourceFolderType folderType = ResourceFolderType.getFolderType(folder.getName()); if (folderType != null) { recordInactiveXmlResources(folderType, folder); } } } }
private void recordInactiveJavaReferences(@NonNull File resDir) { File[] files = resDir.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { recordInactiveJavaReferences(file); } else if (file.getName().endsWith(DOT_JAVA)) { try { String java = Files.toString(file, UTF_8); mModel.tokenizeJavaCode(java); } catch (Throwable ignore) { // Tolerate parsing errors etc in these files; they're user // sources, and this is even for inactive source sets. } } } } }
private void addDynamicResources( @NonNull Context context) { Project project = context.getProject(); AndroidProject model = project.getGradleProjectModel(); if (model != null) { Variant selectedVariant = project.getCurrentVariant(); if (selectedVariant != null) { for (BuildTypeContainer container : model.getBuildTypes()) { if (selectedVariant.getBuildType().equals(container.getBuildType().getName())) { addDynamicResources(project, container.getBuildType().getResValues()); } } } ProductFlavor flavor = model.getDefaultConfig().getProductFlavor(); addDynamicResources(project, flavor.getResValues()); } }
&& fileName.startsWith(".", //$NON-NLS-1$ name.length())) { recordLocation(resource, Location.create(file)); Issue issue = getIssue(resource);