aboutsummaryrefslogtreecommitdiffstats
path: root/lint
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-10-05 16:02:37 -0700
committerTor Norbye <tnorbye@google.com>2012-10-05 16:02:37 -0700
commitfaae9048a878120aac3d0e6349871138b87d01ca (patch)
tree151c57184aa6854fb686dd826704ad5033227423 /lint
parent17f39d1945df1ec1d8eb6dee329aa6403c9e8b99 (diff)
downloadsdk-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')
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java8
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java13
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/holomanifest.xml24
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>