// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file // 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. import 'package:kernel/ast.dart'; /// Returns a [Component] object containing empty definitions of core SDK classes. Component createMockSdkComponent() { var coreLib = new Library(Uri.parse('dart:core'), name: 'dart.core'); var asyncLib = new Library(Uri.parse('dart:async'), name: 'dart.async'); var internalLib = new Library(Uri.parse('dart:_internal'), name: 'dart._internal'); Class addClass(Library lib, Class c) { lib.addClass(c); return c; } var objectClass = addClass(coreLib, new Class(name: 'Object')); var objectType = objectClass.rawType; TypeParameter typeParam(String name, [DartType bound]) { return new TypeParameter(name, bound ?? objectType); } Class class_(String name, {Supertype supertype, List typeParameters, List implementedTypes}) { return new Class( name: name, supertype: supertype ?? objectClass.asThisSupertype, typeParameters: typeParameters, implementedTypes: implementedTypes); } addClass(coreLib, class_('Null')); addClass(coreLib, class_('bool')); var num = addClass(coreLib, class_('num')); addClass(coreLib, class_('String')); var iterable = addClass(coreLib, class_('Iterable', typeParameters: [typeParam('T')])); { var T = typeParam('T'); addClass( coreLib, class_('List', typeParameters: [ T ], implementedTypes: [ new Supertype(iterable, [new TypeParameterType(T)]) ])); } addClass( coreLib, class_('Map', typeParameters: [typeParam('K'), typeParam('V')])); addClass(coreLib, class_('int', supertype: num.asThisSupertype)); addClass(coreLib, class_('double', supertype: num.asThisSupertype)); addClass(coreLib, class_('Iterator', typeParameters: [typeParam('T')])); addClass(coreLib, class_('Symbol')); addClass(coreLib, class_('Type')); addClass(coreLib, class_('Function')); addClass(coreLib, class_('Invocation')); addClass(asyncLib, class_('Future', typeParameters: [typeParam('T')])); addClass(asyncLib, class_('FutureOr', typeParameters: [typeParam('T')])); addClass(asyncLib, class_('Stream', typeParameters: [typeParam('T')])); addClass(internalLib, class_('Symbol')); return new Component(libraries: [coreLib, asyncLib, internalLib]); }