diff options
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; + } +} |