From e36e62e9a642883da06b7b38547a7272f497090a Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 30 Jun 2021 09:46:54 -0700 Subject: [PATCH] Revert "Revert "Audit hashCode overrides outside of packages/flutter (#85370)" (#85451)" (#85567) This reverts commit 2be0d57fa25423ffcba5a07d22ef9386a89dcf4c. --- dev/bots/analyze.dart | 2 +- .../lib/framework/running_processes.dart | 15 +-------------- dev/devicelab/test/adb_test.dart | 17 ++++++++--------- .../lib/src/common.dart | 5 ++--- dev/tools/localization/localizations_utils.dart | 4 +--- dev/tools/vitool/lib/vitool.dart | 6 +++--- packages/flutter/lib/src/material/about.dart | 2 +- .../flutter_driver/lib/src/driver/driver.dart | 2 +- packages/flutter_tools/lib/src/asset.dart | 6 +----- .../flutter_tools/lib/src/base/fingerprint.dart | 5 +---- .../flutter_tools/lib/src/base/version.dart | 2 +- .../flutter_tools/lib/src/doctor_validator.dart | 2 +- .../flutter_tools/lib/src/ios/xcodeproj.dart | 2 +- .../src/localizations/localizations_utils.dart | 4 +--- .../lib/src/reporting/custom_dimensions.dart | 7 +------ .../flutter_tools/lib/src/reporting/usage.dart | 13 +++---------- .../flutter_tools/lib/src/vscode/vscode.dart | 2 +- .../commands.shard/hermetic/clean_test.dart | 2 +- 18 files changed, 30 insertions(+), 68 deletions(-) diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index 35865ea908..dc98d756ab 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -610,7 +610,7 @@ class Hash256 { } @override - int get hashCode => a ^ b ^ c ^ d; + int get hashCode => Object.hash(a, b, c, d); } // DO NOT ADD ANY ENTRIES TO THIS LIST. diff --git a/dev/devicelab/lib/framework/running_processes.dart b/dev/devicelab/lib/framework/running_processes.dart index a96254f594..b07f1c17dd 100644 --- a/dev/devicelab/lib/framework/running_processes.dart +++ b/dev/devicelab/lib/framework/running_processes.dart @@ -28,20 +28,7 @@ class RunningProcessInfo { } @override - int get hashCode { - // TODO(dnfield): Replace this when Object.hashValues lands, https://github.com/dart-lang/sdk/issues/11617 - int hash = 17; - if (pid != null) { - hash = hash * 23 + pid.hashCode; - } - if (commandLine != null) { - hash = hash * 23 + commandLine.hashCode; - } - if (creationDate != null) { - hash = hash * 23 + creationDate.hashCode; - } - return hash; - } + int get hashCode => Object.hash(pid, commandLine, creationDate); @override String toString() { diff --git a/dev/devicelab/test/adb_test.dart b/dev/devicelab/test/adb_test.dart index 018ce409ef..bd9cb6a440 100644 --- a/dev/devicelab/test/adb_test.dart +++ b/dev/devicelab/test/adb_test.dart @@ -166,15 +166,14 @@ class CommandArgs { } @override - int get hashCode => 17 * (17 * command.hashCode + _hashArguments) + _hashEnvironment; - - int get _hashArguments => arguments != null - ? const ListEquality().hash(arguments) - : null.hashCode; - - int get _hashEnvironment => environment != null - ? const MapEquality().hash(environment) - : null.hashCode; + int get hashCode { + return Object.hash( + command, + Object.hashAll(arguments ?? const []), + Object.hashAllUnordered(environment?.keys ?? const []), + Object.hashAllUnordered(environment?.values ?? const []), + ); + } } class FakeDevice extends AndroidDevice { diff --git a/dev/integration_tests/android_semantics_testing/lib/src/common.dart b/dev/integration_tests/android_semantics_testing/lib/src/common.dart index 8879850835..b01c2fc8e5 100644 --- a/dev/integration_tests/android_semantics_testing/lib/src/common.dart +++ b/dev/integration_tests/android_semantics_testing/lib/src/common.dart @@ -183,8 +183,7 @@ class Rect { final double bottom; @override - int get hashCode => - top.hashCode ^ left.hashCode ^ right.hashCode ^ bottom.hashCode; + int get hashCode => Object.hash(top, left, right, bottom); @override bool operator ==(Object other) { @@ -216,7 +215,7 @@ class Size { final double height; @override - int get hashCode => width.hashCode ^ height.hashCode; + int get hashCode => Object.hash(width, height); @override bool operator ==(Object other) { diff --git a/dev/tools/localization/localizations_utils.dart b/dev/tools/localization/localizations_utils.dart index 12097498c9..e3373dce2c 100644 --- a/dev/tools/localization/localizations_utils.dart +++ b/dev/tools/localization/localizations_utils.dart @@ -128,9 +128,7 @@ class LocaleInfo implements Comparable { } @override - int get hashCode { - return originalString.hashCode; - } + int get hashCode => originalString.hashCode; @override String toString() { diff --git a/dev/tools/vitool/lib/vitool.dart b/dev/tools/vitool/lib/vitool.dart index 0f0f4bc2c6..e60bb71dbb 100644 --- a/dev/tools/vitool/lib/vitool.dart +++ b/dev/tools/vitool/lib/vitool.dart @@ -274,7 +274,7 @@ class FrameData { } @override - int get hashCode => size.hashCode ^ paths.hashCode; + int get hashCode => Object.hash(size, Object.hashAll(paths)); @override String toString() { @@ -328,7 +328,7 @@ class SvgPath { } @override - int get hashCode => id.hashCode ^ commands.hashCode ^ opacity.hashCode; + int get hashCode => Object.hash(id, Object.hashAll(commands), opacity); @override String toString() { @@ -377,7 +377,7 @@ class SvgPathCommand { } @override - int get hashCode => type.hashCode ^ points.hashCode; + int get hashCode => Object.hash(type, Object.hashAll(points)); @override String toString() { diff --git a/packages/flutter/lib/src/material/about.dart b/packages/flutter/lib/src/material/about.dart index f8cbcba0c2..3129e97ebd 100644 --- a/packages/flutter/lib/src/material/about.dart +++ b/packages/flutter/lib/src/material/about.dart @@ -798,7 +798,7 @@ class _DetailArguments { } @override - int get hashCode => packageName.hashCode; // Good enough. + int get hashCode => hashValues(packageName, hashList(licenseEntries)); } class _PackageLicensePage extends StatefulWidget { diff --git a/packages/flutter_driver/lib/src/driver/driver.dart b/packages/flutter_driver/lib/src/driver/driver.dart index 95763da162..197352068c 100644 --- a/packages/flutter_driver/lib/src/driver/driver.dart +++ b/packages/flutter_driver/lib/src/driver/driver.dart @@ -814,5 +814,5 @@ class DriverOffset { } @override - int get hashCode => dx.hashCode ^ dy.hashCode; + int get hashCode => Object.hash(dx, dy); } diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index 4d88be9703..09717f7c1d 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -911,11 +911,7 @@ class _Asset { } @override - int get hashCode { - return baseDir.hashCode - ^ relativeUri.hashCode - ^ entryUri.hashCode; - } + int get hashCode => Object.hash(baseDir, relativeUri, entryUri.hashCode); } // Given an assets directory like this: diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart index ad8a8da046..194f857ea1 100644 --- a/packages/flutter_tools/lib/src/base/fingerprint.dart +++ b/packages/flutter_tools/lib/src/base/fingerprint.dart @@ -128,10 +128,7 @@ class Fingerprint { } @override - // Ignore map entries here to avoid becoming inconsistent with equals - // due to differences in map entry order. This is a really bad hash - // function and should eventually be deprecated and removed. - int get hashCode => _checksums.length.hashCode; + int get hashCode => Object.hash(Object.hashAllUnordered(_checksums.keys), Object.hashAllUnordered(_checksums.values)); @override String toString() => '{checksums: $_checksums}'; diff --git a/packages/flutter_tools/lib/src/base/version.dart b/packages/flutter_tools/lib/src/base/version.dart index 4192f26175..89895995f7 100644 --- a/packages/flutter_tools/lib/src/base/version.dart +++ b/packages/flutter_tools/lib/src/base/version.dart @@ -98,7 +98,7 @@ class Version implements Comparable { } @override - int get hashCode => major ^ minor ^ patch; + int get hashCode => Object.hash(major, minor, patch); bool operator <(Version other) => compareTo(other) < 0; bool operator >(Version other) => compareTo(other) > 0; diff --git a/packages/flutter_tools/lib/src/doctor_validator.dart b/packages/flutter_tools/lib/src/doctor_validator.dart index d5488c00c0..f8ddc250d0 100644 --- a/packages/flutter_tools/lib/src/doctor_validator.dart +++ b/packages/flutter_tools/lib/src/doctor_validator.dart @@ -278,7 +278,7 @@ class ValidationMessage { } @override - int get hashCode => type.hashCode ^ message.hashCode ^ contextUrl.hashCode; + int get hashCode => Object.hash(type, message, contextUrl); } class NoIdeValidator extends DoctorValidator { diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 78b2cc0037..5e48bf93d0 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart @@ -302,7 +302,7 @@ class XcodeProjectBuildContext { final EnvironmentType environmentType; @override - int get hashCode => scheme.hashCode ^ configuration.hashCode ^ environmentType.hashCode; + int get hashCode => Object.hash(scheme, configuration, environmentType); @override bool operator ==(Object other) { diff --git a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart index 04fcca4267..fd435e74fe 100644 --- a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart +++ b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart @@ -129,9 +129,7 @@ class LocaleInfo implements Comparable { } @override - int get hashCode { - return originalString.hashCode; - } + int get hashCode => originalString.hashCode; @override String toString() { diff --git a/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart b/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart index f710eb64d4..6fbd116f27 100644 --- a/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart +++ b/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart @@ -326,12 +326,7 @@ class CustomDimensions { } @override - int get hashCode => - toMap() - .values - .where((String element) => element != null) - .fold(Object().hashCode, - (int value, String element) => value ^ element.hashCode); + int get hashCode => Object.hashAll(toMap().values); } /// List of all fields used in CustomDimensions. diff --git a/packages/flutter_tools/lib/src/reporting/usage.dart b/packages/flutter_tools/lib/src/reporting/usage.dart index d822c7daa0..303ca501f8 100644 --- a/packages/flutter_tools/lib/src/reporting/usage.dart +++ b/packages/flutter_tools/lib/src/reporting/usage.dart @@ -486,7 +486,7 @@ class TestUsageCommand { } @override - int get hashCode => command.hashCode ^ parameters.hashCode; + int get hashCode => Object.hash(command, parameters); @override String toString() => 'TestUsageCommand($command, parameters:$parameters)'; @@ -514,11 +514,7 @@ class TestUsageEvent { } @override - int get hashCode => category.hashCode ^ - parameter.hashCode ^ - label.hashCode ^ - value.hashCode ^ - parameters.hashCode; + int get hashCode => Object.hash(category, parameter, label, value, parameters); @override String toString() => 'TestUsageEvent($category, $parameter, label:$label, value:$value, parameters:$parameters)'; @@ -544,10 +540,7 @@ class TestTimingEvent { } @override - int get hashCode => category.hashCode ^ - variableName.hashCode ^ - duration.hashCode ^ - label.hashCode; + int get hashCode => Object.hash(category, variableName, duration, label); @override String toString() => 'TestTimingEvent($category, $variableName, $duration, label:$label)'; diff --git a/packages/flutter_tools/lib/src/vscode/vscode.dart b/packages/flutter_tools/lib/src/vscode/vscode.dart index 1a48053adc..85537222e0 100644 --- a/packages/flutter_tools/lib/src/vscode/vscode.dart +++ b/packages/flutter_tools/lib/src/vscode/vscode.dart @@ -326,5 +326,5 @@ class VsCodeInstallLocation { @override // Lowest bit is for isInsiders boolean. - int get hashCode => installPath.hashCode ^ extensionsFolder.hashCode ^ edition.hashCode; + int get hashCode => Object.hash(installPath, extensionsFolder, edition); } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart index 65f413cd2b..aab2b42bf9 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart @@ -219,7 +219,7 @@ class CleanWorkspaceCall { verbose == other.verbose; @override - int get hashCode => workspacePath.hashCode; + int get hashCode => Object.hash(workspacePath, scheme, verbose); @override String toString() => '{$workspacePath, $scheme, $verbose}';