| Index: pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
|
| diff --git a/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart b/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..08bfb70f06242217929b4a6659627ca5c0c735f8
|
| --- /dev/null
|
| +++ b/pkg/analyzer_plugin/tool/spec/codegen_protocol_common.dart
|
| @@ -0,0 +1,53 @@
|
| +// 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:analyzer/src/codegen/tools.dart';
|
| +import 'package:front_end/src/codegen/tools.dart';
|
| +import 'package:path/path.dart' as path;
|
| +
|
| +import 'api.dart';
|
| +import 'codegen_dart_protocol.dart';
|
| +import 'from_html.dart';
|
| +import 'implied_types.dart';
|
| +
|
| +final GeneratedFile target =
|
| + new GeneratedFile('lib/protocol/protocol_common.dart', (String pkgPath) {
|
| + CodegenCommonVisitor visitor =
|
| + new CodegenCommonVisitor(path.basename(pkgPath), readApi(pkgPath));
|
| + return visitor.collectCode(visitor.visitApi);
|
| +});
|
| +
|
| +/**
|
| + * A visitor that produces Dart code defining the common types associated with
|
| + * the API.
|
| + */
|
| +class CodegenCommonVisitor extends CodegenProtocolVisitor {
|
| + /**
|
| + * Initialize a newly created visitor to generate code in the package with the
|
| + * given [packageName] corresponding to the types in the given [api] that are
|
| + * common to multiple protocols.
|
| + */
|
| + CodegenCommonVisitor(String packageName, Api api) : super(packageName, api);
|
| +
|
| + @override
|
| + void emitImports() {
|
| + writeln("import 'dart:convert' hide JsonDecoder;");
|
| + writeln();
|
| + writeln("import 'package:analyzer/src/generated/utilities_general.dart';");
|
| + writeln("import 'package:$packageName/protocol/protocol.dart';");
|
| + writeln(
|
| + "import 'package:$packageName/src/protocol/protocol_internal.dart';");
|
| + }
|
| +
|
| + @override
|
| + List<ImpliedType> getClassesToEmit() {
|
| + List<ImpliedType> types = impliedTypes.values.where((ImpliedType type) {
|
| + ApiNode node = type.apiNode;
|
| + return node is TypeDefinition && node.isExternal;
|
| + }).toList();
|
| + types.sort((first, second) =>
|
| + capitalize(first.camelName).compareTo(capitalize(second.camelName)));
|
| + return types;
|
| + }
|
| +}
|
|
|