diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart index dc98d756ab..35865ea908 100644 --- a/dev/bots/analyze.dart +++ b/dev/bots/analyze.dart @@ -610,7 +610,7 @@ class Hash256 { } @override - int get hashCode => Object.hash(a, b, c, d); + int get hashCode => 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 b07f1c17dd..a96254f594 100644 --- a/dev/devicelab/lib/framework/running_processes.dart +++ b/dev/devicelab/lib/framework/running_processes.dart @@ -28,7 +28,20 @@ class RunningProcessInfo { } @override - int get hashCode => Object.hash(pid, commandLine, creationDate); + 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; + } @override String toString() { diff --git a/dev/devicelab/test/adb_test.dart b/dev/devicelab/test/adb_test.dart index bd9cb6a440..018ce409ef 100644 --- a/dev/devicelab/test/adb_test.dart +++ b/dev/devicelab/test/adb_test.dart @@ -166,14 +166,15 @@ class CommandArgs { } @override - int get hashCode { - return Object.hash( - command, - Object.hashAll(arguments ?? const []), - Object.hashAllUnordered(environment?.keys ?? const []), - Object.hashAllUnordered(environment?.values ?? const []), - ); - } + 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; } 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 b01c2fc8e5..8879850835 100644 --- a/dev/integration_tests/android_semantics_testing/lib/src/common.dart +++ b/dev/integration_tests/android_semantics_testing/lib/src/common.dart @@ -183,7 +183,8 @@ class Rect { final double bottom; @override - int get hashCode => Object.hash(top, left, right, bottom); + int get hashCode => + top.hashCode ^ left.hashCode ^ right.hashCode ^ bottom.hashCode; @override bool operator ==(Object other) { @@ -215,7 +216,7 @@ class Size { final double height; @override - int get hashCode => Object.hash(width, height); + int get hashCode => width.hashCode ^ height.hashCode; @override bool operator ==(Object other) { diff --git a/dev/tools/localization/localizations_utils.dart b/dev/tools/localization/localizations_utils.dart index e3373dce2c..12097498c9 100644 --- a/dev/tools/localization/localizations_utils.dart +++ b/dev/tools/localization/localizations_utils.dart @@ -128,7 +128,9 @@ class LocaleInfo implements Comparable { } @override - int get hashCode => originalString.hashCode; + int get hashCode { + return originalString.hashCode; + } @override String toString() { diff --git a/dev/tools/vitool/lib/vitool.dart b/dev/tools/vitool/lib/vitool.dart index e60bb71dbb..0f0f4bc2c6 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 => Object.hash(size, Object.hashAll(paths)); + int get hashCode => size.hashCode ^ paths.hashCode; @override String toString() { @@ -328,7 +328,7 @@ class SvgPath { } @override - int get hashCode => Object.hash(id, Object.hashAll(commands), opacity); + int get hashCode => id.hashCode ^ commands.hashCode ^ opacity.hashCode; @override String toString() { @@ -377,7 +377,7 @@ class SvgPathCommand { } @override - int get hashCode => Object.hash(type, Object.hashAll(points)); + int get hashCode => type.hashCode ^ points.hashCode; @override String toString() { diff --git a/packages/flutter/lib/src/material/about.dart b/packages/flutter/lib/src/material/about.dart index 3129e97ebd..f8cbcba0c2 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 => hashValues(packageName, hashList(licenseEntries)); + int get hashCode => packageName.hashCode; // Good enough. } 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 197352068c..95763da162 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 => Object.hash(dx, dy); + int get hashCode => dx.hashCode ^ dy.hashCode; } diff --git a/packages/flutter_tools/lib/src/asset.dart b/packages/flutter_tools/lib/src/asset.dart index 09717f7c1d..4d88be9703 100644 --- a/packages/flutter_tools/lib/src/asset.dart +++ b/packages/flutter_tools/lib/src/asset.dart @@ -911,7 +911,11 @@ class _Asset { } @override - int get hashCode => Object.hash(baseDir, relativeUri, entryUri.hashCode); + int get hashCode { + return baseDir.hashCode + ^ relativeUri.hashCode + ^ 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 194f857ea1..ad8a8da046 100644 --- a/packages/flutter_tools/lib/src/base/fingerprint.dart +++ b/packages/flutter_tools/lib/src/base/fingerprint.dart @@ -128,7 +128,10 @@ class Fingerprint { } @override - int get hashCode => Object.hash(Object.hashAllUnordered(_checksums.keys), Object.hashAllUnordered(_checksums.values)); + // 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; @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 89895995f7..4192f26175 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 => Object.hash(major, minor, patch); + int get hashCode => 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 f8ddc250d0..d5488c00c0 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 => Object.hash(type, message, contextUrl); + int get hashCode => type.hashCode ^ message.hashCode ^ contextUrl.hashCode; } 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 5e48bf93d0..78b2cc0037 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 => Object.hash(scheme, configuration, environmentType); + int get hashCode => scheme.hashCode ^ configuration.hashCode ^ environmentType.hashCode; @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 fd435e74fe..04fcca4267 100644 --- a/packages/flutter_tools/lib/src/localizations/localizations_utils.dart +++ b/packages/flutter_tools/lib/src/localizations/localizations_utils.dart @@ -129,7 +129,9 @@ class LocaleInfo implements Comparable { } @override - int get hashCode => originalString.hashCode; + int get hashCode { + return 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 6fbd116f27..f710eb64d4 100644 --- a/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart +++ b/packages/flutter_tools/lib/src/reporting/custom_dimensions.dart @@ -326,7 +326,12 @@ class CustomDimensions { } @override - int get hashCode => Object.hashAll(toMap().values); + int get hashCode => + toMap() + .values + .where((String element) => element != null) + .fold(Object().hashCode, + (int value, String element) => value ^ element.hashCode); } /// 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 303ca501f8..d822c7daa0 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 => Object.hash(command, parameters); + int get hashCode => command.hashCode ^ parameters.hashCode; @override String toString() => 'TestUsageCommand($command, parameters:$parameters)'; @@ -514,7 +514,11 @@ class TestUsageEvent { } @override - int get hashCode => Object.hash(category, parameter, label, value, parameters); + int get hashCode => category.hashCode ^ + parameter.hashCode ^ + label.hashCode ^ + value.hashCode ^ + parameters.hashCode; @override String toString() => 'TestUsageEvent($category, $parameter, label:$label, value:$value, parameters:$parameters)'; @@ -540,7 +544,10 @@ class TestTimingEvent { } @override - int get hashCode => Object.hash(category, variableName, duration, label); + int get hashCode => category.hashCode ^ + variableName.hashCode ^ + duration.hashCode ^ + label.hashCode; @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 85537222e0..1a48053adc 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 => Object.hash(installPath, extensionsFolder, edition); + int get hashCode => installPath.hashCode ^ extensionsFolder.hashCode ^ edition.hashCode; } 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 aab2b42bf9..65f413cd2b 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 => Object.hash(workspacePath, scheme, verbose); + int get hashCode => workspacePath.hashCode; @override String toString() => '{$workspacePath, $scheme, $verbose}';