aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2011-12-13 16:09:14 -0800
committerTor Norbye <tnorbye@google.com>2011-12-13 16:11:18 -0800
commitfacc66faa372cdf8b8890faeb66a4f0f3996de94 (patch)
tree2cf5f8ec086cf580a4c0f92128c7eeb53d4c7cd7
parent0c58db6eb2ec57ad9860631b104bd5412077dffd (diff)
downloadsdk-facc66faa372cdf8b8890faeb66a4f0f3996de94.zip
sdk-facc66faa372cdf8b8890faeb66a4f0f3996de94.tar.gz
sdk-facc66faa372cdf8b8890faeb66a4f0f3996de94.tar.bz2
Fix unused resource detector for R.attr resources
When you use R.attr attributes from layouts as custom attributes, these need to be recorded as references such that the attrs are not considered unused. Change-Id: I15755cce084dbc71557066167b954ba3df395e55
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java9
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java11
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/customattrlayout.xml7
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/customattr.xml6
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/unusedR.java.txt14
5 files changed, 46 insertions, 1 deletions
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
index 5f2167d..13616b7 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/UnusedResourceDetector.java
@@ -16,6 +16,7 @@
package com.android.tools.lint.checks;
+import static com.android.tools.lint.detector.api.LintConstants.ANDROID_URI;
import static com.android.tools.lint.detector.api.LintConstants.ATTR_NAME;
import static com.android.tools.lint.detector.api.LintConstants.DOT_JAVA;
import static com.android.tools.lint.detector.api.LintConstants.DOT_PNG;
@@ -339,7 +340,8 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec
// Remove styles: they may be used
List<String> styles = new ArrayList<String>();
for (String resource : unused) {
- if (resource.startsWith("R.style.")) { //$NON-NLS-1$
+ // R.style.x, R.styleable.x
+ if (resource.startsWith("R.style")) { //$NON-NLS-1$
styles.add(resource);
}
}
@@ -507,6 +509,11 @@ public class UnusedResourceDetector extends ResourceXmlDetector implements Detec
mReferences.add(R_PREFIX + RESOURCE_CLZ_ATTR + '.'
+ value.substring(ATTR_REF_PREFIX.length()));
}
+
+ if (attribute.getNamespaceURI() != null
+ && !ANDROID_URI.equals(attribute.getNamespaceURI())) {
+ mReferences.add(R_PREFIX + RESOURCE_CLZ_ATTR + '.' + attribute.getLocalName());
+ }
}
@Override
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
index 7213c5d..e9e6f05 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/UnusedResourceDetectorTest.java
@@ -89,4 +89,15 @@ public class UnusedResourceDetectorTest extends AbstractCheckTest {
"AndroidManifest.xml",
"res/values/arrayusage.xml"));
}
+
+ public void testAttrs() throws Exception {
+ assertEquals(
+ "customattrlayout.xml: Warning: The resource R.layout.customattrlayout appears to be unused",
+
+ lintProject(
+ "res/values/customattr.xml",
+ "res/layout/customattrlayout.xml",
+ "unusedR.java.txt=>gen/my/pkg/R.java",
+ "AndroidManifest.xml"));
+ }
}
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/customattrlayout.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/customattrlayout.xml
new file mode 100644
index 0000000..b4c49f0
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/customattrlayout.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<foo.bar.ContentFrame
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:foobar="http://schemas.android.com/apk/res/foo.bar"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ foobar:contentId="@+id/test" />
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/customattr.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/customattr.xml
new file mode 100644
index 0000000..e1ca2d4
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/values/customattr.xml
@@ -0,0 +1,6 @@
+<resources>
+ <declare-styleable name="ContentFrame">
+ <attr name="content" format="reference" />
+ <attr name="contentId" format="reference" />
+ </declare-styleable>
+</resources>
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/unusedR.java.txt b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/unusedR.java.txt
new file mode 100644
index 0000000..3eae431
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/unusedR.java.txt
@@ -0,0 +1,14 @@
+/* AUTO-GENERATED FILE. DO NOT MODIFY.
+ *
+ * This class was automatically generated by the
+ * aapt tool from the resource data it found. It
+ * should not be modified by hand.
+ */
+
+package my.pkg;
+
+public final class R {
+ public static final class attr {
+ public static final int contentId=0x7f020000;
+ }
+}