diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart index cbf95ce6ad5..21c6f2a00ce 100644 --- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart +++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart @@ -2,8 +2,6 @@ // 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. -// @dart = 2.10 - library js_backend.interceptor_data; import '../common/elements.dart' @@ -176,18 +174,13 @@ class InterceptorDataImpl implements InterceptorData { @override bool isInterceptedMixinSelector( - Selector selector, AbstractValue mask, JClosedWorld closedWorld) { - Set elements = - _interceptedMixinElements.putIfAbsent(selector.name, () { - Set elements = interceptedMembers[selector.name]; - if (elements == null) return null; - return elements - .where((element) => classesMixedIntoInterceptedClasses - .contains(element.enclosingClass)) - .toSet(); - }); - - if (elements == null) return false; + Selector selector, AbstractValue? mask, JClosedWorld closedWorld) { + Set elements = _interceptedMixinElements[selector.name] ??= + (interceptedMembers[selector.name] + ?.where((element) => classesMixedIntoInterceptedClasses + .contains(element.enclosingClass)) + .toSet() ?? + const {}); if (elements.isEmpty) return false; return elements.any((element) { return selector.applies(element) && @@ -216,21 +209,21 @@ class InterceptorDataImpl implements InterceptorData { @override Set getInterceptedClassesOn( String name, JClosedWorld closedWorld) { - Set intercepted = interceptedMembers[name]; + final intercepted = interceptedMembers[name]; if (intercepted == null) return _noClasses; return _interceptedClassesCache.putIfAbsent(name, () { // Populate the cache by running through all the elements and // determine if the given selector applies to them. Set result = {}; for (MemberEntity element in intercepted) { - ClassEntity classElement = element.enclosingClass; + final classElement = element.enclosingClass!; if (_isCompileTimeOnlyClass(classElement)) continue; if (_nativeData.isNativeOrExtendsNative(classElement) || interceptedClasses.contains(classElement)) { result.add(classElement); } if (classesMixedIntoInterceptedClasses.contains(classElement)) { - Set nativeSubclasses = + final nativeSubclasses = nativeSubclassesOfMixin(classElement, closedWorld); if (nativeSubclasses != null) result.addAll(nativeSubclasses); } @@ -239,16 +232,15 @@ class InterceptorDataImpl implements InterceptorData { }); } - Set nativeSubclassesOfMixin( + Set? nativeSubclassesOfMixin( ClassEntity mixin, JClosedWorld closedWorld) { Iterable uses = closedWorld.mixinUsesOf(mixin); - Set result = null; + Set? result; for (ClassEntity use in uses) { closedWorld.classHierarchy.forEachStrictSubclassOf(use, (ClassEntity subclass) { if (_nativeData.isNativeOrExtendsNative(subclass)) { - if (result == null) result = {}; - result.add(subclass); + (result ??= {}).add(subclass); } return IterationStep.CONTINUE; }); @@ -257,7 +249,7 @@ class InterceptorDataImpl implements InterceptorData { } @override - bool isInterceptedClass(ClassEntity element) { + bool isInterceptedClass(ClassEntity? element) { if (element == null) return false; if (_nativeData.isNativeOrExtendsNative(element)) return true; if (interceptedClasses.contains(element)) return true; @@ -276,7 +268,7 @@ class InterceptorDataImpl implements InterceptorData { if (!closedWorld.dartTypes.treatAsRawType(type)) return false; if (type is FutureOrType) return false; - InterfaceType interfaceType = type; + final interfaceType = type as InterfaceType; ClassEntity classElement = interfaceType.element; if (isInterceptedClass(classElement)) return false; return closedWorld.classHierarchy.hasOnlySubclasses(classElement); @@ -321,7 +313,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder { if (member.name == Identifiers.call) return; // All methods on [Object] are shadowed by [Interceptor]. if (cls == _commonElements.objectClass) return; - Set set = _interceptedElements[member.name] ??= {}; + final set = _interceptedElements[member.name!] ??= {}; set.add(member); }); @@ -338,7 +330,7 @@ class InterceptorDataBuilderImpl implements InterceptorDataBuilder { (ClassEntity cls, MemberEntity member) { // All methods on [Object] are shadowed by [Interceptor]. if (cls == _commonElements.objectClass) return; - Set set = _interceptedElements[member.name] ??= {}; + final set = _interceptedElements[member.name!] ??= {}; set.add(member); }); } @@ -391,7 +383,7 @@ class OneShotInterceptorData { return namer.nameForOneShotInterceptor(selector, classes); } - void registerSpecializedGetInterceptor(Set classes) { + void registerSpecializedGetInterceptor(Iterable classes) { if (classes.contains(_commonElements.jsInterceptorClass)) { // We can't use a specialized [getInterceptorMethod], so we make // sure we emit the one with all checks.