mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 12:57:42 +00:00
[js_interop_checks] Update SDK constraint to support Dart 3
The package already uses 3.0 features after 3b294fdab2
, but the usage wasn't caught due to https://github.com/dart-lang/sdk/issues/54764.
Since all packages that depend on this all require Dart 3 or greater now, we can increase the constraint and start to take advantage of its features. Also avoids a few checks and lookups :)
Change-Id: Iba539b86dc2f0117406b96e60ed8e92ea9ecf220
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/349161
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Srujan Gaddam <srujzs@google.com>
This commit is contained in:
parent
853ace7778
commit
4725b282f9
|
@ -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;
|
||||
|
|
|
@ -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<Reference, Map<String, Set<Member>>> 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<Member> exports) {
|
||||
({Member? getter, Member? setter}) getGetterSetter(Set<Member> 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:
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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<String> _erasableCoreLibraries = {
|
||||
final Set<String> _erasableCoreLibraries = {
|
||||
'js_interop_unsafe',
|
||||
'ui',
|
||||
'ui_web',
|
||||
|
|
|
@ -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<ExtensionMemberDescriptor> 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 = <ExtensionMemberDescriptor>{};
|
||||
var setters = <ExtensionMemberDescriptor>{};
|
||||
|
@ -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 = <Reference, Set<Extension>>{};
|
||||
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, () => {})
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue