aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lint/libs/lint_api/src/com/android/tools/lint/detector/api/XmlContext.java18
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/ApiDetector.java16
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ApiDetectorTest.java1
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/layout.xml14
4 files changed, 39 insertions, 10 deletions
diff --git a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/XmlContext.java b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/XmlContext.java
index aabbf79..78e8632 100644
--- a/lint/libs/lint_api/src/com/android/tools/lint/detector/api/XmlContext.java
+++ b/lint/libs/lint_api/src/com/android/tools/lint/detector/api/XmlContext.java
@@ -138,6 +138,9 @@ public class XmlContext extends Context {
private final static Pattern sVersionPattern = Pattern.compile("^v(\\d+)$");//$NON-NLS-1$
+ private static File sCachedFolder = null;
+ private static int sCachedFolderVersion = -1;
+
/**
* Returns the folder version. For example, for the file values-v14/foo.xml,
* it returns 14.
@@ -145,14 +148,23 @@ public class XmlContext extends Context {
* @return the folder version, or -1 if no specific version was specified
*/
public int getFolderVersion() {
- String[] qualifiers = file.getParentFile().getName().split("-"); //$NON-NLS-1$
+ File parent = file.getParentFile();
+ if (parent.equals(sCachedFolder)) {
+ return sCachedFolderVersion;
+ }
+
+ sCachedFolder = parent;
+ sCachedFolderVersion = -1;
+
+ String[] qualifiers = parent.getName().split("-"); //$NON-NLS-1$
for (String qualifier : qualifiers) {
Matcher matcher = sVersionPattern.matcher(qualifier);
if (matcher.matches()) {
- return Integer.parseInt(matcher.group(1));
+ sCachedFolderVersion = Integer.parseInt(matcher.group(1));
+ break;
}
}
- return -1;
+ return sCachedFolderVersion;
}
}
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 c670952..52eaaa8 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
@@ -18,6 +18,7 @@ package com.android.tools.lint.checks;
import static com.android.tools.lint.detector.api.LintConstants.ANDROID_RESOURCE_PREFIX;
import static com.android.tools.lint.detector.api.LintConstants.TARGET_API;
+import static com.android.tools.lint.detector.api.LintConstants.VALUE_MATCH_PARENT;
import com.android.annotations.NonNull;
import com.android.resources.ResourceFolderType;
@@ -133,6 +134,21 @@ public class ApiDetector extends ResourceXmlDetector implements Detector.ClassSc
}
String value = attribute.getValue();
+
+ if (value.equals(VALUE_MATCH_PARENT)) {
+ int minSdk = getMinSdk(context);
+ // minSdk != -1: Avoid warning about this in library projects where
+ // no uses-sdk has been specified
+ if (minSdk != -1 && minSdk < 8 && context.getFolderVersion() < 8) {
+ Location location = context.getLocation(attribute);
+ String message = String.format(
+ "\"match_parent\" requires API level 8 (current min is %1$d), " +
+ "use \"fill_parent\" instead",
+ minSdk);
+ context.report(UNSUPPORTED, attribute, location, message, null);
+ }
+ }
+
if (value.startsWith(ANDROID_RESOURCE_PREFIX)) {
// Convert @android:type/foo into android/R$type and "foo"
int index = value.indexOf('/', ANDROID_RESOURCE_PREFIX.length());
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 39a1e4f..0cde634 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
@@ -32,6 +32,7 @@ public class ApiDetectorTest extends AbstractCheckTest {
"layout.xml:21: Error: View requires API level 14 (current min is 1): <GridLayout>\n" +
"layout.xml:22: Error: @android:attr/actionBarSplitStyle requires API level 14 (current min is 1)\n" +
"layout.xml:23: Error: @android:color/holo_red_light requires API level 14 (current min is 1)\n" +
+ "layout.xml:4: Error: \"match_parent\" requires API level 8 (current min is 1), use \"fill_parent\" instead\n" +
"layout.xml:9: Error: View requires API level 5 (current min is 1): <QuickContactBadge>\n" +
"themes.xml:9: Error: @android:color/holo_red_light requires API level 14 (current min is 1)",
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/layout.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/layout.xml
index e2751ec..83b6b0a 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/layout.xml
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/apicheck/layout.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
+ android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
@@ -13,20 +13,20 @@
<!-- Requires API 11 -->
<CalendarView
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent" />
<!-- Requires API 14 -->
<GridLayout
foo="@android:attr/actionBarSplitStyle"
bar="@android:color/holo_red_light"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent" >
<Button
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent" />
</GridLayout>
</LinearLayout>