aboutsummaryrefslogtreecommitdiffstats
path: root/lint
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-10-04 09:34:27 -0700
committerTor Norbye <tnorbye@google.com>2012-10-04 09:34:27 -0700
commitc3e3de0a15a83422d3c43f536a45e53e8156bfe5 (patch)
treed392f8d65e15eb2d5194f3e19d8290d41efbce91 /lint
parent1fca455a13e2dc7c20904a7e9a89911c7e9a887b (diff)
downloadsdk-c3e3de0a15a83422d3c43f536a45e53e8156bfe5.zip
sdk-c3e3de0a15a83422d3c43f536a45e53e8156bfe5.tar.gz
sdk-c3e3de0a15a83422d3c43f536a45e53e8156bfe5.tar.bz2
Fix misc lint bugs
I ran lint over some large projects and manually verified the report; this uncovered a couple of false positives. Change-Id: I006d64a03119c6badc40e33df9ab4079e07dc7c5
Diffstat (limited to 'lint')
-rw-r--r--lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultSdkInfo.java17
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java12
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java2
-rw-r--r--lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java3
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/DeprecationDetectorTest.java18
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ViewTypeDetectorTest.java10
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/WrongIdDetectorTest.java8
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/default_item_badges.xml5
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/deprecation.xml3
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/detailed_item.xml12
-rw-r--r--lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/WrongCastActivity3.java.txt11
11 files changed, 94 insertions, 7 deletions
diff --git a/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultSdkInfo.java b/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultSdkInfo.java
index b5ae26d..b5a1628 100644
--- a/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultSdkInfo.java
+++ b/lint/libs/lint_api/src/com/android/tools/lint/client/api/DefaultSdkInfo.java
@@ -23,6 +23,7 @@ import static com.android.SdkConstants.ABS_SPINNER;
import static com.android.SdkConstants.ADAPTER_VIEW;
import static com.android.SdkConstants.AUTO_COMPLETE_TEXT_VIEW;
import static com.android.SdkConstants.BUTTON;
+import static com.android.SdkConstants.CHECKABLE;
import static com.android.SdkConstants.CHECKED_TEXT_VIEW;
import static com.android.SdkConstants.CHECK_BOX;
import static com.android.SdkConstants.COMPOUND_BUTTON;
@@ -125,6 +126,9 @@ class DefaultSdkInfo extends SdkInfo {
if (parent.equals(child)) {
return true;
}
+ if (implementsInterface(child, parentType)) {
+ return true;
+ }
child = PARENTS.get(child);
if (child == null) {
// Unknown view - err on the side of caution
@@ -135,6 +139,10 @@ class DefaultSdkInfo extends SdkInfo {
return false;
}
+ private static boolean implementsInterface(String className, String interfaceName) {
+ return interfaceName.equals(INTERFACES.get(className));
+ }
+
// Strip off type parameters, e.g. AdapterView<?> => AdapterView
private static String getRawType(String type) {
if (type != null) {
@@ -230,4 +238,13 @@ class DefaultSdkInfo extends SdkInfo {
}
*/
}
+
+ // Currently using a map; this should really be a list, but using a map until we actually
+ // start adding more than one item
+ @NonNull
+ private static final Map<String, String> INTERFACES = new HashMap<String, String>(2);
+ static {
+ INTERFACES.put(CHECKED_TEXT_VIEW, CHECKABLE);
+ INTERFACES.put(COMPOUND_BUTTON, CHECKABLE);
+ }
}
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java
index 00953d8..86dcef4 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/DeprecationDetector.java
@@ -27,6 +27,8 @@ import static com.android.SdkConstants.ATTR_NUMERIC;
import static com.android.SdkConstants.ATTR_PASSWORD;
import static com.android.SdkConstants.ATTR_PHONE_NUMBER;
import static com.android.SdkConstants.ATTR_SINGLE_LINE;
+import static com.android.SdkConstants.EDIT_TEXT;
+import static com.android.SdkConstants.VALUE_TRUE;
import com.android.annotations.NonNull;
import com.android.tools.lint.detector.api.Category;
@@ -135,7 +137,15 @@ public class DeprecationDetector extends LayoutDetector {
String fix;
int minSdk = 1;
if (name.equals(ATTR_EDITABLE)) {
- fix = "Use an <EditText> to make it editable";
+ if (!EDIT_TEXT.equals(attribute.getOwnerElement().getTagName())) {
+ fix = "Use an <EditText> to make it editable";
+ } else {
+ if (VALUE_TRUE.equals(attribute.getValue())) {
+ fix = "<EditText> is already editable";
+ } else {
+ fix = "Use inputType instead";
+ }
+ }
} else if (name.equals(ATTR_ENABLED)) {
fix = "Use state_enabled instead";
} else if (name.equals(ATTR_SINGLE_LINE)) {
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java
index a4fc2f6..2d72271 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/NamespaceDetector.java
@@ -68,7 +68,7 @@ public class NamespaceDetector extends LayoutDetector {
"Unused namespace declarations take up space and require processing that is not " +
"necessary",
- Category.CORRECTNESS,
+ Category.PERFORMANCE,
1,
Severity.WARNING,
NamespaceDetector.class,
diff --git a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java
index 3f8afb6..7efbfbf 100644
--- a/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java
+++ b/lint/libs/lint_checks/src/com/android/tools/lint/checks/WrongIdDetector.java
@@ -231,7 +231,8 @@ public class WrongIdDetector extends LayoutDetector {
id, suggestionMessage);
}
report(context, UNKNOWN_ID, handle, message);
- } else if (checkSameLayout && (!projectScope || isBound)) {
+ } else if (checkSameLayout && (!projectScope || isBound)
+ && id.startsWith(NEW_ID_PREFIX)) {
// The id was defined, but in a different layout. Usually not intentional
// (might be referring to a random other view that happens to have the same
// name.)
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/DeprecationDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/DeprecationDetectorTest.java
index 0e4ec2f..f399014 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/DeprecationDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/DeprecationDetectorTest.java
@@ -33,8 +33,13 @@ public class DeprecationDetectorTest extends AbstractCheckTest {
"res/layout/deprecation.xml:18: Warning: android:editable is deprecated: Use an <EditText> to make it editable [Deprecated]\n" +
" android:editable=\"true\"\n" +
" ~~~~~~~~~~~~~~~~~~~~~~~\n" +
- "0 errors, 2 warnings\n" +
- "",
+ "res/layout/deprecation.xml:26: Warning: android:editable is deprecated: <EditText> is already editable [Deprecated]\n" +
+ " <EditText android:editable=\"true\" />\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "res/layout/deprecation.xml:27: Warning: android:editable is deprecated: Use inputType instead [Deprecated]\n" +
+ " <EditText android:editable=\"false\" />\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "0 errors, 4 warnings\n",
lintProject(
"apicheck/minsdk1.xml=>AndroidManifest.xml",
@@ -67,8 +72,13 @@ public class DeprecationDetectorTest extends AbstractCheckTest {
"res/layout/deprecation.xml:23: Warning: android:phoneNumber is deprecated: Use inputType instead [Deprecated]\n" +
" android:phoneNumber=\"true\"\n" +
" ~~~~~~~~~~~~~~~~~~~~~~~~~~\n" +
- "0 errors, 8 warnings\n" +
- "",
+ "res/layout/deprecation.xml:26: Warning: android:editable is deprecated: <EditText> is already editable [Deprecated]\n" +
+ " <EditText android:editable=\"true\" />\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "res/layout/deprecation.xml:27: Warning: android:editable is deprecated: Use inputType instead [Deprecated]\n" +
+ " <EditText android:editable=\"false\" />\n" +
+ " ~~~~~~~~~~~~~~~~~~~~~~~~\n" +
+ "0 errors, 10 warnings\n",
lintProject(
"apicheck/minsdk4.xml=>AndroidManifest.xml",
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ViewTypeDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ViewTypeDetectorTest.java
index a200de0..bfc56e2 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ViewTypeDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/ViewTypeDetectorTest.java
@@ -48,4 +48,14 @@ public class ViewTypeDetectorTest extends AbstractCheckTest {
"src/test/pkg/WrongCastActivity2.java.txt=>src/test/pkg/WrongCastActivity2.java"
));
}
+
+ public void testCheckable() throws Exception {
+ assertEquals(
+ "No warnings.",
+
+ lintProject(
+ "res/layout/casts2.xml",
+ "src/test/pkg/WrongCastActivity3.java.txt=>src/test/pkg/WrongCastActivity3.java"
+ ));
+ }
}
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/WrongIdDetectorTest.java b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/WrongIdDetectorTest.java
index 15675ba..b3fd203 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/WrongIdDetectorTest.java
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/WrongIdDetectorTest.java
@@ -87,4 +87,12 @@ public class WrongIdDetectorTest extends AbstractCheckTest {
lintFiles("wrongid/ignorelayout1.xml=>res/layout/layout1.xml"));
}
+ public void testNewIdPrefix() throws Exception {
+ assertEquals(
+ "No warnings.",
+
+ lintFiles("res/layout/default_item_badges.xml",
+ "res/layout/detailed_item.xml"));
+ }
+
}
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/default_item_badges.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/default_item_badges.xml
new file mode 100644
index 0000000..082a520
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/default_item_badges.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/video_badges"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/deprecation.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/deprecation.xml
index 74a78ff..70b7f23 100644
--- a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/deprecation.xml
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/deprecation.xml
@@ -23,4 +23,7 @@
android:phoneNumber="true"
android:singleLine="true" />
+ <EditText android:editable="true" />
+ <EditText android:editable="false" />
+
</AbsoluteLayout>
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/detailed_item.xml b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/detailed_item.xml
new file mode 100644
index 0000000..a5d4226
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/res/layout/detailed_item.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <FrameLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/video_badges" />
+
+</RelativeLayout>
diff --git a/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/WrongCastActivity3.java.txt b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/WrongCastActivity3.java.txt
new file mode 100644
index 0000000..1701600
--- /dev/null
+++ b/lint/libs/lint_checks/tests/src/com/android/tools/lint/checks/data/src/test/pkg/WrongCastActivity3.java.txt
@@ -0,0 +1,11 @@
+package test.pkg;
+
+import android.app.*;
+import android.view.*;
+import android.widget.*;
+
+public class WrongCastActivity3 extends Activity {
+ private void test() {
+ final Checkable check = (Checkable) findViewById(R.id.additional);
+ }
+}