// 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. // @dart = 2.9 import 'package:kernel/ast.dart'; /// Returns a [Component] object containing empty definitions of core SDK /// classes. Component createMockSdkComponent() { Library coreLib = new Library(Uri.parse('dart:core'), name: 'dart.core'); Library asyncLib = new Library(Uri.parse('dart:async'), name: 'dart.async'); Library internalLib = new Library(Uri.parse('dart:_internal'), name: 'dart._internal'); Class addClass(Library lib, Class c) { lib.addClass(c); return c; } Class objectClass = addClass(coreLib, new Class(name: 'Object')); InterfaceType objectType = new InterfaceType(objectClass, coreLib.nonNullable); 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')); Class num = addClass(coreLib, class_('num')); addClass(coreLib, class_('String')); Class iterable = addClass(coreLib, class_('Iterable', typeParameters: [typeParam('T')])); { TypeParameter T = typeParam('T'); addClass( coreLib, class_('List', typeParameters: [ T ], implementedTypes: [ new Supertype(iterable, [ new TypeParameterType.withDefaultNullabilityForLibrary(T, coreLib) ]) ])); } 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(coreLib, 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]); }