2
2
// for details. All rights reserved. Use of this source code is governed by a
3
3
// BSD-style license that can be found in the LICENSE file.
4
4
5
- // @dart = 2.10
6
-
7
5
library js_backend.interceptor_data;
8
6
9
7
import '../common/elements.dart'
@@ -16,8 +14,9 @@ import '../js/js.dart' as jsAst;
16
14
import '../serialization/serialization.dart' ;
17
15
import '../universe/class_set.dart' ;
18
16
import '../universe/selector.dart' ;
19
- import '../world.dart' show JClosedWorld;
20
- import 'namer.dart' show ModularNamer, suffixForGetInterceptor;
17
+ import '../world_interfaces.dart' show JClosedWorld;
18
+ import 'namer_interfaces.dart' show ModularNamer;
19
+ import 'namer_migrated.dart' show suffixForGetInterceptor;
21
20
import 'native_data.dart' ;
22
21
23
22
abstract class InterceptorData {
@@ -175,18 +174,13 @@ class InterceptorDataImpl implements InterceptorData {
175
174
176
175
@override
177
176
bool isInterceptedMixinSelector (
178
- Selector selector, AbstractValue mask, JClosedWorld closedWorld) {
179
- Set <MemberEntity > elements =
180
- _interceptedMixinElements.putIfAbsent (selector.name, () {
181
- Set <MemberEntity > elements = interceptedMembers[selector.name];
182
- if (elements == null ) return null ;
183
- return elements
184
- .where ((element) => classesMixedIntoInterceptedClasses
185
- .contains (element.enclosingClass))
186
- .toSet ();
187
- });
188
-
189
- if (elements == null ) return false ;
177
+ Selector selector, AbstractValue ? mask, JClosedWorld closedWorld) {
178
+ Set <MemberEntity > elements = _interceptedMixinElements[selector.name] ?? =
179
+ (interceptedMembers[selector.name]
180
+ ? .where ((element) => classesMixedIntoInterceptedClasses
181
+ .contains (element.enclosingClass))
182
+ .toSet () ??
183
+ const {});
190
184
if (elements.isEmpty) return false ;
191
185
return elements.any ((element) {
192
186
return selector.applies (element) &&
@@ -215,21 +209,21 @@ class InterceptorDataImpl implements InterceptorData {
215
209
@override
216
210
Set <ClassEntity > getInterceptedClassesOn (
217
211
String name, JClosedWorld closedWorld) {
218
- Set < MemberEntity > intercepted = interceptedMembers[name];
212
+ final intercepted = interceptedMembers[name];
219
213
if (intercepted == null ) return _noClasses;
220
214
return _interceptedClassesCache.putIfAbsent (name, () {
221
215
// Populate the cache by running through all the elements and
222
216
// determine if the given selector applies to them.
223
217
Set <ClassEntity > result = {};
224
218
for (MemberEntity element in intercepted) {
225
- ClassEntity classElement = element.enclosingClass;
219
+ final classElement = element.enclosingClass! ;
226
220
if (_isCompileTimeOnlyClass (classElement)) continue ;
227
221
if (_nativeData.isNativeOrExtendsNative (classElement) ||
228
222
interceptedClasses.contains (classElement)) {
229
223
result.add (classElement);
230
224
}
231
225
if (classesMixedIntoInterceptedClasses.contains (classElement)) {
232
- Set < ClassEntity > nativeSubclasses =
226
+ final nativeSubclasses =
233
227
nativeSubclassesOfMixin (classElement, closedWorld);
234
228
if (nativeSubclasses != null ) result.addAll (nativeSubclasses);
235
229
}
@@ -238,16 +232,15 @@ class InterceptorDataImpl implements InterceptorData {
238
232
});
239
233
}
240
234
241
- Set <ClassEntity > nativeSubclassesOfMixin (
235
+ Set <ClassEntity >? nativeSubclassesOfMixin (
242
236
ClassEntity mixin , JClosedWorld closedWorld) {
243
237
Iterable <ClassEntity > uses = closedWorld.mixinUsesOf (mixin );
244
- Set <ClassEntity > result = null ;
238
+ Set <ClassEntity >? result;
245
239
for (ClassEntity use in uses) {
246
240
closedWorld.classHierarchy.forEachStrictSubclassOf (use,
247
241
(ClassEntity subclass) {
248
242
if (_nativeData.isNativeOrExtendsNative (subclass)) {
249
- if (result == null ) result = {};
250
- result.add (subclass);
243
+ (result ?? = {}).add (subclass);
251
244
}
252
245
return IterationStep .CONTINUE ;
253
246
});
@@ -256,7 +249,7 @@ class InterceptorDataImpl implements InterceptorData {
256
249
}
257
250
258
251
@override
259
- bool isInterceptedClass (ClassEntity element) {
252
+ bool isInterceptedClass (ClassEntity ? element) {
260
253
if (element == null ) return false ;
261
254
if (_nativeData.isNativeOrExtendsNative (element)) return true ;
262
255
if (interceptedClasses.contains (element)) return true ;
@@ -275,7 +268,7 @@ class InterceptorDataImpl implements InterceptorData {
275
268
276
269
if (! closedWorld.dartTypes.treatAsRawType (type)) return false ;
277
270
if (type is FutureOrType ) return false ;
278
- InterfaceType interfaceType = type;
271
+ final interfaceType = type as InterfaceType ;
279
272
ClassEntity classElement = interfaceType.element;
280
273
if (isInterceptedClass (classElement)) return false ;
281
274
return closedWorld.classHierarchy.hasOnlySubclasses (classElement);
@@ -320,7 +313,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder {
320
313
if (member.name == Identifiers .call) return ;
321
314
// All methods on [Object] are shadowed by [Interceptor].
322
315
if (cls == _commonElements.objectClass) return ;
323
- Set < MemberEntity > set = _interceptedElements[member.name] ?? = {};
316
+ final set = _interceptedElements[member.name! ] ?? = {};
324
317
set .add (member);
325
318
});
326
319
@@ -337,7 +330,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder {
337
330
(ClassEntity cls, MemberEntity member) {
338
331
// All methods on [Object] are shadowed by [Interceptor].
339
332
if (cls == _commonElements.objectClass) return ;
340
- Set < MemberEntity > set = _interceptedElements[member.name] ?? = {};
333
+ final set = _interceptedElements[member.name! ] ?? = {};
341
334
set .add (member);
342
335
});
343
336
}
@@ -386,12 +379,11 @@ class OneShotInterceptorData {
386
379
OneShotInterceptor interceptor =
387
380
interceptors[key] ?? = OneShotInterceptor (key, selector);
388
381
interceptor.classes.addAll (classes);
389
- registerSpecializedGetInterceptor (classes, namer );
382
+ registerSpecializedGetInterceptor (classes);
390
383
return namer.nameForOneShotInterceptor (selector, classes);
391
384
}
392
385
393
- void registerSpecializedGetInterceptor (
394
- Set <ClassEntity > classes, ModularNamer namer) {
386
+ void registerSpecializedGetInterceptor (Iterable <ClassEntity > classes) {
395
387
if (classes.contains (_commonElements.jsInterceptorClass)) {
396
388
// We can't use a specialized [getInterceptorMethod], so we make
397
389
// sure we emit the one with all checks.
0 commit comments