Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unnecessary null checks #39113

Merged
merged 8 commits into from
Jan 25, 2023
Merged

Remove unnecessary null checks #39113

merged 8 commits into from
Jan 25, 2023

Conversation

goderbauer
Copy link
Member

Part of flutter/flutter#118837.

Dart 3 drops support for non-null safe code, so we can finally turn on the unnecessary_null_comparison lint and remove the unnecessary checks it flags.

@flutter-dashboard flutter-dashboard bot added the platform-web Code specifically for the web engine label Jan 25, 2023
@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption to this rule, contact Hixie on the #hackers channel in Chat (don't just cc him here, he won't see it! He's on Discord!).

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

}
expect(exception != null, equals(true));
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought the original intend of these two tests was that there would be an exception, but rewriting the tests to actually assert that (as shown here) makes the test fail. Needs some more investigation...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interestingly, on the web SDK side these tests are explicitly testing that you can create these with out-of-bounds values:

test('color created with out of bounds value', () {
const Color c = Color(0x100 << 24);
final Paint p = Paint();
p.color = c;
});
test('color created with wildly out of bounds value', () {
const Color c = Color(1 << 1000000);
final Paint p = Paint();
p.color = c;
});

Maybe that is the intend here after all?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since the color constructor is just removing anything above 0xFFFFFFFF I am going to assume that creating a color with out-of-bounds values should be legal and not throw. I'll adjust these tests accordingly.

const Color(int value) : value = value & 0xFFFFFFFF;

@@ -1943,8 +1943,7 @@ class Locale {
const Locale(
this._languageCode, [
this._countryCode,
]) : assert(_languageCode != null),
assert(_languageCode != ''),
]) : assert(_languageCode != ''),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder whether assert(_languageCode != '') or assert(_languageCode.isNotEmpty) is more efficient? My guess is that string equals special cases the zero length check anyway, so probably no real difference and it's a debug-only check anyway.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rmacnak-google Do you happen to know?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I expect a test against length zero to be completely inlined / a bit smaller than a call to the string equality function. Not a big difference: go with whatever is easiest to read.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd go with isNotEmpty from the readability point of view too.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good, since this PR is so giant, I'll send a follow-up PR with that fix. Thanks, @rmacnak-google.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I guess we cannot make that change:

platform_dispatcher.dart:446:16: Error: Not a constant expression.
  ])  : assert(_languageCode.isNotEmpty),
               ^^^^^^^^^^^^^

@@ -443,16 +443,14 @@ class Locale {
const Locale(
this._languageCode, [
this._countryCode,
]) : assert(_languageCode != null),
assert(_languageCode != ''),
]) : assert(_languageCode != ''),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar question to above.

@@ -98,7 +98,7 @@ class _RepositorySourceFile extends _RepositoryLicensedFile {
@override
Iterable<Assignment> assignLicenses() {
_internalLicenses ??= determineLicensesFor(_contents, name, parent, origin: io.fullName);
final List<License> licenses = _internalLicenses!;
final List<License>? licenses = _internalLicenses;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops. That's embarrassing. 🤦‍♂️

@goderbauer goderbauer merged commit 2e7d6fa into flutter:main Jan 25, 2023
@goderbauer goderbauer deleted the fixNull branch January 25, 2023 18:15
goderbauer added a commit to goderbauer/engine that referenced this pull request Jan 25, 2023
@goderbauer goderbauer mentioned this pull request Jan 25, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Jan 25, 2023
auto-submit bot pushed a commit to flutter/flutter that referenced this pull request Jan 25, 2023
sourcegraph-bot pushed a commit to sgtest/megarepo that referenced this pull request Jan 25, 2023
…) (#119174)

Commit: cef9cc717b3a4fc9f164e7dce7bbb85514fe9790
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Jan 26, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 26, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 26, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 26, 2023
auto-submit bot pushed a commit to flutter/packages that referenced this pull request Jan 27, 2023
* a0f7c8c 6f806491e [web] use a render target instead of a new surface for Picture.toImage (flutter/engine#38573) (flutter/flutter#119143)

* e85547b Roll Plugins from 11361d0 to 8bab180 (28 revisions) (flutter/flutter#119115)

* 81052a7 Add usage event to track when a iOS network device is used (flutter/flutter#118915)

* cd34fa6 24aa324b8 Roll Skia from da5034f9d117 to c4b171fe5668 (1 revision) (flutter/engine#39127) (flutter/flutter#119159)

* 6cd4fa4 Add --serve-observatory flag to run, attach, and test (flutter/flutter#118402)

* 48cd95d 1e5efd1 [various] Enable use_build_context_synchronously (flutter/plugins#6585) (flutter/flutter#119162)

* b907acd Add the cupertino system colors mint, cyan, and brown (flutter/flutter#118971)

* c6fa5d9 c54580138 Only build analyze_snapshot on Linux host (flutter/engine#39129) (flutter/flutter#119164)

* f34ce86 7b72038ef Roll Fuchsia Linux SDK from E9m-Gk382PkB7_Nbp... to pGX7tanT1okL8XCg-... (flutter/engine#39130) (flutter/flutter#119169)

* 0dd63d3 Export View (flutter/flutter#117475)

* 1fd71de Remove superfluous words from comments (flutter/flutter#119055)

* cef9cc7 2e7d6fa7b Remove unnecessary null checks (flutter/engine#39113) (flutter/flutter#119174)

* 3be330a 30c02e4c8 [Impeller] Make text glyph offsets respect the current transform (flutter/engine#39119) (flutter/flutter#119179)

* a45727d Add MediaQuery to View (flutter/flutter#118004)

* 02a9c15 Fix lexer issue where select/plural/other/underscores cannot be in identifier names. (flutter/flutter#119190)

* 766e4d2 Remove single-view assumption from material library (flutter/flutter#117486)

* dcd3679 Roll Flutter Engine from 30c02e4c8b01 to 44362c90fcec (2 revisions) (flutter/flutter#119185)

* 9037e3f roll packages (flutter/flutter#119192)

* e0e88da Roll Flutter Engine from 44362c90fcec to 308ce918f67f (2 revisions) (flutter/flutter#119201)

* 202e902 Roll Flutter Engine from 308ce918f67f to 8f1e5dc1b124 (4 revisions) (flutter/flutter#119208)

* b319938 Add more flexible image API (flutter/flutter#118966)

* fc02701 Marks Mac run_debug_test_macos to be unflaky (flutter/flutter#117470)

* c9affdb Move windows-x64-flutter.zip to windows-x64-debug location. (flutter/flutter#119177)
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 27, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 28, 2023
engine-flutter-autoroll added a commit to engine-flutter-autoroll/plugins that referenced this pull request Jan 28, 2023
auto-submit bot pushed a commit to flutter/plugins that referenced this pull request Jan 28, 2023
* a0f7c8c 6f806491e [web] use a render target instead of a new surface for Picture.toImage (flutter/engine#38573) (flutter/flutter#119143)

* e85547b Roll Plugins from 11361d0 to 8bab180 (28 revisions) (flutter/flutter#119115)

* 81052a7 Add usage event to track when a iOS network device is used (flutter/flutter#118915)

* cd34fa6 24aa324b8 Roll Skia from da5034f9d117 to c4b171fe5668 (1 revision) (flutter/engine#39127) (flutter/flutter#119159)

* 6cd4fa4 Add --serve-observatory flag to run, attach, and test (flutter/flutter#118402)

* 48cd95d 1e5efd1 [various] Enable use_build_context_synchronously (#6585) (flutter/flutter#119162)

* b907acd Add the cupertino system colors mint, cyan, and brown (flutter/flutter#118971)

* c6fa5d9 c54580138 Only build analyze_snapshot on Linux host (flutter/engine#39129) (flutter/flutter#119164)

* f34ce86 7b72038ef Roll Fuchsia Linux SDK from E9m-Gk382PkB7_Nbp... to pGX7tanT1okL8XCg-... (flutter/engine#39130) (flutter/flutter#119169)

* 0dd63d3 Export View (flutter/flutter#117475)

* 1fd71de Remove superfluous words from comments (flutter/flutter#119055)

* cef9cc7 2e7d6fa7b Remove unnecessary null checks (flutter/engine#39113) (flutter/flutter#119174)

* 3be330a 30c02e4c8 [Impeller] Make text glyph offsets respect the current transform (flutter/engine#39119) (flutter/flutter#119179)

* a45727d Add MediaQuery to View (flutter/flutter#118004)

* 02a9c15 Fix lexer issue where select/plural/other/underscores cannot be in identifier names. (flutter/flutter#119190)

* 766e4d2 Remove single-view assumption from material library (flutter/flutter#117486)

* dcd3679 Roll Flutter Engine from 30c02e4c8b01 to 44362c90fcec (2 revisions) (flutter/flutter#119185)

* 9037e3f roll packages (flutter/flutter#119192)

* e0e88da Roll Flutter Engine from 44362c90fcec to 308ce918f67f (2 revisions) (flutter/flutter#119201)

* 202e902 Roll Flutter Engine from 308ce918f67f to 8f1e5dc1b124 (4 revisions) (flutter/flutter#119208)

* b319938 Add more flexible image API (flutter/flutter#118966)

* fc02701 Marks Mac run_debug_test_macos to be unflaky (flutter/flutter#117470)

* c9affdb Move windows-x64-flutter.zip to windows-x64-debug location. (flutter/flutter#119177)

* 7d3b762 Fix: Added `margin` parameter for `MaterialBanner` class (flutter/flutter#119005)

* 40bd82e Roll Plugins from 1e5efd1 to e9406bc (4 revisions) (flutter/flutter#119249)

* 07522b7 Roll Flutter Engine from 8f1e5dc1b124 to 04f22beebb42 (5 revisions) (flutter/flutter#119218)

* 459c1b7 Marks Mac complex_layout_scroll_perf_macos__timeline_summary to be unflaky (flutter/flutter#119157)

* 2b8f2d0 Add API for discovering assets (flutter/flutter#118410)

* a04ab71 Revert "Add API for discovering assets (#118410)" (flutter/flutter#119273)

* 1da487d Roll Flutter Engine from 04f22beebb42 to 93901260098e (12 revisions) (flutter/flutter#119279)

* 1b779b6 Roll Flutter Engine from 93901260098e to be0125bd5716 (2 revisions) (flutter/flutter#119283)

* 42bd5f2 Download platform-agnostic Flutter Web SDK in the flutter_tool (flutter/flutter#118654)

* d52b6b9 Roll Flutter Engine from be0125bd5716 to d17004dd96d7 (2 revisions) (flutter/flutter#119287)

* 4aed487 Roll Flutter Engine from d17004dd96d7 to a63d98feb608 (3 revisions) (flutter/flutter#119299)

* 05fc29f Rename DeviceGestureSettings.fromWindow to DeviceGestureSettings.fromView (flutter/flutter#119291)

* 86ab01d Revert "Add --serve-observatory flag to run, attach, and test (#118402)" (flutter/flutter#119302)

* 8d03af3 Roll Flutter Engine from a63d98feb608 to 79c958fc7e9b (3 revisions) (flutter/flutter#119306)

* 27f8ebd ade610ec8 [fuchsia] Migrate to new RealmBuilder API (flutter/engine#39175) (flutter/flutter#119310)

* c31856b Roll Plugins from e9406bc to ff84c44 (2 revisions) (flutter/flutter#119335)

* d939863 Roll Flutter Engine from ade610ec88b5 to 621e13cc9be3 (3 revisions) (flutter/flutter#119344)

* 0b57596 Run "flutter update-packages --force-upgrade" (flutter/flutter#119340)

* 0417f66 Fix nullability of TableRow.children (flutter/flutter#119285)

* fc3e824 Roll Flutter Engine from 621e13cc9be3 to 189a69d9918d (3 revisions) (flutter/flutter#119347)

* ad1a44d Add `requestFocusOnTap` to `DropdownMenu` (flutter/flutter#117504)

* 4dbb573 [flutter_tools] remove usage of remap samplers arg (flutter/flutter#119346)

* b2f2bf3 Marks Linux run_release_test_linux to be unflaky (flutter/flutter#119156)

* 3f95bef Roll Flutter Engine from 189a69d9918d to b32fc7fef208 (3 revisions) (flutter/flutter#119358)

* 2e8bebd Remove single window assumption from macrobenchmark (flutter/flutter#119368)

* ab2232a Roll Flutter Engine from b32fc7fef208 to 8567d96993ed (5 revisions) (flutter/flutter#119369)

* e9ca9cc Remove references to dart:ui's window singelton (flutter/flutter#119296)

* da3d4bd Roll Flutter Engine from 8567d96993ed to 225ae87334a5 (2 revisions) (flutter/flutter#119376)

* 018c1f8 e2e089ebb Use arm64 engine variant on simulators in iOS unit tests (flutter/engine#39213) (flutter/flutter#119387)

* e349bdc 19651cb1d Roll Dart SDK from 2cd9b7ac95e8 to 135f4c51c9ff (3 revisions) (flutter/engine#39214) (flutter/flutter#119389)

* 95345b5 77bee011d Roll Dart SDK from 2cd9b7ac95e8 to 135f4c51c9ff (3 revisions) (flutter/engine#39217) (flutter/flutter#119394)

* de43ec9 Roll Flutter Engine from 77bee011dabf to 3394b84cc5d7 (3 revisions) (flutter/flutter#119405)

* f8d4de4 3dd0fc13f Roll Fuchsia Linux SDK from 6c2H32X3EXOGlWIgb... to TiK_fVODtUaKOgxRf... (flutter/engine#39224) (flutter/flutter#119408)

* 7856411 7c5c6c9c9 Roll Skia from 0b75650caf2a to 7df7a83f733d (13 revisions) (flutter/engine#39225) (flutter/flutter#119413)

* 75680ae 649362168 Roll Dart SDK from f9583e13e214 to 52dc94238144 (1 revision) (flutter/engine#39227) (flutter/flutter#119416)
Maatteogekko pushed a commit to Maatteogekko/packages that referenced this pull request Feb 4, 2023
* a0f7c8c 6f806491e [web] use a render target instead of a new surface for Picture.toImage (flutter/engine#38573) (flutter/flutter#119143)

* e85547b Roll Plugins from 11361d0 to 8bab180 (28 revisions) (flutter/flutter#119115)

* 81052a7 Add usage event to track when a iOS network device is used (flutter/flutter#118915)

* cd34fa6 24aa324b8 Roll Skia from da5034f9d117 to c4b171fe5668 (1 revision) (flutter/engine#39127) (flutter/flutter#119159)

* 6cd4fa4 Add --serve-observatory flag to run, attach, and test (flutter/flutter#118402)

* 48cd95d 1e5efd1 [various] Enable use_build_context_synchronously (flutter/plugins#6585) (flutter/flutter#119162)

* b907acd Add the cupertino system colors mint, cyan, and brown (flutter/flutter#118971)

* c6fa5d9 c54580138 Only build analyze_snapshot on Linux host (flutter/engine#39129) (flutter/flutter#119164)

* f34ce86 7b72038ef Roll Fuchsia Linux SDK from E9m-Gk382PkB7_Nbp... to pGX7tanT1okL8XCg-... (flutter/engine#39130) (flutter/flutter#119169)

* 0dd63d3 Export View (flutter/flutter#117475)

* 1fd71de Remove superfluous words from comments (flutter/flutter#119055)

* cef9cc7 2e7d6fa7b Remove unnecessary null checks (flutter/engine#39113) (flutter/flutter#119174)

* 3be330a 30c02e4c8 [Impeller] Make text glyph offsets respect the current transform (flutter/engine#39119) (flutter/flutter#119179)

* a45727d Add MediaQuery to View (flutter/flutter#118004)

* 02a9c15 Fix lexer issue where select/plural/other/underscores cannot be in identifier names. (flutter/flutter#119190)

* 766e4d2 Remove single-view assumption from material library (flutter/flutter#117486)

* dcd3679 Roll Flutter Engine from 30c02e4c8b01 to 44362c90fcec (2 revisions) (flutter/flutter#119185)

* 9037e3f roll packages (flutter/flutter#119192)

* e0e88da Roll Flutter Engine from 44362c90fcec to 308ce918f67f (2 revisions) (flutter/flutter#119201)

* 202e902 Roll Flutter Engine from 308ce918f67f to 8f1e5dc1b124 (4 revisions) (flutter/flutter#119208)

* b319938 Add more flexible image API (flutter/flutter#118966)

* fc02701 Marks Mac run_debug_test_macos to be unflaky (flutter/flutter#117470)

* c9affdb Move windows-x64-flutter.zip to windows-x64-debug location. (flutter/flutter#119177)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs tests platform-web Code specifically for the web engine
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants