Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(167)

Side by Side Diff: pkg/analysis_server/tool/spec/codegen_matchers.dart

Issue 725143004: Format and sort analyzer and analysis_server packages. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, 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 /** 5 /**
6 * Code generation for the file "matchers.dart". 6 * Code generation for the file "matchers.dart".
7 */ 7 */
8 library codegen.matchers; 8 library codegen.matchers;
9 9
10 import 'dart:convert'; 10 import 'dart:convert';
11 11
12 import 'api.dart'; 12 import 'api.dart';
13 import 'codegen_tools.dart'; 13 import 'codegen_tools.dart';
14 import 'from_html.dart'; 14 import 'from_html.dart';
15 import 'implied_types.dart'; 15 import 'implied_types.dart';
16 import 'to_html.dart'; 16 import 'to_html.dart';
17 17
18 final GeneratedFile target =
19 new GeneratedFile('../../test/integration/protocol_matchers.dart', () {
20 CodegenMatchersVisitor visitor = new CodegenMatchersVisitor(readApi());
21 return visitor.collectCode(visitor.visitApi);
22 });
23
24 /**
25 * Translate spec_input.html into protocol_matchers.dart.
26 */
27 main() {
28 target.generate();
29 }
30
18 class CodegenMatchersVisitor extends HierarchicalApiVisitor with CodeGenerator { 31 class CodegenMatchersVisitor extends HierarchicalApiVisitor with CodeGenerator {
19 /** 32 /**
20 * Visitor used to produce doc comments. 33 * Visitor used to produce doc comments.
21 */ 34 */
22 final ToHtmlVisitor toHtmlVisitor; 35 final ToHtmlVisitor toHtmlVisitor;
23 36
24 /** 37 /**
25 * Short human-readable string describing the context of the matcher being 38 * Short human-readable string describing the context of the matcher being
26 * created. 39 * created.
27 */ 40 */
(...skipping 21 matching lines...) Expand all
49 write('final Matcher ${camelJoin(['is', impliedType.camelName])} = '); 62 write('final Matcher ${camelJoin(['is', impliedType.camelName])} = ');
50 if (impliedType.type == null) { 63 if (impliedType.type == null) {
51 write('isNull'); 64 write('isNull');
52 } else { 65 } else {
53 visitTypeDecl(impliedType.type); 66 visitTypeDecl(impliedType.type);
54 } 67 }
55 writeln(';'); 68 writeln(';');
56 writeln(); 69 writeln();
57 } 70 }
58 71
72 /**
73 * Generate a map describing the given set of fields, for use as the
74 * 'requiredFields' or 'optionalFields' argument to the [MatchesJsonObject]
75 * constructor.
76 */
77 void outputObjectFields(Iterable<TypeObjectField> fields) {
78 if (fields.isEmpty) {
79 write('null');
80 return;
81 }
82 writeln('{');
83 indent(() {
84 bool commaNeeded = false;
85 for (TypeObjectField field in fields) {
86 if (commaNeeded) {
87 writeln(',');
88 }
89 write('${JSON.encode(field.name)}: ');
90 if (field.value != null) {
91 write('equals(${JSON.encode(field.value)})');
92 } else {
93 visitTypeDecl(field.type);
94 }
95 commaNeeded = true;
96 }
97 writeln();
98 });
99 write('}');
100 }
101
59 @override 102 @override
60 visitApi() { 103 visitApi() {
61 outputHeader(); 104 outputHeader();
62 writeln(); 105 writeln();
63 writeln('/**'); 106 writeln('/**');
64 writeln(' * Matchers for data types defined in the analysis server API'); 107 writeln(' * Matchers for data types defined in the analysis server API');
65 writeln(' */'); 108 writeln(' */');
66 writeln('library test.integration.protocol.matchers;'); 109 writeln('library test.integration.protocol.matchers;');
67 writeln(); 110 writeln();
68 writeln("import 'package:unittest/unittest.dart';"); 111 writeln("import 'package:unittest/unittest.dart';");
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 write(', '); 149 write(', ');
107 visitTypeDecl(typeMap.valueType); 150 visitTypeDecl(typeMap.valueType);
108 write(')'); 151 write(')');
109 } 152 }
110 153
111 @override 154 @override
112 void visitTypeObject(TypeObject typeObject) { 155 void visitTypeObject(TypeObject typeObject) {
113 writeln('new LazyMatcher(() => new MatchesJsonObject('); 156 writeln('new LazyMatcher(() => new MatchesJsonObject(');
114 indent(() { 157 indent(() {
115 write('${JSON.encode(context)}, '); 158 write('${JSON.encode(context)}, ');
116 Iterable<TypeObjectField> requiredFields = typeObject.fields.where( 159 Iterable<TypeObjectField> requiredFields =
117 (TypeObjectField field) => !field.optional); 160 typeObject.fields.where((TypeObjectField field) => !field.optional);
118 outputObjectFields(requiredFields); 161 outputObjectFields(requiredFields);
119 List<TypeObjectField> optionalFields = typeObject.fields.where( 162 List<TypeObjectField> optionalFields =
120 (TypeObjectField field) => field.optional).toList(); 163 typeObject.fields.where((TypeObjectField field) => field.optional).toL ist();
121 if (optionalFields.isNotEmpty) { 164 if (optionalFields.isNotEmpty) {
122 write(', optionalFields: '); 165 write(', optionalFields: ');
123 outputObjectFields(optionalFields); 166 outputObjectFields(optionalFields);
124 } 167 }
125 }); 168 });
126 write('))'); 169 write('))');
127 } 170 }
128 171
129 /**
130 * Generate a map describing the given set of fields, for use as the
131 * 'requiredFields' or 'optionalFields' argument to the [MatchesJsonObject]
132 * constructor.
133 */
134 void outputObjectFields(Iterable<TypeObjectField> fields) {
135 if (fields.isEmpty) {
136 write('null');
137 return;
138 }
139 writeln('{');
140 indent(() {
141 bool commaNeeded = false;
142 for (TypeObjectField field in fields) {
143 if (commaNeeded) {
144 writeln(',');
145 }
146 write('${JSON.encode(field.name)}: ');
147 if (field.value != null) {
148 write('equals(${JSON.encode(field.value)})');
149 } else {
150 visitTypeDecl(field.type);
151 }
152 commaNeeded = true;
153 }
154 writeln();
155 });
156 write('}');
157 }
158
159 @override 172 @override
160 void visitTypeReference(TypeReference typeReference) { 173 void visitTypeReference(TypeReference typeReference) {
161 String typeName = typeReference.typeName; 174 String typeName = typeReference.typeName;
162 if (typeName == 'long') { 175 if (typeName == 'long') {
163 typeName = 'int'; 176 typeName = 'int';
164 } 177 }
165 write(camelJoin(['is', typeName])); 178 write(camelJoin(['is', typeName]));
166 } 179 }
167 180
168 @override 181 @override
169 void visitTypeUnion(TypeUnion typeUnion) { 182 void visitTypeUnion(TypeUnion typeUnion) {
170 bool commaNeeded = false; 183 bool commaNeeded = false;
171 write('isOneOf(['); 184 write('isOneOf([');
172 for (TypeDecl choice in typeUnion.choices) { 185 for (TypeDecl choice in typeUnion.choices) {
173 if (commaNeeded) { 186 if (commaNeeded) {
174 write(', '); 187 write(', ');
175 } 188 }
176 visitTypeDecl(choice); 189 visitTypeDecl(choice);
177 commaNeeded = true; 190 commaNeeded = true;
178 } 191 }
179 write('])'); 192 write('])');
180 } 193 }
181 } 194 }
182
183 final GeneratedFile target = new GeneratedFile(
184 '../../test/integration/protocol_matchers.dart', () {
185 CodegenMatchersVisitor visitor = new CodegenMatchersVisitor(readApi());
186 return visitor.collectCode(visitor.visitApi);
187 });
188
189 /**
190 * Translate spec_input.html into protocol_matchers.dart.
191 */
192 main() {
193 target.generate();
194 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/tool/spec/codegen_java_types.dart ('k') | pkg/analysis_server/tool/spec/codegen_tools.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698