diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart index 18b1d8e2d13..96a9081989b 100644 --- a/pkg/compiler/lib/src/kernel/dart2js_target.dart +++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart @@ -74,6 +74,7 @@ class Dart2jsTarget extends Target { final CompilerOptions? options; final bool canPerformGlobalTransforms; final bool supportsUnevaluatedConstants; + Map? _nativeClasses; Dart2jsTarget(this.name, this.flags, {this.options, @@ -148,16 +149,16 @@ class Dart2jsTarget extends Target { ReferenceFromIndex? referenceFromIndex, {void Function(String msg)? logger, ChangedStructureNotifier? changedStructureNotifier}) { - var nativeClasses = JsInteropChecks.getNativeClasses(component); + _nativeClasses = JsInteropChecks.getNativeClasses(component); + var jsInteropChecks = JsInteropChecks( + coreTypes, + diagnosticReporter as DiagnosticReporter, + _nativeClasses!); var jsUtilOptimizer = JsUtilOptimizer(coreTypes, hierarchy); var staticInteropClassEraser = StaticInteropClassEraser(coreTypes, referenceFromIndex); for (var library in libraries) { - JsInteropChecks( - coreTypes, - diagnosticReporter as DiagnosticReporter, - nativeClasses) - .visitLibrary(library); + jsInteropChecks.visitLibrary(library); // TODO (rileyporter): Merge js_util optimizations with other lowerings // in the single pass in `transformations/lowering.dart`. jsUtilOptimizer.visitLibrary(library); diff --git a/pkg/dart2wasm/lib/target.dart b/pkg/dart2wasm/lib/target.dart index 5363720b116..68f24cbd8d1 100644 --- a/pkg/dart2wasm/lib/target.dart +++ b/pkg/dart2wasm/lib/target.dart @@ -2,6 +2,9 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +import 'package:_fe_analyzer_shared/src/messages/codes.dart' + show Message, LocatedMessage; +import 'package:_js_interop_checks/js_interop_checks.dart'; import 'package:_js_interop_checks/src/js_interop.dart' as jsInteropHelper; import 'package:_js_interop_checks/src/transformations/js_util_wasm_optimizer.dart'; import 'package:_js_interop_checks/src/transformations/static_interop_class_eraser.dart'; @@ -32,6 +35,7 @@ class WasmTarget extends Target { Class? _compactLinkedCustomHashSet; Class? _oneByteString; Class? _twoByteString; + Map? _nativeClasses; @override bool get enableNoSuchMethodForwarders => true; @@ -87,16 +91,24 @@ class WasmTarget extends Target { } void _performJSInteropTransformations( + Component component, CoreTypes coreTypes, ClassHierarchy hierarchy, List interopDependentLibraries, + DiagnosticReporter diagnosticReporter, ReferenceFromIndex? referenceFromIndex) { + _nativeClasses ??= JsInteropChecks.getNativeClasses(component); + final jsInteropChecks = JsInteropChecks( + coreTypes, + diagnosticReporter as DiagnosticReporter, + _nativeClasses!); final jsUtilOptimizer = JsUtilWasmOptimizer(coreTypes, hierarchy); final staticInteropClassEraser = StaticInteropClassEraser( coreTypes, referenceFromIndex, libraryForJavaScriptObject: 'dart:_js_helper', classNameOfJavaScriptObject: 'JSValue'); for (Library library in interopDependentLibraries) { + jsInteropChecks.visitLibrary(library); jsUtilOptimizer.visitLibrary(library); staticInteropClassEraser.visitLibrary(library); } @@ -133,8 +145,8 @@ class WasmTarget extends Target { if (transitiveImportingJSInterop.isEmpty) { logger?.call("Skipped JS interop transformations"); } else { - _performJSInteropTransformations(coreTypes, hierarchy, - transitiveImportingJSInterop, referenceFromIndex); + _performJSInteropTransformations(component, coreTypes, hierarchy, + transitiveImportingJSInterop, diagnosticReporter, referenceFromIndex); logger?.call("Transformed JS interop classes"); } transformMixins.transformLibraries( diff --git a/pkg/dart2wasm/pubspec.yaml b/pkg/dart2wasm/pubspec.yaml index cc153ea0730..2aec8458756 100644 --- a/pkg/dart2wasm/pubspec.yaml +++ b/pkg/dart2wasm/pubspec.yaml @@ -6,6 +6,7 @@ environment: # Use 'any' constraints here; we get our versions from the DEPS file. dependencies: + _fe_analyzer_shared: any _js_interop_checks: any args: any front_end: any diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart index 3d5e68283d1..3b2416f8412 100644 --- a/pkg/dev_compiler/lib/src/kernel/target.dart +++ b/pkg/dev_compiler/lib/src/kernel/target.dart @@ -164,16 +164,16 @@ class DevCompilerTarget extends Target { {void Function(String msg)? logger, ChangedStructureNotifier? changedStructureNotifier}) { _nativeClasses ??= JsInteropChecks.getNativeClasses(component); + var jsInteropChecks = JsInteropChecks( + coreTypes, + diagnosticReporter as DiagnosticReporter, + _nativeClasses!); var jsUtilOptimizer = JsUtilOptimizer(coreTypes, hierarchy); var staticInteropClassEraser = StaticInteropClassEraser(coreTypes, referenceFromIndex); for (var library in libraries) { _CovarianceTransformer(library).transform(); - JsInteropChecks( - coreTypes, - diagnosticReporter as DiagnosticReporter, - _nativeClasses!) - .visitLibrary(library); + jsInteropChecks.visitLibrary(library); jsUtilOptimizer.visitLibrary(library); staticInteropClassEraser.visitLibrary(library); } diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json index f5a8bd1e2b3..4be8a2e795e 100644 --- a/tools/bots/test_matrix.json +++ b/tools/bots/test_matrix.json @@ -3146,7 +3146,8 @@ "-ndart2wasm-hostasserts-linux-x64-d8", "language", "corelib", - "web/wasm" + "web/wasm", + "lib/js/static_interop_test" ], "shards": 3, "fileset": "dart2wasm_hostasserts"