diff --git a/pkg/_js_interop_checks/lib/js_interop_checks.dart b/pkg/_js_interop_checks/lib/js_interop_checks.dart index 566f330d202..952ae621406 100644 --- a/pkg/_js_interop_checks/lib/js_interop_checks.dart +++ b/pkg/_js_interop_checks/lib/js_interop_checks.dart @@ -379,7 +379,7 @@ class JsInteropChecks extends RecursiveVisitor { (hasDartJSInteropAnnotation(node) || _libraryHasDartJSInteropAnnotation)) { _checkNoParamInitializersForStaticInterop(node.function); - late Annotatable? annotatable; + final Annotatable? annotatable; if (node.isExtensionTypeMember) { annotatable = extensionIndex.getExtensionType(node); } else if (node.isExtensionMember) { @@ -683,7 +683,7 @@ class JsInteropChecks extends RecursiveVisitor { // TODO(srujzs): Delete the check for patched member once // https://github.com/dart-lang/sdk/issues/53367 is resolved. if (member.isExternal && !JsInteropChecks.isPatchedMember(member)) { - var memberKind = ''; + final String memberKind; var memberName = ''; if (member.isExtensionTypeMember) { // Extension type interop members can not be torn off. @@ -946,7 +946,7 @@ class JsInteropChecks extends RecursiveVisitor { } else if (type is ExtensionType) { // Extension types that wrap other allowed types are also okay. Interop // extension types are handled above, so this is essentially for extension - // types on primtives. + // types on primitives. return _isAllowedExternalType(type.extensionTypeErasure); } return false; diff --git a/pkg/_js_interop_checks/lib/src/transformations/export_checker.dart b/pkg/_js_interop_checks/lib/src/transformations/export_checker.dart index da63572a949..5dde4eb0926 100644 --- a/pkg/_js_interop_checks/lib/src/transformations/export_checker.dart +++ b/pkg/_js_interop_checks/lib/src/transformations/export_checker.dart @@ -21,13 +21,6 @@ enum ExportStatus { nonExportable, } -class GetSet { - Member? getter; - Member? setter; - - GetSet(this.getter, this.setter); -} - class ExportChecker { final JsInteropDiagnosticReporter _diagnosticReporter; final Map>> exportClassToMemberMap = {}; @@ -45,7 +38,7 @@ class ExportChecker { /// /// [exports] should be a set of members from the [exportClassToMemberMap]. If /// missing a getter and/or setter, the corresponding field will be `null`. - GetSet getGetterSetter(Set exports) { + ({Member? getter, Member? setter}) getGetterSetter(Set exports) { assert(exports.isNotEmpty && exports.length <= 2); Member? getter; Member? setter; @@ -71,7 +64,7 @@ class ExportChecker { } } - return GetSet(getter, setter); + return (getter: getter, setter: setter); } /// Calculates the overrides, including inheritance, for [cls]. @@ -84,7 +77,7 @@ class ExportChecker { var superclass = cls.superclass; if (superclass != null && superclass != _objectClass) { _collectOverrides(superclass); - memberMap = Map.from(_overrideMap[superclass.reference]!); + memberMap = Map.of(_overrideMap[superclass.reference]!); } else { memberMap = {}; } @@ -156,8 +149,8 @@ class ExportChecker { // Walk through the export map and determine if there are any unresolvable // conflicts. - for (var exportName in exports.keys) { - var existingMembers = exports[exportName]!; + for (var MapEntry(key: exportName, value: existingMembers) + in exports.entries) { if (existingMembers.length == 1) continue; if (existingMembers.length == 2) { // There are two instances where you can resolve collisions: diff --git a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart index b4efe8246c0..c8cd9e8ea7c 100644 --- a/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart +++ b/pkg/_js_interop_checks/lib/src/transformations/js_util_optimizer.dart @@ -66,7 +66,7 @@ class JsUtilOptimizer extends Transformer { final CoreTypes _coreTypes; final StatefulStaticTypeContext _staticTypeContext; - late final ExtensionIndex _extensionIndex; + final ExtensionIndex _extensionIndex; JsUtilOptimizer( this._coreTypes, ClassHierarchy hierarchy, this._extensionIndex) @@ -112,7 +112,7 @@ class JsUtilOptimizer extends Transformer { TypeEnvironment(_coreTypes, hierarchy)); @override - visitLibrary(Library node) { + TreeNode visitLibrary(Library node) { _staticTypeContext.enterLibrary(node); node.transformChildren(this); _staticTypeContext.leaveLibrary(node); @@ -120,7 +120,7 @@ class JsUtilOptimizer extends Transformer { } @override - defaultMember(Member node) { + TreeNode defaultMember(Member node) { _staticTypeContext.enterMember(node); node.transformChildren(this); _staticTypeContext.leaveMember(node); @@ -382,19 +382,13 @@ class JsUtilOptimizer extends Transformer { // TODO(srujzs): Support more operators for overloading using some // combination of Dart-defineable operators and @JS renaming for the ones // that are not renameable. - late Procedure target; - switch (operator) { - case '[]': - target = - shouldTrustType ? _getPropertyTrustTypeTarget : _getPropertyTarget; - break; - case '[]=': - target = _setPropertyTarget; - break; - default: - throw UnimplementedError( - 'External operator $operator is unsupported for static interop. '); - } + final target = switch (operator) { + '[]' => + shouldTrustType ? _getPropertyTrustTypeTarget : _getPropertyTarget, + '[]=' => _setPropertyTarget, + _ => throw UnimplementedError( + 'External operator $operator is unsupported for static interop. ') + }; return (Arguments arguments, Expression invocation) { return StaticInvocation( diff --git a/pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart b/pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart index 62b19300177..83e329aae7f 100644 --- a/pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart +++ b/pkg/_js_interop_checks/lib/src/transformations/shared_interop_transformer.dart @@ -276,8 +276,7 @@ class SharedInteropTransformer extends Transformer { ..fileOffset = invocation.fileOffset; block.add(jsExporter); - for (var exportName in exportMap.keys) { - var exports = exportMap[exportName]!; + for (var MapEntry(key: exportName, value: exports) in exportMap.entries) { ExpressionStatement setProperty( VariableGet jsObject, String propertyName, StaticInvocation jsValue) { // `jsObject[propertyName] = jsValue` @@ -338,9 +337,7 @@ class SharedInteropTransformer extends Transformer { isSynthesized: true) ..fileOffset = invocation.fileOffset; block.add(getSetMap); - var getSet = _exportChecker.getGetterSetter(exports); - var getter = getSet.getter; - var setter = getSet.setter; + var (:getter, :setter) = _exportChecker.getGetterSetter(exports); if (getter != null) { final resultType = _staticInteropMockValidator.typeParameterResolver .resolve(getter.getterType); diff --git a/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart b/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart index 187a4e409a1..1fc04f125b8 100644 --- a/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart +++ b/pkg/_js_interop_checks/lib/src/transformations/static_interop_class_eraser.dart @@ -47,7 +47,7 @@ class StaticInteropClassEraser extends Transformer { // Visiting core libraries that don't contain `@staticInterop` adds overhead. // To avoid this, we use an allowlist that contains libraries that we know use // `@staticInterop`. - late final Set _erasableCoreLibraries = { + final Set _erasableCoreLibraries = { 'js_interop_unsafe', 'ui', 'ui_web', diff --git a/pkg/_js_interop_checks/lib/src/transformations/static_interop_mock_validator.dart b/pkg/_js_interop_checks/lib/src/transformations/static_interop_mock_validator.dart index cb003d4c9d5..9410682f77d 100644 --- a/pkg/_js_interop_checks/lib/src/transformations/static_interop_mock_validator.dart +++ b/pkg/_js_interop_checks/lib/src/transformations/static_interop_mock_validator.dart @@ -104,9 +104,8 @@ class StaticInteropMockValidator { _computeImplementableExtensionMembers(staticInteropClass); var exportMap = _exportChecker.exportClassToMemberMap[dartClass.reference]!; - for (var exportName in exportNameToDescriptors.keys) { - var descriptors = exportNameToDescriptors[exportName]!; - + for (var MapEntry(key: exportName, value: descriptors) + in exportNameToDescriptors.entries) { String getAsErrorString(Iterable descriptors) { var withExtensionNameAndType = descriptors.map((descriptor) { var extension = _descriptorToExtensionName[descriptor]!; @@ -139,7 +138,7 @@ class StaticInteropMockValidator { hasImplementation = descriptors .any((descriptor) => _implements(firstMember, descriptor)); } else { - var getSet = _exportChecker.getGetterSetter(dartMembers); + var (:getter, :setter) = _exportChecker.getGetterSetter(dartMembers); var getters = {}; var setters = {}; @@ -148,10 +147,10 @@ class StaticInteropMockValidator { var implementsSetter = false; for (var descriptor in descriptors) { if (descriptor.isGetter) { - implementsGetter |= _implements(getSet.getter, descriptor); + implementsGetter |= _implements(getter, descriptor); getters.add(descriptor); } else if (descriptor.isSetter) { - implementsSetter |= _implements(getSet.setter, descriptor); + implementsSetter |= _implements(setter, descriptor); setters.add(descriptor); } } @@ -288,8 +287,8 @@ class StaticInteropMockValidator { // Process the stored libraries, and create a mapping between @staticInterop // classes and their extensions. var staticInteropClassesWithExtensions = >{}; - for (var library in ExportChecker.libraryExtensionMap.keys) { - for (var extension in ExportChecker.libraryExtensionMap[library]!) { + for (var extensions in ExportChecker.libraryExtensionMap.values) { + for (var extension in extensions) { var onType = extension.onType as InterfaceType; staticInteropClassesWithExtensions .putIfAbsent(onType.classReference, () => {}) diff --git a/pkg/_js_interop_checks/pubspec.yaml b/pkg/_js_interop_checks/pubspec.yaml index fcb1de53407..eac39bef8fe 100644 --- a/pkg/_js_interop_checks/pubspec.yaml +++ b/pkg/_js_interop_checks/pubspec.yaml @@ -3,7 +3,7 @@ name: _js_interop_checks publish_to: none environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ^3.0.0 # Use 'any' constraints here; we get our versions from the DEPS file. dependencies: