| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart | 
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart | 
| index 2155286e407641add795795875ac6979f264a28f..3da14d309703079c405b575ffa1e2d26da8ed956 100644 | 
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart | 
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart | 
| @@ -33,7 +33,11 @@ import '../native/native.dart' as native; | 
| import '../native/resolver.dart'; | 
| import '../ordered_typeset.dart'; | 
| import '../ssa/kernel_impact.dart'; | 
| +import '../universe/class_set.dart'; | 
| +import '../universe/function_set.dart'; | 
| +import '../universe/selector.dart'; | 
| import '../universe/world_builder.dart'; | 
| +import '../world.dart'; | 
| import '../util/util.dart' show Link, LinkBuilder; | 
| import 'element_map.dart'; | 
| import 'elements.dart'; | 
| @@ -1494,6 +1498,106 @@ class KernelResolutionWorldBuilder extends KernelResolutionWorldBuilderBase { | 
| bool checkClass(ClassEntity cls) => true; | 
| } | 
|  | 
| +class KernelClosedWorld extends ClosedWorldBase { | 
| +  final KernelToElementMapImpl _elementMap; | 
| +  final ElementEnvironment _elementEnvironment; | 
| + | 
| +  KernelClosedWorld(this._elementMap, | 
| +      {ElementEnvironment elementEnvironment, | 
| +      CommonElements commonElements, | 
| +      ConstantSystem constantSystem, | 
| +      NativeData nativeData, | 
| +      InterceptorData interceptorData, | 
| +      BackendUsage backendUsage, | 
| +      ResolutionWorldBuilder resolutionWorldBuilder, | 
| +      FunctionSet functionSet, | 
| +      Iterable<TypedefElement> allTypedefs, | 
| +      Map<ClassEntity, Set<ClassEntity>> mixinUses, | 
| +      Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 
| +      Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, | 
| +      Map<ClassEntity, ClassSet> classSets}) | 
| +      : this._elementEnvironment = elementEnvironment, | 
| +        super( | 
| +            commonElements: commonElements, | 
| +            constantSystem: constantSystem, | 
| +            nativeData: nativeData, | 
| +            interceptorData: interceptorData, | 
| +            backendUsage: backendUsage, | 
| +            resolutionWorldBuilder: resolutionWorldBuilder, | 
| +            functionSet: functionSet, | 
| +            allTypedefs: allTypedefs, | 
| +            mixinUses: mixinUses, | 
| +            typesImplementedBySubclasses: typesImplementedBySubclasses, | 
| +            classHierarchyNodes: classHierarchyNodes, | 
| +            classSets: classSets); | 
| + | 
| +  @override | 
| +  bool hasConcreteMatch(ClassEntity cls, Selector selector, | 
| +      {ClassEntity stopAtSuperclass}) { | 
| +    throw new UnimplementedError('KernelClosedWorld.hasConcreteMatch'); | 
| +  } | 
| + | 
| +  @override | 
| +  bool isNamedMixinApplication(ClassEntity cls) { | 
| +    throw new UnimplementedError('KernelClosedWorld.isNamedMixinApplication'); | 
| +  } | 
| + | 
| +  @override | 
| +  ClassEntity getAppliedMixin(ClassEntity cls) { | 
| +    throw new UnimplementedError('KernelClosedWorld.getAppliedMixin'); | 
| +  } | 
| + | 
| +  @override | 
| +  Iterable<ClassEntity> getInterfaces(ClassEntity cls) { | 
| +    throw new UnimplementedError('KernelClosedWorld.getInterfaces'); | 
| +  } | 
| + | 
| +  @override | 
| +  ClassEntity getSuperClass(ClassEntity cls) { | 
| +    throw new UnimplementedError('KernelClosedWorld.getSuperClass'); | 
| +  } | 
| + | 
| +  @override | 
| +  int getHierarchyDepth(ClassEntity cls) { | 
| +    return _elementMap._getHierarchyDepth(cls); | 
| +  } | 
| + | 
| +  @override | 
| +  OrderedTypeSet getOrderedTypeSet(ClassEntity cls) { | 
| +    return _elementMap._getOrderedTypeSet(cls); | 
| +  } | 
| + | 
| +  @override | 
| +  bool checkInvariants(ClassEntity cls, {bool mustBeInstantiated: true}) => | 
| +      true; | 
| + | 
| +  @override | 
| +  bool checkClass(ClassEntity cls) => true; | 
| + | 
| +  @override | 
| +  bool checkEntity(Entity element) => true; | 
| + | 
| +  @override | 
| +  void registerClosureClass(ClassElement cls) { | 
| +    throw new UnimplementedError('KernelClosedWorld.registerClosureClass'); | 
| +  } | 
| + | 
| +  @override | 
| +  bool hasElementIn(ClassEntity cls, Selector selector, Entity element) { | 
| +    while (cls != null) { | 
| +      MemberEntity member = _elementEnvironment | 
| +          .lookupClassMember(cls, selector.name, setter: selector.isSetter); | 
| +      if (member != null && | 
| +          (!selector.memberName.isPrivate || | 
| +              member.library == selector.library)) { | 
| +        return member == element; | 
| +      } | 
| +      cls = _elementEnvironment.getSuperClass(cls); | 
| +    } | 
| +    return false; | 
| +  } | 
| +} | 
| + | 
| // Interface for testing equivalence of Kernel-based entities. | 
| class WorldDeconstructionForTesting { | 
| final KernelToElementMapImpl elementMap; | 
|  |