Reduce use of putIfAbsent

Change-Id: I2088d80126bd5af09c0091c768c381b13733aa1e
Reviewed-on: https://dart-review.googlesource.com/62021
Commit-Queue: Stephen Adams <sra@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 467d61b..54daa5c 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -1073,11 +1073,13 @@
   /// this current set. This should only be called from [ImportSetLattice],
   /// since it is where we preserve this invariant.
   ImportSet _add(_DeferredImport import) {
-    return _transitions.putIfAbsent(import, () {
-      var result = new ImportSet(new List.from(_imports)..add(import));
+    ImportSet result = _transitions[import];
+    if (result == null) {
+      result = new ImportSet(new List.from(_imports)..add(import));
       result._transitions[import] = result;
-      return result;
-    });
+      _transitions[import] = result;
+    }
+    return result;
   }
 
   String toString() {
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
index 5b45c23..74e9360 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_engine.dart
@@ -1207,8 +1207,7 @@
       // Put the other operators in buckets by size, later to be added in
       // size order.
       int size = computeSize(element);
-      Set<MemberEntity> set =
-          methodSizes.putIfAbsent(size, () => new Setlet<MemberEntity>());
+      Set<MemberEntity> set = methodSizes[size] ??= new Setlet<MemberEntity>();
       set.add(element);
     });
     return methodSizes;
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index b5c8895..6fa9191 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -398,12 +398,14 @@
   MemberTypeInformation getInferredTypeOfMember(MemberEntity member) {
     assert(!member.isAbstract,
         failedAt(member, "Unexpected abstract member $member."));
-    return memberTypeInformations.putIfAbsent(member, () {
-      MemberTypeInformation typeInformation =
-          strategy.createMemberTypeInformation(_abstractValueDomain, member);
-      _orderedTypeInformations.add(typeInformation);
-      return typeInformation;
-    });
+    return memberTypeInformations[member] ??= _getInferredTypeOfMember(member);
+  }
+
+  MemberTypeInformation _getInferredTypeOfMember(MemberEntity member) {
+    MemberTypeInformation typeInformation =
+        strategy.createMemberTypeInformation(_abstractValueDomain, member);
+    _orderedTypeInformations.add(typeInformation);
+    return typeInformation;
   }
 
   /**
diff --git a/pkg/compiler/lib/src/io/source_map_builder.dart b/pkg/compiler/lib/src/io/source_map_builder.dart
index ffb6423..c19cfa0 100644
--- a/pkg/compiler/lib/src/io/source_map_builder.dart
+++ b/pkg/compiler/lib/src/io/source_map_builder.dart
@@ -276,13 +276,11 @@
 /// Map from line/column pairs to lists of [T] elements.
 class LineColumnMap<T> {
   Map<int, Map<int, List<T>>> _map = <int, Map<int, List<T>>>{};
-  var _makeLineMap = () => <int, List<T>>{};
-  var _makeList = () => <T>[];
 
   /// Returns the list of elements associated with ([line],[column]).
   List<T> _getList(int line, int column) {
-    Map<int, List<T>> lineMap = _map.putIfAbsent(line, _makeLineMap);
-    return lineMap.putIfAbsent(column, _makeList);
+    Map<int, List<T>> lineMap = _map[line] ??= <int, List<T>>{};
+    return lineMap[column] ??= <T>[];
   }
 
   /// Adds [element] to the end of the list of elements associated with
diff --git a/pkg/compiler/lib/src/js_backend/inferred_data.dart b/pkg/compiler/lib/src/js_backend/inferred_data.dart
index 3318b1c..1f5de05 100644
--- a/pkg/compiler/lib/src/js_backend/inferred_data.dart
+++ b/pkg/compiler/lib/src/js_backend/inferred_data.dart
@@ -167,8 +167,7 @@
 
   @override
   SideEffectsBuilder getSideEffectsBuilder(MemberEntity member) {
-    return _sideEffectsBuilders.putIfAbsent(
-        member, () => new SideEffectsBuilder(member));
+    return _sideEffectsBuilders[member] ??= new SideEffectsBuilder(member);
   }
 
   @override
diff --git a/pkg/compiler/lib/src/js_backend/interceptor_data.dart b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
index 3ef09f3..abed251 100644
--- a/pkg/compiler/lib/src/js_backend/interceptor_data.dart
+++ b/pkg/compiler/lib/src/js_backend/interceptor_data.dart
@@ -254,8 +254,8 @@
       if (member.name == Identifiers.call) return;
       // All methods on [Object] are shadowed by [Interceptor].
       if (cls == _commonElements.objectClass) return;
-      Set<MemberEntity> set = _interceptedElements.putIfAbsent(
-          member.name, () => new Set<MemberEntity>());
+      Set<MemberEntity> set =
+          _interceptedElements[member.name] ??= new Set<MemberEntity>();
       set.add(member);
     });
 
@@ -271,8 +271,8 @@
           (ClassEntity cls, MemberEntity member) {
         // All methods on [Object] are shadowed by [Interceptor].
         if (cls == _commonElements.objectClass) return;
-        Set<MemberEntity> set = _interceptedElements.putIfAbsent(
-            member.name, () => new Set<MemberEntity>());
+        Set<MemberEntity> set =
+            _interceptedElements[member.name] ??= new Set<MemberEntity>();
         set.add(member);
       });
     }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 2136ceb..1af442c 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -930,215 +930,222 @@
   }
 
   LibraryEntity _getLibrary(ir.Library node, [LibraryEnv libraryEnv]) {
-    return _libraryMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "library for $node.");
-      Uri canonicalUri = node.importUri;
-      String name = node.name;
-      if (name == null) {
-        // Use the file name as script name.
-        String path = canonicalUri.path;
-        name = path.substring(path.lastIndexOf('/') + 1);
-      }
-      IndexedLibrary library = createLibrary(name, canonicalUri);
-      return _libraries.register(library, new LibraryData(node),
-          libraryEnv ?? _env.lookupLibrary(canonicalUri));
-    });
+    return _libraryMap[node] ??= _getLibraryCreate(node, libraryEnv);
+  }
+
+  LibraryEntity _getLibraryCreate(ir.Library node, LibraryEnv libraryEnv) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "library for $node.");
+    Uri canonicalUri = node.importUri;
+    String name = node.name;
+    if (name == null) {
+      // Use the file name as script name.
+      String path = canonicalUri.path;
+      name = path.substring(path.lastIndexOf('/') + 1);
+    }
+    IndexedLibrary library = createLibrary(name, canonicalUri);
+    return _libraries.register(library, new LibraryData(node),
+        libraryEnv ?? _env.lookupLibrary(canonicalUri));
   }
 
   ClassEntity _getClass(ir.Class node, [ClassEnv classEnv]) {
-    return _classMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "class for $node.");
-      KLibrary library = _getLibrary(node.enclosingLibrary);
-      if (classEnv == null) {
-        classEnv = _libraries.getEnv(library).lookupClass(node.name);
-      }
-      IndexedClass cls =
-          createClass(library, node.name, isAbstract: node.isAbstract);
-      return _classes.register(cls,
-          new ClassData(node, new RegularClassDefinition(cls, node)), classEnv);
-    });
+    return _classMap[node] ??= _getClassCreate(node, classEnv);
+  }
+
+  ClassEntity _getClassCreate(ir.Class node, ClassEnv classEnv) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "class for $node.");
+    KLibrary library = _getLibrary(node.enclosingLibrary);
+    if (classEnv == null) {
+      classEnv = _libraries.getEnv(library).lookupClass(node.name);
+    }
+    IndexedClass cls =
+        createClass(library, node.name, isAbstract: node.isAbstract);
+    return _classes.register(cls,
+        new ClassData(node, new RegularClassDefinition(cls, node)), classEnv);
   }
 
   TypedefEntity _getTypedef(ir.Typedef node) {
-    return _typedefMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "typedef for $node.");
-      IndexedLibrary library = _getLibrary(node.enclosingLibrary);
-      IndexedTypedef typedef = createTypedef(library, node.name);
-      TypedefType typedefType = new TypedefType(
-          typedef,
-          new List<DartType>.filled(
-              node.typeParameters.length, const DynamicType()));
-      return _typedefs.register(
-          typedef, new TypedefData(node, typedef, typedefType));
-    });
+    return _typedefMap[node] ??= _getTypedefCreate(node);
+  }
+
+  TypedefEntity _getTypedefCreate(ir.Typedef node) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "typedef for $node.");
+    IndexedLibrary library = _getLibrary(node.enclosingLibrary);
+    IndexedTypedef typedef = createTypedef(library, node.name);
+    TypedefType typedefType = new TypedefType(
+        typedef,
+        new List<DartType>.filled(
+            node.typeParameters.length, const DynamicType()));
+    return _typedefs.register(
+        typedef, new TypedefData(node, typedef, typedefType));
   }
 
   TypeVariableEntity _getTypeVariable(ir.TypeParameter node) {
-    return _typeVariableMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "type variable for $node.");
-      if (node.parent is ir.Class) {
-        ir.Class cls = node.parent;
-        int index = cls.typeParameters.indexOf(node);
-        return _typeVariables.register(
-            createTypeVariable(_getClass(cls), node.name, index),
-            new TypeVariableData(node));
-      }
-      if (node.parent is ir.FunctionNode) {
-        ir.FunctionNode func = node.parent;
-        int index = func.typeParameters.indexOf(node);
-        if (func.parent is ir.Constructor) {
-          ir.Constructor constructor = func.parent;
-          ir.Class cls = constructor.enclosingClass;
+    return _typeVariableMap[node] ??= _getTypeVariableCreate(node);
+  }
+
+  TypeVariableEntity _getTypeVariableCreate(ir.TypeParameter node) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "type variable for $node.");
+    if (node.parent is ir.Class) {
+      ir.Class cls = node.parent;
+      int index = cls.typeParameters.indexOf(node);
+      return _typeVariables.register(
+          createTypeVariable(_getClass(cls), node.name, index),
+          new TypeVariableData(node));
+    }
+    if (node.parent is ir.FunctionNode) {
+      ir.FunctionNode func = node.parent;
+      int index = func.typeParameters.indexOf(node);
+      if (func.parent is ir.Constructor) {
+        ir.Constructor constructor = func.parent;
+        ir.Class cls = constructor.enclosingClass;
+        return _getTypeVariable(cls.typeParameters[index]);
+      } else if (func.parent is ir.Procedure) {
+        ir.Procedure procedure = func.parent;
+        if (procedure.kind == ir.ProcedureKind.Factory) {
+          ir.Class cls = procedure.enclosingClass;
           return _getTypeVariable(cls.typeParameters[index]);
-        } else if (func.parent is ir.Procedure) {
-          ir.Procedure procedure = func.parent;
-          if (procedure.kind == ir.ProcedureKind.Factory) {
-            ir.Class cls = procedure.enclosingClass;
-            return _getTypeVariable(cls.typeParameters[index]);
-          } else {
-            return _typeVariables.register(
-                createTypeVariable(_getMethod(procedure), node.name, index),
-                new TypeVariableData(node));
-          }
         } else {
-          throw new UnsupportedError(
-              'Unsupported function type parameter parent '
-              'node ${func.parent}.');
+          return _typeVariables.register(
+              createTypeVariable(_getMethod(procedure), node.name, index),
+              new TypeVariableData(node));
         }
+      } else {
+        throw new UnsupportedError('Unsupported function type parameter parent '
+            'node ${func.parent}.');
       }
-      throw new UnsupportedError('Unsupported type parameter type node $node.');
-    });
+    }
+    throw new UnsupportedError('Unsupported type parameter type node $node.');
   }
 
   ConstructorEntity _getConstructor(ir.Member node) {
-    return _constructorMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "constructor for $node.");
-      MemberDefinition definition;
-      ir.FunctionNode functionNode;
-      ClassEntity enclosingClass = _getClass(node.enclosingClass);
-      Name name = getName(node.name);
-      bool isExternal = node.isExternal;
+    return _constructorMap[node] ??= _getConstructorCreate(node);
+  }
 
-      IndexedConstructor constructor;
-      if (node is ir.Constructor) {
-        functionNode = node.function;
-        constructor = createGenerativeConstructor(enclosingClass, name,
-            _getParameterStructure(functionNode, includeTypeParameters: false),
-            isExternal: isExternal, isConst: node.isConst);
-        definition = new SpecialMemberDefinition(
-            constructor, node, MemberKind.constructor);
-      } else if (node is ir.Procedure) {
-        functionNode = node.function;
-        bool isFromEnvironment = isExternal &&
-            name.text == 'fromEnvironment' &&
-            const ['int', 'bool', 'String'].contains(enclosingClass.name);
-        constructor = createFactoryConstructor(enclosingClass, name,
-            _getParameterStructure(functionNode, includeTypeParameters: false),
-            isExternal: isExternal,
-            isConst: node.isConst,
-            isFromEnvironmentConstructor: isFromEnvironment);
-        definition = new RegularMemberDefinition(constructor, node);
-      } else {
-        // TODO(johnniwinther): Convert `node.location` to a [SourceSpan].
-        throw failedAt(
-            NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}.");
-      }
-      return _members.register<IndexedConstructor, ConstructorData>(
-          constructor, new ConstructorDataImpl(node, functionNode, definition));
-    });
+  ConstructorEntity _getConstructorCreate(ir.Member node) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "constructor for $node.");
+    MemberDefinition definition;
+    ir.FunctionNode functionNode;
+    ClassEntity enclosingClass = _getClass(node.enclosingClass);
+    Name name = getName(node.name);
+    bool isExternal = node.isExternal;
+
+    IndexedConstructor constructor;
+    if (node is ir.Constructor) {
+      functionNode = node.function;
+      constructor = createGenerativeConstructor(enclosingClass, name,
+          _getParameterStructure(functionNode, includeTypeParameters: false),
+          isExternal: isExternal, isConst: node.isConst);
+      definition = new SpecialMemberDefinition(
+          constructor, node, MemberKind.constructor);
+    } else if (node is ir.Procedure) {
+      functionNode = node.function;
+      bool isFromEnvironment = isExternal &&
+          name.text == 'fromEnvironment' &&
+          const ['int', 'bool', 'String'].contains(enclosingClass.name);
+      constructor = createFactoryConstructor(enclosingClass, name,
+          _getParameterStructure(functionNode, includeTypeParameters: false),
+          isExternal: isExternal,
+          isConst: node.isConst,
+          isFromEnvironmentConstructor: isFromEnvironment);
+      definition = new RegularMemberDefinition(constructor, node);
+    } else {
+      // TODO(johnniwinther): Convert `node.location` to a [SourceSpan].
+      throw failedAt(
+          NO_LOCATION_SPANNABLE, "Unexpected constructor node: ${node}.");
+    }
+    return _members.register<IndexedConstructor, ConstructorData>(
+        constructor, new ConstructorDataImpl(node, functionNode, definition));
   }
 
   FunctionEntity _getMethod(ir.Procedure node) {
-    return _methodMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "function for $node.");
-      LibraryEntity library;
-      ClassEntity enclosingClass;
-      if (node.enclosingClass != null) {
-        enclosingClass = _getClass(node.enclosingClass);
-        library = enclosingClass.library;
-      } else {
-        library = _getLibrary(node.enclosingLibrary);
-      }
-      Name name = getName(node.name);
-      bool isStatic = node.isStatic;
-      bool isExternal = node.isExternal;
-      // TODO(johnniwinther): Remove `&& !node.isExternal` when #31233 is fixed.
-      bool isAbstract = node.isAbstract && !node.isExternal;
-      AsyncMarker asyncMarker = getAsyncMarker(node.function);
-      IndexedFunction function;
-      switch (node.kind) {
-        case ir.ProcedureKind.Factory:
-          throw new UnsupportedError("Cannot create method from factory.");
-        case ir.ProcedureKind.Getter:
-          function = createGetter(library, enclosingClass, name, asyncMarker,
-              isStatic: isStatic,
-              isExternal: isExternal,
-              isAbstract: isAbstract);
-          break;
-        case ir.ProcedureKind.Method:
-        case ir.ProcedureKind.Operator:
-          function = createMethod(library, enclosingClass, name,
-              _getParameterStructure(node.function), asyncMarker,
-              isStatic: isStatic,
-              isExternal: isExternal,
-              isAbstract: isAbstract);
-          break;
-        case ir.ProcedureKind.Setter:
-          assert(asyncMarker == AsyncMarker.SYNC);
-          function = createSetter(library, enclosingClass, name.setter,
-              isStatic: isStatic,
-              isExternal: isExternal,
-              isAbstract: isAbstract);
-          break;
-      }
-      return _members.register<IndexedFunction, FunctionData>(
-          function,
-          new FunctionDataImpl(node, node.function,
-              new RegularMemberDefinition(function, node)));
-    });
+    return _methodMap[node] ??= _getMethodCreate(node);
+  }
+
+  FunctionEntity _getMethodCreate(ir.Procedure node) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "function for $node.");
+    LibraryEntity library;
+    ClassEntity enclosingClass;
+    if (node.enclosingClass != null) {
+      enclosingClass = _getClass(node.enclosingClass);
+      library = enclosingClass.library;
+    } else {
+      library = _getLibrary(node.enclosingLibrary);
+    }
+    Name name = getName(node.name);
+    bool isStatic = node.isStatic;
+    bool isExternal = node.isExternal;
+    // TODO(johnniwinther): Remove `&& !node.isExternal` when #31233 is fixed.
+    bool isAbstract = node.isAbstract && !node.isExternal;
+    AsyncMarker asyncMarker = getAsyncMarker(node.function);
+    IndexedFunction function;
+    switch (node.kind) {
+      case ir.ProcedureKind.Factory:
+        throw new UnsupportedError("Cannot create method from factory.");
+      case ir.ProcedureKind.Getter:
+        function = createGetter(library, enclosingClass, name, asyncMarker,
+            isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
+        break;
+      case ir.ProcedureKind.Method:
+      case ir.ProcedureKind.Operator:
+        function = createMethod(library, enclosingClass, name,
+            _getParameterStructure(node.function), asyncMarker,
+            isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
+        break;
+      case ir.ProcedureKind.Setter:
+        assert(asyncMarker == AsyncMarker.SYNC);
+        function = createSetter(library, enclosingClass, name.setter,
+            isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
+        break;
+    }
+    return _members.register<IndexedFunction, FunctionData>(
+        function,
+        new FunctionDataImpl(
+            node, node.function, new RegularMemberDefinition(function, node)));
   }
 
   FieldEntity _getField(ir.Field node) {
-    return _fieldMap.putIfAbsent(node, () {
-      assert(
-          !_envIsClosed,
-          "Environment of $this is closed. Trying to create "
-          "field for $node.");
-      LibraryEntity library;
-      ClassEntity enclosingClass;
-      if (node.enclosingClass != null) {
-        enclosingClass = _getClass(node.enclosingClass);
-        library = enclosingClass.library;
-      } else {
-        library = _getLibrary(node.enclosingLibrary);
-      }
-      Name name = getName(node.name);
-      bool isStatic = node.isStatic;
-      IndexedField field = createField(library, enclosingClass, name,
-          isStatic: isStatic,
-          isAssignable: node.isMutable,
-          isConst: node.isConst);
-      return _members.register<IndexedField, FieldData>(field,
-          new FieldDataImpl(node, new RegularMemberDefinition(field, node)));
-    });
+    return _fieldMap[node] ??= _getFieldCreate(node);
+  }
+
+  FieldEntity _getFieldCreate(ir.Field node) {
+    assert(
+        !_envIsClosed,
+        "Environment of $this is closed. Trying to create "
+        "field for $node.");
+    LibraryEntity library;
+    ClassEntity enclosingClass;
+    if (node.enclosingClass != null) {
+      enclosingClass = _getClass(node.enclosingClass);
+      library = enclosingClass.library;
+    } else {
+      library = _getLibrary(node.enclosingLibrary);
+    }
+    Name name = getName(node.name);
+    bool isStatic = node.isStatic;
+    IndexedField field = createField(library, enclosingClass, name,
+        isStatic: isStatic,
+        isAssignable: node.isMutable,
+        isConst: node.isConst);
+    return _members.register<IndexedField, FieldData>(field,
+        new FieldDataImpl(node, new RegularMemberDefinition(field, node)));
   }
 
   ParameterStructure _getParameterStructure(ir.FunctionNode node,
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 0de573e..543d330 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -271,7 +271,7 @@
 
     _elementEnvironment.forEachSupertype(cls, (InterfaceType type) {
       List<ClassEntity> subtypes =
-          emitter.subtypes.putIfAbsent(type.element, () => <ClassEntity>[]);
+          emitter.subtypes[type.element] ??= <ClassEntity>[];
       subtypes.add(cls);
     });
 
@@ -286,7 +286,7 @@
     }
 
     List<ClassEntity> directSubtypes =
-        emitter.directSubtypes.putIfAbsent(superclass, () => <ClassEntity>[]);
+        emitter.directSubtypes[superclass] ??= <ClassEntity>[];
     directSubtypes.add(cls);
   }
 
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index dc49fe5..fecaed8 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -304,12 +304,10 @@
     Selector selector = dynamicUse.selector;
     String name = selector.name;
     Object constraint = dynamicUse.receiverConstraint;
-    Map<Selector, SelectorConstraints> selectors = selectorMap.putIfAbsent(
-        name, () => new Maplet<Selector, SelectorConstraints>());
-    UniverseSelectorConstraints constraints =
-        selectors.putIfAbsent(selector, () {
-      return selectorConstraintsStrategy.createSelectorConstraints(selector);
-    });
+    Map<Selector, SelectorConstraints> selectors =
+        selectorMap[name] ??= new Maplet<Selector, SelectorConstraints>();
+    UniverseSelectorConstraints constraints = selectors[selector] ??=
+        selectorConstraintsStrategy.createSelectorConstraints(selector);
     return constraints.addReceiverConstraint(constraint);
   }
 
diff --git a/pkg/compiler/lib/src/universe/function_set.dart b/pkg/compiler/lib/src/universe/function_set.dart
index aee80f5..5f78a8e 100644
--- a/pkg/compiler/lib/src/universe/function_set.dart
+++ b/pkg/compiler/lib/src/universe/function_set.dart
@@ -20,7 +20,7 @@
     Map<String, FunctionSetNode> nodes = new Map<String, FunctionSetNode>();
     for (MemberEntity member in liveInstanceMembers) {
       String name = member.name;
-      nodes.putIfAbsent(name, () => new FunctionSetNode(name)).add(member);
+      (nodes[name] ??= new FunctionSetNode(name)).add(member);
     }
     return new FunctionSet.internal(nodes);
   }