blob: c85bdcf66b679ac263e4bbd3fc9a908e2fa45e93 [file] [log] [blame]
// 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<TypeParameter> typeParameters,
List<Supertype> 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]);
}