diff options
author | Tor Norbye <tnorbye@google.com> | 2012-10-05 16:02:37 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2012-10-05 16:02:37 -0700 |
commit | faae9048a878120aac3d0e6349871138b87d01ca (patch) | |
tree | 151c57184aa6854fb686dd826704ad5033227423 /lint | |
parent | 17f39d1945df1ec1d8eb6dee329aa6403c9e8b99 (diff) | |
download | sdk-faae9048a878120aac3d0e6349871138b87d01ca.zip sdk-faae9048a878120aac3d0e6349871138b87d01ca.tar.gz sdk-faae9048a878120aac3d0e6349871138b87d01ca.tar.bz2 |
Fix API check for theme references in XML
Dots in resource names are replaced by underlines
by aapt.
Change-Id: Ica8244016c050327013103dfb4c60d960e9199c5
Diffstat (limited to 'lint')
3 files changed, 44 insertions, 1 deletions
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java index 4735cd4..5e1a687 100644 --- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java +++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java @@ -93,7 +93,7 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc 6, Severity.ERROR, ApiDetector.class, - EnumSet.of(Scope.CLASS_FILE, Scope.RESOURCE_FILE)) + EnumSet.of(Scope.CLASS_FILE, Scope.RESOURCE_FILE, Scope.MANIFEST)) .addAnalysisScope(Scope.RESOURCE_FILE_SCOPE) .addAnalysisScope(Scope.CLASS_FILE_SCOPE); @@ -163,6 +163,9 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc String owner = "android/R$" //$NON-NLS-1$ + value.substring(prefix.length(), index); String name = value.substring(index + 1); + if (name.indexOf('.') != -1) { + name = name.replace('.', '_'); + } int api = mApiDatabase.getFieldVersion(owner, name); int minSdk = getMinSdk(context); if (api > minSdk && api > context.getFolderVersion()) { @@ -202,6 +205,9 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc String owner = "android/R$" //$NON-NLS-1$ + text.substring(ANDROID_PREFIX.length(), index); String name = text.substring(index + 1); + if (name.indexOf('.') != -1) { + name = name.replace('.', '_'); + } int api = mApiDatabase.getFieldVersion(owner, name); int minSdk = getMinSdk(context); if (api > minSdk && api > context.getFolderVersion()) { diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java index d976cc7..576c0fe 100644 --- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java @@ -626,4 +626,17 @@ public class ApiDetectorTest extends AbstractCheckTest { )); } + public void testManifestReferences() throws Exception { + assertEquals( + "AndroidManifest.xml:15: Error: @android:style/Theme.Holo requires API level 11 (current min is 4) [NewApi]\n" + + " android:theme=\"@android:style/Theme.Holo\" >\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "1 errors, 0 warnings\n", + + lintProject( + "apicheck/classpath=>.classpath", + "apicheck/holomanifest.xml=>AndroidManifest.xml" + )); + } + } diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/holomanifest.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/holomanifest.xml new file mode 100644 index 0000000..8890afc --- /dev/null +++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/holomanifest.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="test.bytecode" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk android:minSdkVersion="4" /> + + <application + android:icon="@drawable/ic_launcher" + android:label="@string/app_name" > + <activity + android:name=".BytecodeTestsActivity" + android:label="@string/app_name" + android:theme="@android:style/Theme.Holo" > + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + </application> + +</manifest> |