diff options
author | Tor Norbye <tnorbye@google.com> | 2013-01-12 13:08:29 -0800 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2013-01-14 16:45:33 -0800 |
commit | be9f445a90c608c2524687cb36e602275627e375 (patch) | |
tree | cbd9720ad24201ba4292b0869b677b9208705cab /lint/cli | |
parent | c910f93a712dd761e6a07ba2090ee7382cc4d692 (diff) | |
download | sdk-be9f445a90c608c2524687cb36e602275627e375.zip sdk-be9f445a90c608c2524687cb36e602275627e375.tar.gz sdk-be9f445a90c608c2524687cb36e602275627e375.tar.bz2 |
42661: Split API check constant warnings into a separate issue
The issue has severity warning instead of error.
Also, deliberately filter out constants which moved to a
base class.
Change-Id: I4976c421aa589cdb0a673c2d49bcafdd80ff005e
Diffstat (limited to 'lint/cli')
4 files changed, 71 insertions, 40 deletions
diff --git a/lint/cli/src/test/java/com/android/tools/lint/MainTest.java b/lint/cli/src/test/java/com/android/tools/lint/MainTest.java index 8ba40aa..68a1ea3 100644 --- a/lint/cli/src/test/java/com/android/tools/lint/MainTest.java +++ b/lint/cli/src/test/java/com/android/tools/lint/MainTest.java @@ -147,14 +147,6 @@ public class MainTest extends AbstractCheckTest { "Similarly, you can use tools:targetApi=\"11\" in an XML file to indicate that\n" + "the element will only be inflated in an adequate context.\n" + "\n" + - "Lint will also flag certain constants, such as static final integers, which\n" + - "were introduced in later versions. These will actually be copied into the\n" + - "class files rather than being referenced, which means that the value is\n" + - "available even when running on older devices. In some cases that's fine, and\n" + - "in other cases it can result in a runtime crash or incorrect behavior. It\n" + - "depends on the context, so consider the code carefully and device whether it's\n" + - "safe and can be suppressed or whether the code needs to be guarded.\n" + - "\n" + "\n", // Expected error diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/ApiDetectorTest.java b/lint/cli/src/test/java/com/android/tools/lint/checks/ApiDetectorTest.java index a4c7e4a..1d8cdc8 100644 --- a/lint/cli/src/test/java/com/android/tools/lint/checks/ApiDetectorTest.java +++ b/lint/cli/src/test/java/com/android/tools/lint/checks/ApiDetectorTest.java @@ -138,14 +138,14 @@ public class ApiDetectorTest extends AbstractCheckTest { " ~~~~~~~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:33: Error: Field requires API level 11 (current min is 1): dalvik.bytecode.OpcodeInfo#MAXIMUM_VALUE [NewApi]\n" + " int field = OpcodeInfo.MAXIMUM_VALUE; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:38: Error: Field requires API level 14 (current min is 1): android.app.ApplicationErrorReport#batteryInfo [NewApi]\n" + " BatteryInfo batteryInfo = getReport().batteryInfo;\n" + " ~~~~~~~~~~~\n" + // Note: the above error range is wrong; should be pointing to the second "src/foo/bar/ApiCallTest.java:41: Error: Field requires API level 11 (current min is 1): android.graphics.PorterDuff.Mode#OVERLAY [NewApi]\n" + " Mode mode = PorterDuff.Mode.OVERLAY; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~\n" + "7 errors, 0 warnings\n", lintProject( @@ -172,13 +172,13 @@ public class ApiDetectorTest extends AbstractCheckTest { " ~~~~~~~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:33: Error: Field requires API level 11 (current min is 2): dalvik.bytecode.OpcodeInfo#MAXIMUM_VALUE [NewApi]\n" + " int field = OpcodeInfo.MAXIMUM_VALUE; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:38: Error: Field requires API level 14 (current min is 2): android.app.ApplicationErrorReport#batteryInfo [NewApi]\n" + " BatteryInfo batteryInfo = getReport().batteryInfo;\n" + " ~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:41: Error: Field requires API level 11 (current min is 2): android.graphics.PorterDuff.Mode#OVERLAY [NewApi]\n" + " Mode mode = PorterDuff.Mode.OVERLAY; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~\n" + "7 errors, 0 warnings\n", lintProject( @@ -202,13 +202,13 @@ public class ApiDetectorTest extends AbstractCheckTest { " ~~~~~~~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:33: Error: Field requires API level 11 (current min is 4): dalvik.bytecode.OpcodeInfo#MAXIMUM_VALUE [NewApi]\n" + " int field = OpcodeInfo.MAXIMUM_VALUE; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:38: Error: Field requires API level 14 (current min is 4): android.app.ApplicationErrorReport#batteryInfo [NewApi]\n" + " BatteryInfo batteryInfo = getReport().batteryInfo;\n" + " ~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:41: Error: Field requires API level 11 (current min is 4): android.graphics.PorterDuff.Mode#OVERLAY [NewApi]\n" + " Mode mode = PorterDuff.Mode.OVERLAY; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~\n" + "6 errors, 0 warnings\n", lintProject( @@ -229,13 +229,13 @@ public class ApiDetectorTest extends AbstractCheckTest { " ~~~~~~~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:33: Error: Field requires API level 11 (current min is 10): dalvik.bytecode.OpcodeInfo#MAXIMUM_VALUE [NewApi]\n" + " int field = OpcodeInfo.MAXIMUM_VALUE; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:38: Error: Field requires API level 14 (current min is 10): android.app.ApplicationErrorReport#batteryInfo [NewApi]\n" + " BatteryInfo batteryInfo = getReport().batteryInfo;\n" + " ~~~~~~~~~~~\n" + "src/foo/bar/ApiCallTest.java:41: Error: Field requires API level 11 (current min is 10): android.graphics.PorterDuff.Mode#OVERLAY [NewApi]\n" + " Mode mode = PorterDuff.Mode.OVERLAY; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~\n" + "5 errors, 0 warnings\n", lintProject( @@ -366,13 +366,13 @@ public class ApiDetectorTest extends AbstractCheckTest { " ~~~~~~~~~~~~~~~~~~~\n" + "src/foo/bar/SuppressTest1.java:89: Error: Field requires API level 11 (current min is 1): dalvik.bytecode.OpcodeInfo#MAXIMUM_VALUE [NewApi]\n" + " int field = OpcodeInfo.MAXIMUM_VALUE; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~~~~~~~\n" + "src/foo/bar/SuppressTest1.java:94: Error: Field requires API level 14 (current min is 1): android.app.ApplicationErrorReport#batteryInfo [NewApi]\n" + " BatteryInfo batteryInfo = getReport().batteryInfo;\n" + " ~~~~~~~~~~~\n" + "src/foo/bar/SuppressTest1.java:97: Error: Field requires API level 11 (current min is 1): android.graphics.PorterDuff.Mode#OVERLAY [NewApi]\n" + " Mode mode = PorterDuff.Mode.OVERLAY; // API 11\n" + - " ~~~~~~~~~~~~~~~~~~~~~~~\n" + + " ~~~~~~~\n" + // Note: These annotations are within the methods, not ON the methods, so they have // no effect (because they don't end up in the bytecode) @@ -719,64 +719,64 @@ public class ApiDetectorTest extends AbstractCheckTest { public void testJavaConstants() throws Exception { assertEquals("" - + "src/test/pkg/ApiSourceCheck.java:5: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:5: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + "import static android.view.View.MEASURED_STATE_MASK;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:30: Error: Field requires API level 11 (current min is 1): android.widget.ZoomControls#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:30: Warning: Field requires API level 11 (current min is 1): android.widget.ZoomControls#MEASURED_STATE_MASK [InlinedApi]\n" + " int x = MEASURED_STATE_MASK;\n" + " ~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:33: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:33: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " int y = android.view.View.MEASURED_STATE_MASK;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:36: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:36: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " int z = View.MEASURED_STATE_MASK;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:37: Error: Field requires API level 14 (current min is 1): android.view.View#FIND_VIEWS_WITH_TEXT [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:37: Warning: Field requires API level 14 (current min is 1): android.view.View#FIND_VIEWS_WITH_TEXT [InlinedApi]\n" + " int find2 = View.FIND_VIEWS_WITH_TEXT; // requires API 14\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:40: Error: Field requires API level 12 (current min is 1): android.app.ActivityManager#MOVE_TASK_NO_USER_ACTION [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:40: Warning: Field requires API level 12 (current min is 1): android.app.ActivityManager#MOVE_TASK_NO_USER_ACTION [InlinedApi]\n" + " int w = ActivityManager.MOVE_TASK_NO_USER_ACTION;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:41: Error: Field requires API level 14 (current min is 1): android.widget.ZoomButton#FIND_VIEWS_WITH_CONTENT_DESCRIPTION [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:41: Warning: Field requires API level 14 (current min is 1): android.widget.ZoomButton#FIND_VIEWS_WITH_CONTENT_DESCRIPTION [InlinedApi]\n" + " int find1 = ZoomButton.FIND_VIEWS_WITH_CONTENT_DESCRIPTION; // requires\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:44: Error: Field requires API level 9 (current min is 1): android.widget.ZoomControls#OVER_SCROLL_ALWAYS [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:44: Warning: Field requires API level 9 (current min is 1): android.widget.ZoomControls#OVER_SCROLL_ALWAYS [InlinedApi]\n" + " int overScroll = OVER_SCROLL_ALWAYS; // requires API 9\n" + " ~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:47: Error: Field requires API level 16 (current min is 1): android.widget.ZoomControls#IMPORTANT_FOR_ACCESSIBILITY_AUTO [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:47: Warning: Field requires API level 16 (current min is 1): android.widget.ZoomControls#IMPORTANT_FOR_ACCESSIBILITY_AUTO [InlinedApi]\n" + " int auto = IMPORTANT_FOR_ACCESSIBILITY_AUTO; // requires API 16\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:51: Error: Field requires API level 14 (current min is 1): android.widget.ZoomButton#ROTATION_X [NewApi]\n" - + " Object rotationX = ZoomButton.ROTATION_X; // Requires API 14\n" - + " ~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:54: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:54: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " return (child.getMeasuredWidth() & View.MEASURED_STATE_MASK)\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:55: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_HEIGHT_STATE_SHIFT [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:55: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_HEIGHT_STATE_SHIFT [InlinedApi]\n" + " | ((child.getMeasuredHeight() >> View.MEASURED_HEIGHT_STATE_SHIFT) & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:55: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_HEIGHT_STATE_SHIFT [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:55: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_HEIGHT_STATE_SHIFT [InlinedApi]\n" + " | ((child.getMeasuredHeight() >> View.MEASURED_HEIGHT_STATE_SHIFT) & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:55: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:55: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " | ((child.getMeasuredHeight() >> View.MEASURED_HEIGHT_STATE_SHIFT) & (View.MEASURED_STATE_MASK >> View.MEASURED_HEIGHT_STATE_SHIFT));\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:90: Error: Field requires API level 8 (current min is 1): android.R.id#custom [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:90: Warning: Field requires API level 8 (current min is 1): android.R.id#custom [InlinedApi]\n" + " int custom = android.R.id.custom; // API 8\n" + " ~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:94: Error: Field requires API level 13 (current min is 1): android.Manifest.permission#SET_POINTER_SPEED [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:94: Warning: Field requires API level 13 (current min is 1): android.Manifest.permission#SET_POINTER_SPEED [InlinedApi]\n" + " String setPointerSpeed = permission.SET_POINTER_SPEED;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:95: Error: Field requires API level 13 (current min is 1): android.Manifest.permission#SET_POINTER_SPEED [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:95: Warning: Field requires API level 13 (current min is 1): android.Manifest.permission#SET_POINTER_SPEED [InlinedApi]\n" + " String setPointerSpeed2 = Manifest.permission.SET_POINTER_SPEED;\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:120: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:120: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " int y = View.MEASURED_STATE_MASK; // Not OK\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "src/test/pkg/ApiSourceCheck.java:121: Error: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [NewApi]\n" + + "src/test/pkg/ApiSourceCheck.java:121: Warning: Field requires API level 11 (current min is 1): android.view.View#MEASURED_STATE_MASK [InlinedApi]\n" + " testBenignUsages(View.MEASURED_STATE_MASK); // Not OK\n" + " ~~~~~~~~~~~~~~~~~~~~~~~~\n" - + "19 errors, 0 warnings\n", + + "src/test/pkg/ApiSourceCheck.java:51: Error: Field requires API level 14 (current min is 1): android.widget.ZoomButton#ROTATION_X [NewApi]\n" + + " Object rotationX = ZoomButton.ROTATION_X; // Requires API 14\n" + + " ~~~~~~~~~~\n" + + "1 errors, 18 warnings\n", lintProject( "apicheck/classpath=>.classpath", @@ -840,4 +840,25 @@ public class ApiDetectorTest extends AbstractCheckTest { "res/values/styles2.xml=>res/values-v14/styles2.xml" )); } + + public void testMovedConstants() throws Exception { + assertEquals("" + // These two constants were introduced in API 11; the other 3 were available + // on subclass ListView from API 1 + + "src/test/pkg/ApiSourceCheck2.java:10: Warning: Field requires API level 11 (current min is 1): android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL [InlinedApi]\n" + + " int mode2 = AbsListView.CHOICE_MODE_MULTIPLE_MODAL;\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "src/test/pkg/ApiSourceCheck2.java:14: Warning: Field requires API level 11 (current min is 1): android.widget.ListView#CHOICE_MODE_MULTIPLE_MODAL [InlinedApi]\n" + + " int mode6 = ListView.CHOICE_MODE_MULTIPLE_MODAL;\n" + + " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n" + + "0 errors, 2 warnings\n", + + lintProject( + "apicheck/classpath=>.classpath", + "apicheck/minsdk1.xml=>AndroidManifest.xml", + "project.properties1=>project.properties", + "apicheck/ApiSourceCheck2.java.txt=>src/test/pkg/ApiSourceCheck2.java", + "apicheck/ApiSourceCheck2.class.data=>bin/classes/test/pkg/ApiSourceCheck2.class" + )); + } } diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.class.data b/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.class.data Binary files differnew file mode 100644 index 0000000..a37d62c --- /dev/null +++ b/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.class.data diff --git a/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.java.txt b/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.java.txt new file mode 100644 index 0000000..adce4f0 --- /dev/null +++ b/lint/cli/src/test/java/com/android/tools/lint/checks/data/apicheck/ApiSourceCheck2.java.txt @@ -0,0 +1,18 @@ +package test.pkg; + +import android.widget.AbsListView; +import android.widget.ListView; + +@SuppressWarnings("unused") +public class ApiSourceCheck2 { + public void test() { + int mode1 = AbsListView.CHOICE_MODE_MULTIPLE; + int mode2 = AbsListView.CHOICE_MODE_MULTIPLE_MODAL; + int mode3 = AbsListView.CHOICE_MODE_NONE; + int mode4 = AbsListView.CHOICE_MODE_SINGLE; + int mode5 = ListView.CHOICE_MODE_MULTIPLE; + int mode6 = ListView.CHOICE_MODE_MULTIPLE_MODAL; + int mode7 = ListView.CHOICE_MODE_NONE; + int mode8 = ListView.CHOICE_MODE_SINGLE; + } +} |