| <?xml version="1.0" encoding="UTF-8"?> |
| <issues format="4" by="lint 26.1.1"> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert semanticsNode.id > ROOT_NODE_ID;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="537" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert semanticsNode.id == ROOT_NODE_ID;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="540" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert !(hasCheckedState && hasToggledState);" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="649" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert flutterSemanticsTree.containsKey(0);" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="984" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert(object.scrollIndex + visibleChildren <= object.scrollChildren);" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1240" |
| column="21"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert(!object.childrenInHitTestOrder.get(object.scrollIndex).hasFlag(Flag.IS_HIDDEN));" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1241" |
| column="21"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert virtualViewId != ROOT_NODE_ID;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1393" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert flutterSemanticsTree.containsKey(semanticsNodeToBeRemoved.id);" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1405" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert flutterSemanticsTree.get(semanticsNodeToBeRemoved.id) == semanticsNodeToBeRemoved;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1406" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert hadPreviousConfig;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1701" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert action.overrideId == -1;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1830" |
| column="25"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert !globalGeometryDirty;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1852" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert packet.position() % (POINTER_DATA_FIELD_COUNT * BYTE_PER_FIELD) == 0;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/engine/android/AndroidTouchProcessor.java" |
| line="80" |
| column="5"/> |
| </issue> |
| |
| <issue |
| id="Assert" |
| message="Assertions are unreliable in Dalvik and unimplemented in ART. Use `BuildConfig.DEBUG` conditional checks instead." |
| errorLine1=" assert 0 <= value;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/common/StandardMessageCodec.java" |
| line="112" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 18 (current min is 16): `android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_PORTRAIT`" |
| errorLine1=" return ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java" |
| line="221" |
| column="16"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 18 (current min is 16): `android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER_LANDSCAPE`" |
| errorLine1=" return ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java" |
| line="225" |
| column="16"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 18 (current min is 16): `android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_USER`" |
| errorLine1=" return ActivityInfo.SCREEN_ORIENTATION_FULL_USER;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/engine/systemchannels/PlatformChannel.java" |
| line="229" |
| column="16"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 21 (current min is 16): `android.view.HapticFeedbackConstants#CLOCK_TICK`" |
| errorLine1=" view.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java" |
| line="121" |
| column="44"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 19 (current min is 16): `android.view.View#SYSTEM_UI_FLAG_IMMERSIVE_STICKY`" |
| errorLine1=" enabledOverlays |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformPlugin.java" |
| line="154" |
| column="32"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 17 (current min is 16): `android.view.View#LAYOUT_DIRECTION_LTR`" |
| errorLine1=" return direction == View.LAYOUT_DIRECTION_LTR || direction == View.LAYOUT_DIRECTION_RTL;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java" |
| line="336" |
| column="29"/> |
| </issue> |
| |
| <issue |
| id="InlinedApi" |
| message="Field requires API level 17 (current min is 16): `android.view.View#LAYOUT_DIRECTION_RTL`" |
| errorLine1=" return direction == View.LAYOUT_DIRECTION_LTR || direction == View.LAYOUT_DIRECTION_RTL;" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java" |
| line="336" |
| column="71"/> |
| </issue> |
| |
| <issue |
| id="OldTargetApi" |
| message="Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the `android.os.Build.VERSION_CODES` javadoc for details." |
| errorLine1=" <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/AndroidManifest.xml" |
| line="8" |
| column="42"/> |
| </issue> |
| |
| <issue |
| id="HardcodedDebugMode" |
| message="Avoid hardcoding the debug mode; leaving it out allows debug and release builds to automatically assign one" |
| errorLine1=" <application android:label="Flutter Shell" android:name="FlutterApplication" android:debuggable="true">" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/AndroidManifest.xml" |
| line="13" |
| column="82"/> |
| </issue> |
| |
| <issue |
| id="UnsafeDynamicallyLoadedCode" |
| message="Dynamically loading code using `load` is risky, please use `loadLibrary` instead when possible" |
| errorLine1=" System.load(lib.getAbsolutePath());" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/FlutterMain.java" |
| line="164" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="Do not place Android context classes in static fields (static reference to `ResourceUpdater` which has field `context` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" |
| errorLine1=" private static ResourceUpdater sResourceUpdater;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/FlutterMain.java" |
| line="80" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="Do not place Android context classes in static fields (static reference to `ResourceExtractor` which has field `mContext` pointing to `Context`); this is a memory leak (and also breaks Instant Run)" |
| errorLine1=" private static ResourceExtractor sResourceExtractor;" |
| errorLine2=" ~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/FlutterMain.java" |
| line="81" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="This AsyncTask class should be static or leaks might occur (io.flutter.view.ResourceCleaner.CleanTask)" |
| errorLine1=" private class CleanTask extends AsyncTask<Void, Void, Void> {" |
| errorLine2=" ~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceCleaner.java" |
| line="22" |
| column="19"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="This AsyncTask class should be static or leaks might occur (io.flutter.view.ResourceExtractor.ExtractTask)" |
| errorLine1=" private class ExtractTask extends AsyncTask<Void, Void, Void> {" |
| errorLine2=" ~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceExtractor.java" |
| line="48" |
| column="19"/> |
| </issue> |
| |
| <issue |
| id="StaticFieldLeak" |
| message="This AsyncTask class should be static or leaks might occur (io.flutter.view.ResourceUpdater.DownloadTask)" |
| errorLine1=" private class DownloadTask extends AsyncTask<String, String, Void> {" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="92" |
| column="19"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG," |
| errorLine2=" ^"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="1718" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.println(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.println(level, tag, errorMessage + details);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/common/ErrorLogResult.java" |
| line="33" |
| column="9"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Cleaning " + mFilesToDelete.length + " resources.");" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceCleaner.java" |
| line="35" |
| column="13"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Extracted baseline resource " + resource);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceExtractor.java" |
| line="201" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Extracted override resource " + entry.getName());" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceExtractor.java" |
| line="328" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Checking for updates at " + unresolvedURL);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="102" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Resolved update URL " + resolvedURL);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="117" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "HTTP response code " + responseCode);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="120" |
| column="17"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Downloading update " + unresolvedURL);" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="133" |
| column="21"/> |
| </issue> |
| |
| <issue |
| id="LogConditional" |
| message="The log call Log.i(...) should be conditional: surround with `if (Log.isLoggable(...))` or `if (BuildConfig.DEBUG) { ... }`" |
| errorLine1=" Log.i(TAG, "Update downloaded in " + totalMillis / 100 / 10. + "s");" |
| errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/ResourceUpdater.java" |
| line="142" |
| column="25"/> |
| </issue> |
| |
| <issue |
| id="UseSparseArrays" |
| message="Use `new SparseArray<SemanticsNode>(...)` instead for better performance" |
| errorLine1=" private final Map<Integer, SemanticsNode> flutterSemanticsTree = new HashMap<>();" |
| errorLine2=" ~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="135" |
| column="70"/> |
| </issue> |
| |
| <issue |
| id="UseSparseArrays" |
| message="Use `new SparseArray<CustomAccessibilityAction>(...)` instead for better performance" |
| errorLine1=" private final Map<Integer, CustomAccessibilityAction> customAccessibilityActions = new HashMap<>();" |
| errorLine2=" ~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java" |
| line="160" |
| column="88"/> |
| </issue> |
| |
| <issue |
| id="UseSparseArrays" |
| message="Use `new SparseArray<BinaryReply>(...)` instead for better performance" |
| errorLine1=" this.pendingReplies = new HashMap<>();" |
| errorLine2=" ~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/engine/dart/DartMessenger.java" |
| line="43" |
| column="27"/> |
| </issue> |
| |
| <issue |
| id="UseSparseArrays" |
| message="Use `new SparseArray<VirtualDisplayController>(...)` instead for better performance" |
| errorLine1=" vdControllers = new HashMap<>();" |
| errorLine2=" ~~~~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/plugin/platform/PlatformViewsController.java" |
| line="57" |
| column="25"/> |
| </issue> |
| |
| <issue |
| id="ClickableViewAccessibility" |
| message="Custom view `FlutterView` overrides `onTouchEvent` but not `performClick`" |
| errorLine1=" public boolean onTouchEvent(MotionEvent event) {" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/embedding/android/FlutterView.java" |
| line="311" |
| column="18"/> |
| </issue> |
| |
| <issue |
| id="ClickableViewAccessibility" |
| message="Custom view `FlutterView` overrides `onTouchEvent` but not `performClick`" |
| errorLine1=" public boolean onTouchEvent(MotionEvent event) {" |
| errorLine2=" ~~~~~~~~~~~~"> |
| <location |
| file="../../../flutter/shell/platform/android/io/flutter/view/FlutterView.java" |
| line="508" |
| column="20"/> |
| </issue> |
| |
| </issues> |