aboutsummaryrefslogtreecommitdiffstats
path: root/lint/cli
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2012-12-16 20:59:13 -0800
committerTor Norbye <tnorbye@google.com>2012-12-19 09:14:21 -0800
commitb28737ae52aa0a186587be6b1fa5f35cdf384291 (patch)
treec83eaf91feb92323c8973cb15a4fd94aea2a69cf /lint/cli
parent75c40ee9e1d69ba6e494582f029e200a1c294999 (diff)
downloadsdk-b28737ae52aa0a186587be6b1fa5f35cdf384291.zip
sdk-b28737ae52aa0a186587be6b1fa5f35cdf384291.tar.gz
sdk-b28737ae52aa0a186587be6b1fa5f35cdf384291.tar.bz2
Look for missing commit calls on fragment managers
This implements 41339: Forgetting .commit() after .beginTransaction() Also renames the RecycleDetector to something more generic since it checks for other types of cleanup as well. Change-Id: I19ca6537ba88745845ad452f87b6562085a47fe5
Diffstat (limited to 'lint/cli')
-rw-r--r--lint/cli/src/test/java/com/android/tools/lint/checks/RecycleDetectorTest.java41
-rw-r--r--lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.class.databin0 -> 2433 bytes
-rw-r--r--lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.java.txt66
-rw-r--r--lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/DialogFragment.class.databin0 -> 7113 bytes
4 files changed, 105 insertions, 2 deletions
diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/RecycleDetectorTest.java b/lint/cli/src/test/java/com/android/tools/lint/checks/RecycleDetectorTest.java
index ebef046..df6f451 100644
--- a/lint/cli/src/test/java/com/android/tools/lint/checks/RecycleDetectorTest.java
+++ b/lint/cli/src/test/java/com/android/tools/lint/checks/RecycleDetectorTest.java
@@ -22,10 +22,10 @@ import com.android.tools.lint.detector.api.Detector;
public class RecycleDetectorTest extends AbstractCheckTest {
@Override
protected Detector getDetector() {
- return new RecycleDetector();
+ return new CleanupDetector();
}
- public void test() throws Exception {
+ public void testRecycle() throws Exception {
assertEquals(
"src/test/pkg/RecycleTest.java:56: Warning: This TypedArray should be recycled after use with #recycle() [Recycle]\n" +
" final TypedArray a = getContext().obtainStyledAttributes(attrs,\n" +
@@ -73,4 +73,41 @@ public class RecycleDetectorTest extends AbstractCheckTest {
"bytecode/RecycleTest.class.data=>bin/classes/test/pkg/RecycleTest.class"
));
}
+
+ public void testCommit() throws Exception {
+ assertEquals(""
+ + "src/test/pkg/CommitTest.java:24: Warning: This FragmentTransaction should be recycled after use with #recycle() [CommitTransaction]\n"
+ + " getFragmentManager().beginTransaction(); // Missing commit\n"
+ + " ~~~~~~~~~~~~~~~~\n"
+ + "src/test/pkg/CommitTest.java:29: Warning: This FragmentTransaction should be recycled after use with #recycle() [CommitTransaction]\n"
+ + " FragmentTransaction transaction2 = getFragmentManager().beginTransaction(); // Missing commit\n"
+ + " ~~~~~~~~~~~~~~~~\n"
+ + "src/test/pkg/CommitTest.java:38: Warning: This FragmentTransaction should be recycled after use with #recycle() [CommitTransaction]\n"
+ + " getFragmentManager().beginTransaction(); // Missing commit\n"
+ + " ~~~~~~~~~~~~~~~~\n"
+ + "src/test/pkg/CommitTest.java:64: Warning: This FragmentTransaction should be recycled after use with #recycle() [Recycle]\n"
+ + " getSupportFragmentManager().beginTransaction();\n"
+ + " ~~~~~~~~~~~~~~~~\n"
+ + "0 errors, 4 warnings\n",
+
+ lintProject(
+ "apicheck/classpath=>.classpath",
+ "apicheck/minsdk4.xml=>AndroidManifest.xml",
+ "project.properties1=>project.properties",
+ "bytecode/CommitTest.java.txt=>src/test/pkg/CommitTest.java",
+ "bytecode/CommitTest.class.data=>bin/classes/test/pkg/CommitTest.class"
+ ));
+ }
+
+ public void testCommit2() throws Exception {
+ assertEquals(""
+ + "No warnings.",
+
+ lintProject(
+ "apicheck/classpath=>.classpath",
+ "apicheck/minsdk4.xml=>AndroidManifest.xml",
+ "project.properties1=>project.properties",
+ "bytecode/DialogFragment.class.data=>bin/classes/test/pkg/DialogFragment.class"
+ ));
+ }
}
diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.class.data b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.class.data
new file mode 100644
index 0000000..76f35c0
--- /dev/null
+++ b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.class.data
Binary files differ
diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.java.txt b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.java.txt
new file mode 100644
index 0000000..49395d7
--- /dev/null
+++ b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/CommitTest.java.txt
@@ -0,0 +1,66 @@
+package test.pkg;
+
+import android.app.Activity;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+
+@SuppressWarnings("unused")
+public class CommitTest extends Activity {
+ public void ok1() {
+ getFragmentManager().beginTransaction().commit();
+ }
+
+ public void ok2() {
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.commit();
+ }
+
+ public void ok3() {
+ FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.commitAllowingStateLoss();
+ }
+
+ public void error1() {
+ getFragmentManager().beginTransaction(); // Missing commit
+ }
+
+ public void error() {
+ FragmentTransaction transaction1 = getFragmentManager().beginTransaction();
+ FragmentTransaction transaction2 = getFragmentManager().beginTransaction(); // Missing commit
+ transaction1.commit();
+ }
+
+ public void error3_public() {
+ error3();
+ }
+
+ private void error3() {
+ getFragmentManager().beginTransaction(); // Missing commit
+ }
+
+ public void ok4(FragmentManager manager, String tag) {
+ FragmentTransaction ft = manager.beginTransaction();
+ ft.add(null, tag);
+ ft.commit();
+ }
+
+ // Support library
+
+ private android.support.v4.app.FragmentManager getSupportFragmentManager() {
+ return null;
+ }
+
+ public void ok5() {
+ getSupportFragmentManager().beginTransaction().commit();
+ }
+
+ public void ok6(android.support.v4.app.FragmentManager manager, String tag) {
+ android.support.v4.app.FragmentTransaction ft = manager.beginTransaction();
+ ft.add(null, tag);
+ ft.commit();
+ }
+
+ public void error4() {
+ getSupportFragmentManager().beginTransaction();
+ }
+}
diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/DialogFragment.class.data b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/DialogFragment.class.data
new file mode 100644
index 0000000..f57a263
--- /dev/null
+++ b/lint/cli/src/test/java/com/android/tools/lint/checks/data/bytecode/DialogFragment.class.data
Binary files differ