Chromium Code Reviews| Index: pkg/fasta/lib/src/kernel/kernel_builder.dart |
| diff --git a/pkg/fasta/lib/src/kernel/kernel_builder.dart b/pkg/fasta/lib/src/kernel/kernel_builder.dart |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2f583d3e89e1c65cd622e57132368ed938b99421 |
| --- /dev/null |
| +++ b/pkg/fasta/lib/src/kernel/kernel_builder.dart |
| @@ -0,0 +1,114 @@ |
| +// Copyright (c) 2016, 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. |
| + |
| +library fasta.kernel_builder; |
| + |
| +export 'kernel_class_builder.dart' show |
| + KernelClassBuilder; |
| + |
| +export 'kernel_enum_builder.dart' show |
| + KernelEnumBuilder; |
| + |
| +export 'kernel_field_builder.dart' show |
| + KernelFieldBuilder; |
| + |
| +export 'kernel_formal_parameter_builder.dart' show |
| + KernelFormalParameterBuilder; |
| + |
| +export 'kernel_function_type_alias_builder.dart' show |
| + KernelFunctionTypeAliasBuilder; |
| + |
| +export 'kernel_interface_type_builder.dart' show |
| + KernelInterfaceTypeBuilder; |
| + |
| +export 'kernel_library_builder.dart' show |
| + KernelLibraryBuilder; |
| + |
| +export 'kernel_mixin_application_builder.dart' show |
| + KernelMixinApplicationBuilder; |
| + |
| +export 'kernel_named_mixin_application_builder.dart' show |
| + KernelNamedMixinApplicationBuilder; |
| + |
| +export 'kernel_procedure_builder.dart' show |
| + KernelConstructorBuilder, |
| + KernelFunctionBuilder, |
| + KernelProcedureBuilder; |
| + |
| +export 'kernel_type_builder.dart' show |
| + KernelTypeBuilder; |
| + |
| +export 'kernel_type_variable_builder.dart' show |
| + KernelTypeVariableBuilder; |
| + |
| +export '../builder/builder.dart'; |
| + |
| +export 'kernel_variable_builder.dart' show |
| + KernelVariableBuilder; |
| + |
| +export 'kernel_invalid_type_builder.dart' show |
| + KernelInvalidTypeBuilder; |
| + |
| +import 'package:kernel/text/ast_to_text.dart' show |
| + Printer; |
| + |
| +import 'package:kernel/ast.dart' show |
| + Class, |
| + DartType, |
| + DynamicType, |
| + Field, |
| + Library, |
| + Member, |
| + Procedure, |
| + TypeParameter; |
| + |
| +import '../errors.dart' show |
| + inputError; |
| + |
| +List<DartType> computeDefaultTypeArguments( |
| + List<TypeParameter> typeParameters, List<DartType> arguments) { |
| + if (arguments == null) { |
| + return new List<DartType>.filled( |
| + typeParameters.length, const DynamicType()); |
| + } |
| + if (arguments.length < typeParameters.length) { |
| + arguments = new List<DartType>.from(arguments); |
| + } |
| + for (int i = arguments.length; i < typeParameters.length; i++) { |
|
Johnni Winther
2017/01/18 12:42:39
Move the for loop into the then-branch above.
ahe
2017/01/18 15:21:49
Done.
|
| + arguments.add(const DynamicType()); |
| + } |
| + if (arguments.length > typeParameters.length) { |
|
Johnni Winther
2017/01/18 12:42:39
Make this an else branch of the if statement above
ahe
2017/01/18 15:21:50
Done.
|
| + return arguments.sublist(0, typeParameters.length); |
| + } else { |
| + return arguments; |
| + } |
| +} |
| + |
| +dynamic memberError(Member member, Object error, [int charOffset]) { |
| + String name = member.name?.name; |
| + if (name == "") { |
| + name = Printer.emptyNameString; |
| + } else if (name == null) { |
| + name = "<anon>"; |
| + } |
| + Library library = member.enclosingLibrary; |
| + Class cls = member.enclosingClass; |
| + String fileUri; |
| + if (member is Procedure) { |
| + fileUri = member.fileUri; |
| + } else if (member is Field) { |
| + fileUri = member.fileUri; |
| + } |
| + fileUri ??= cls?.fileUri ?? library.fileUri; |
| + Uri uri = fileUri == null ? library.importUri : Uri.base.resolve(fileUri); |
| + charOffset ??= -1; |
| + if (charOffset == -1) { |
| + charOffset = member.fileOffset ?? -1; |
| + } |
| + if (charOffset == -1) { |
| + charOffset = cls?.fileOffset ?? -1; |
| + } |
| + name = (cls == null ? "" : "${cls.name}::") + name; |
| + return inputError(uri, charOffset, "Error in $name: $error"); |
| +} |