blob: b317b60defaacf21ede03d71f4ae25ad13826852 [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.
// @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<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'));
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]);
}