Skip to content

Commit 76169b5

Browse files
committed
[dart2js] Migrate interceptor_data.dart to null safety.
Change-Id: I0c3f767cad1ae372d116a13b408affb967a56f2a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/260245 Reviewed-by: Sigmund Cherem <[email protected]> Auto-Submit: Nate Biggs <[email protected]>
1 parent 3a7e743 commit 76169b5

File tree

1 file changed

+18
-26
lines changed

1 file changed

+18
-26
lines changed

pkg/compiler/lib/src/js_backend/interceptor_data.dart

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// @dart = 2.10
6-
75
library js_backend.interceptor_data;
86

97
import '../common/elements.dart'
@@ -176,18 +174,13 @@ class InterceptorDataImpl implements InterceptorData {
176174

177175
@override
178176
bool isInterceptedMixinSelector(
179-
Selector selector, AbstractValue mask, JClosedWorld closedWorld) {
180-
Set<MemberEntity> elements =
181-
_interceptedMixinElements.putIfAbsent(selector.name, () {
182-
Set<MemberEntity> elements = interceptedMembers[selector.name];
183-
if (elements == null) return null;
184-
return elements
185-
.where((element) => classesMixedIntoInterceptedClasses
186-
.contains(element.enclosingClass))
187-
.toSet();
188-
});
189-
190-
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 {});
191184
if (elements.isEmpty) return false;
192185
return elements.any((element) {
193186
return selector.applies(element) &&
@@ -216,21 +209,21 @@ class InterceptorDataImpl implements InterceptorData {
216209
@override
217210
Set<ClassEntity> getInterceptedClassesOn(
218211
String name, JClosedWorld closedWorld) {
219-
Set<MemberEntity> intercepted = interceptedMembers[name];
212+
final intercepted = interceptedMembers[name];
220213
if (intercepted == null) return _noClasses;
221214
return _interceptedClassesCache.putIfAbsent(name, () {
222215
// Populate the cache by running through all the elements and
223216
// determine if the given selector applies to them.
224217
Set<ClassEntity> result = {};
225218
for (MemberEntity element in intercepted) {
226-
ClassEntity classElement = element.enclosingClass;
219+
final classElement = element.enclosingClass!;
227220
if (_isCompileTimeOnlyClass(classElement)) continue;
228221
if (_nativeData.isNativeOrExtendsNative(classElement) ||
229222
interceptedClasses.contains(classElement)) {
230223
result.add(classElement);
231224
}
232225
if (classesMixedIntoInterceptedClasses.contains(classElement)) {
233-
Set<ClassEntity> nativeSubclasses =
226+
final nativeSubclasses =
234227
nativeSubclassesOfMixin(classElement, closedWorld);
235228
if (nativeSubclasses != null) result.addAll(nativeSubclasses);
236229
}
@@ -239,16 +232,15 @@ class InterceptorDataImpl implements InterceptorData {
239232
});
240233
}
241234

242-
Set<ClassEntity> nativeSubclassesOfMixin(
235+
Set<ClassEntity>? nativeSubclassesOfMixin(
243236
ClassEntity mixin, JClosedWorld closedWorld) {
244237
Iterable<ClassEntity> uses = closedWorld.mixinUsesOf(mixin);
245-
Set<ClassEntity> result = null;
238+
Set<ClassEntity>? result;
246239
for (ClassEntity use in uses) {
247240
closedWorld.classHierarchy.forEachStrictSubclassOf(use,
248241
(ClassEntity subclass) {
249242
if (_nativeData.isNativeOrExtendsNative(subclass)) {
250-
if (result == null) result = {};
251-
result.add(subclass);
243+
(result ??= {}).add(subclass);
252244
}
253245
return IterationStep.CONTINUE;
254246
});
@@ -257,7 +249,7 @@ class InterceptorDataImpl implements InterceptorData {
257249
}
258250

259251
@override
260-
bool isInterceptedClass(ClassEntity element) {
252+
bool isInterceptedClass(ClassEntity? element) {
261253
if (element == null) return false;
262254
if (_nativeData.isNativeOrExtendsNative(element)) return true;
263255
if (interceptedClasses.contains(element)) return true;
@@ -276,7 +268,7 @@ class InterceptorDataImpl implements InterceptorData {
276268

277269
if (!closedWorld.dartTypes.treatAsRawType(type)) return false;
278270
if (type is FutureOrType) return false;
279-
InterfaceType interfaceType = type;
271+
final interfaceType = type as InterfaceType;
280272
ClassEntity classElement = interfaceType.element;
281273
if (isInterceptedClass(classElement)) return false;
282274
return closedWorld.classHierarchy.hasOnlySubclasses(classElement);
@@ -321,7 +313,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder {
321313
if (member.name == Identifiers.call) return;
322314
// All methods on [Object] are shadowed by [Interceptor].
323315
if (cls == _commonElements.objectClass) return;
324-
Set<MemberEntity> set = _interceptedElements[member.name] ??= {};
316+
final set = _interceptedElements[member.name!] ??= {};
325317
set.add(member);
326318
});
327319

@@ -338,7 +330,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder {
338330
(ClassEntity cls, MemberEntity member) {
339331
// All methods on [Object] are shadowed by [Interceptor].
340332
if (cls == _commonElements.objectClass) return;
341-
Set<MemberEntity> set = _interceptedElements[member.name] ??= {};
333+
final set = _interceptedElements[member.name!] ??= {};
342334
set.add(member);
343335
});
344336
}
@@ -391,7 +383,7 @@ class OneShotInterceptorData {
391383
return namer.nameForOneShotInterceptor(selector, classes);
392384
}
393385

394-
void registerSpecializedGetInterceptor(Set<ClassEntity> classes) {
386+
void registerSpecializedGetInterceptor(Iterable<ClassEntity> classes) {
395387
if (classes.contains(_commonElements.jsInterceptorClass)) {
396388
// We can't use a specialized [getInterceptorMethod], so we make
397389
// sure we emit the one with all checks.

0 commit comments

Comments
 (0)