| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:convert'; | 5 import 'dart:convert'; |
| 6 | 6 |
| 7 import 'package:analyzer/src/codegen/tools.dart'; | 7 import 'package:analyzer/src/codegen/tools.dart'; |
| 8 import 'package:front_end/src/codegen/tools.dart'; | 8 import 'package:front_end/src/codegen/tools.dart'; |
| 9 import 'package:html/dom.dart' as dom; | 9 import 'package:html/dom.dart' as dom; |
| 10 import 'package:path/path.dart' as path; |
| 10 | 11 |
| 11 import 'api.dart'; | 12 import 'api.dart'; |
| 12 import 'codegen_dart.dart'; | 13 import 'codegen_dart.dart'; |
| 13 import 'from_html.dart'; | 14 import 'from_html.dart'; |
| 14 import 'implied_types.dart'; | 15 import 'implied_types.dart'; |
| 15 import 'to_html.dart'; | 16 import 'to_html.dart'; |
| 16 | 17 |
| 17 /** | 18 /** |
| 18 * Special flags that need to be inserted into the declaration of the Element | 19 * Special flags that need to be inserted into the declaration of the Element |
| 19 * class. | 20 * class. |
| 20 */ | 21 */ |
| 21 const Map<String, String> specialElementFlags = const { | 22 const Map<String, String> specialElementFlags = const { |
| 22 'abstract': '0x01', | 23 'abstract': '0x01', |
| 23 'const': '0x02', | 24 'const': '0x02', |
| 24 'final': '0x04', | 25 'final': '0x04', |
| 25 'static': '0x08', | 26 'static': '0x08', |
| 26 'private': '0x10', | 27 'private': '0x10', |
| 27 'deprecated': '0x20' | 28 'deprecated': '0x20' |
| 28 }; | 29 }; |
| 29 | 30 |
| 30 final GeneratedFile target = | 31 final GeneratedFile target = |
| 31 new GeneratedFile('lib/protocol/protocol_generated.dart', (String pkgPath) { | 32 new GeneratedFile('lib/protocol/protocol_generated.dart', (String pkgPath) { |
| 32 CodegenProtocolVisitor visitor = new CodegenProtocolVisitor(readApi(pkgPath)); | 33 CodegenProtocolVisitor visitor = |
| 34 new CodegenProtocolVisitor(path.basename(pkgPath), readApi(pkgPath)); |
| 33 return visitor.collectCode(visitor.visitApi); | 35 return visitor.collectCode(visitor.visitApi); |
| 34 }); | 36 }); |
| 35 | 37 |
| 36 /** | 38 /** |
| 37 * Callback type used to represent arbitrary code generation. | 39 * Callback type used to represent arbitrary code generation. |
| 38 */ | 40 */ |
| 39 typedef void CodegenCallback(); | 41 typedef void CodegenCallback(); |
| 40 | 42 |
| 41 typedef String FromJsonSnippetCallback(String jsonPath, String json); | 43 typedef String FromJsonSnippetCallback(String jsonPath, String json); |
| 42 | 44 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 59 }; | 61 }; |
| 60 | 62 |
| 61 /** | 63 /** |
| 62 * The disclaimer added to the documentation comment for each of the classes | 64 * The disclaimer added to the documentation comment for each of the classes |
| 63 * that are generated. | 65 * that are generated. |
| 64 */ | 66 */ |
| 65 static const String disclaimer = | 67 static const String disclaimer = |
| 66 'Clients may not extend, implement or mix-in this class.'; | 68 'Clients may not extend, implement or mix-in this class.'; |
| 67 | 69 |
| 68 /** | 70 /** |
| 71 * The name of the package into which code is being generated. |
| 72 */ |
| 73 final String packageName; |
| 74 |
| 75 /** |
| 69 * Visitor used to produce doc comments. | 76 * Visitor used to produce doc comments. |
| 70 */ | 77 */ |
| 71 final ToHtmlVisitor toHtmlVisitor; | 78 final ToHtmlVisitor toHtmlVisitor; |
| 72 | 79 |
| 73 /** | 80 /** |
| 74 * Types implied by the API. This includes types explicitly named in the | 81 * Types implied by the API. This includes types explicitly named in the |
| 75 * API as well as those implied by the definitions of requests, responses, | 82 * API as well as those implied by the definitions of requests, responses, |
| 76 * notifications, etc. | 83 * notifications, etc. |
| 77 */ | 84 */ |
| 78 final Map<String, ImpliedType> impliedTypes; | 85 final Map<String, ImpliedType> impliedTypes; |
| 79 | 86 |
| 80 CodegenProtocolVisitor(Api api) | 87 CodegenProtocolVisitor(this.packageName, Api api) |
| 81 : toHtmlVisitor = new ToHtmlVisitor(api), | 88 : toHtmlVisitor = new ToHtmlVisitor(api), |
| 82 impliedTypes = computeImpliedTypes(api), | 89 impliedTypes = computeImpliedTypes(api), |
| 83 super(api) { | 90 super(api) { |
| 84 codeGeneratorSettings.commentLineLength = 79; | 91 codeGeneratorSettings.commentLineLength = 79; |
| 85 codeGeneratorSettings.languageName = 'dart'; | 92 codeGeneratorSettings.languageName = 'dart'; |
| 86 } | 93 } |
| 87 | 94 |
| 88 /** | 95 /** |
| 89 * Compute the code necessary to compare two objects for equality. | 96 * Compute the code necessary to compare two objects for equality. |
| 90 */ | 97 */ |
| (...skipping 1029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1120 } | 1127 } |
| 1121 } | 1128 } |
| 1122 | 1129 |
| 1123 @override | 1130 @override |
| 1124 visitApi() { | 1131 visitApi() { |
| 1125 outputHeader(year: '2017'); | 1132 outputHeader(year: '2017'); |
| 1126 writeln(); | 1133 writeln(); |
| 1127 writeln("import 'dart:convert' hide JsonDecoder;"); | 1134 writeln("import 'dart:convert' hide JsonDecoder;"); |
| 1128 writeln(); | 1135 writeln(); |
| 1129 writeln("import 'package:analyzer/src/generated/utilities_general.dart';"); | 1136 writeln("import 'package:analyzer/src/generated/utilities_general.dart';"); |
| 1130 writeln("import 'package:analyzer_plugin/protocol/protocol.dart';"); | 1137 writeln("import 'package:$packageName/protocol/protocol.dart';"); |
| 1131 writeln( | 1138 writeln( |
| 1132 "import 'package:analyzer_plugin/src/protocol/protocol_internal.dart';")
; | 1139 "import 'package:$packageName/src/protocol/protocol_internal.dart';"); |
| 1133 emitClasses(); | 1140 emitClasses(); |
| 1134 } | 1141 } |
| 1135 } | 1142 } |
| 1136 | 1143 |
| 1137 /** | 1144 /** |
| 1138 * Container for code that can be used to translate a data type from JSON. | 1145 * Container for code that can be used to translate a data type from JSON. |
| 1139 */ | 1146 */ |
| 1140 abstract class FromJsonCode { | 1147 abstract class FromJsonCode { |
| 1141 /** | 1148 /** |
| 1142 * Get the translation code in the form of a closure. | 1149 * Get the translation code in the form of a closure. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1274 | 1281 |
| 1275 @override | 1282 @override |
| 1276 String get asClosure => '($type value) => ${callback('value')}'; | 1283 String get asClosure => '($type value) => ${callback('value')}'; |
| 1277 | 1284 |
| 1278 @override | 1285 @override |
| 1279 bool get isIdentity => false; | 1286 bool get isIdentity => false; |
| 1280 | 1287 |
| 1281 @override | 1288 @override |
| 1282 String asSnippet(String value) => callback(value); | 1289 String asSnippet(String value) => callback(value); |
| 1283 } | 1290 } |
| OLD | NEW |