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

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

Issue 479683005: Make more use of generated code in analysis server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 months 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 library codegen.protocol; 5 library codegen.protocol;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 8
9 import 'api.dart'; 9 import 'api.dart';
10 import 'codegen_tools.dart'; 10 import 'codegen_tools.dart';
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 writeln(); 271 writeln();
272 } 272 }
273 if (emitSpecialGetters(className)) { 273 if (emitSpecialGetters(className)) {
274 writeln(); 274 writeln();
275 } 275 }
276 emitToJsonMember(type); 276 emitToJsonMember(type);
277 writeln(); 277 writeln();
278 if (emitToRequestMember(impliedType)) { 278 if (emitToRequestMember(impliedType)) {
279 writeln(); 279 writeln();
280 } 280 }
281 if (emitToResponseMember(impliedType)) {
282 writeln();
283 }
281 if (emitSpecialMembers(className)) { 284 if (emitSpecialMembers(className)) {
282 writeln(); 285 writeln();
283 } 286 }
284 writeln('@override'); 287 writeln('@override');
285 writeln('String toString() => JSON.encode(toJson());'); 288 writeln('String toString() => JSON.encode(toJson());');
286 writeln(); 289 writeln();
287 emitObjectEqualsMember(type, className); 290 emitObjectEqualsMember(type, className);
288 writeln(); 291 writeln();
289 emitObjectHashCode(type); 292 emitObjectHashCode(type);
290 }); 293 });
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 bool emitSpecialConstructors(String className) { 341 bool emitSpecialConstructors(String className) {
339 switch (className) { 342 switch (className) {
340 case 'AnalysisError': 343 case 'AnalysisError':
341 docComment([new dom.Text( 344 docComment([new dom.Text(
342 'Construct based on error information from the analyzer engine.')]); 345 'Construct based on error information from the analyzer engine.')]);
343 writeln( 346 writeln(
344 'factory AnalysisError.fromEngine(engine.LineInfo lineInfo, engine.A nalysisError error) =>' 347 'factory AnalysisError.fromEngine(engine.LineInfo lineInfo, engine.A nalysisError error) =>'
345 ); 348 );
346 writeln(' _analysisErrorFromEngine(lineInfo, error);'); 349 writeln(' _analysisErrorFromEngine(lineInfo, error);');
347 return true; 350 return true;
351 case 'Element':
352 docComment([new dom.Text('Construct based on a value from the analyzer e ngine.')]);
353 writeln('factory Element.fromEngine(engine.Element element) =>');
354 writeln(' elementFromEngine(element);');
355 return true;
348 case 'ElementKind': 356 case 'ElementKind':
349 docComment([new dom.Text( 357 docComment([new dom.Text(
350 'Construct based on a value from the analyzer engine.')]); 358 'Construct based on a value from the analyzer engine.')]);
351 writeln('factory ElementKind.fromEngine(engine.ElementKind kind) =>'); 359 writeln('factory ElementKind.fromEngine(engine.ElementKind kind) =>');
352 writeln(' _elementKindFromEngine(kind);'); 360 writeln(' _elementKindFromEngine(kind);');
353 return true; 361 return true;
362 case 'Location':
363 docComment([new dom.Text(
364 'Construct based on an element from the analyzer engine.')]);
365 writeln('factory Location.fromElement(engine.Element element) =>');
366 writeln(' _locationFromElement(element);');
367 writeln();
368 docComment([new dom.Text('Create a Location based on an element and offs et from the analyzer engine.')]);
369 writeln('factory Location.fromOffset(engine.Element element, int offset, int length) =>');
370 writeln(' _locationFromOffset(element, offset, length);');
371 return true;
372 case 'OverriddenMember':
373 docComment([new dom.Text('Construct based on an element from the analyze r engine.')]);
374 writeln('factory OverriddenMember.fromEngine(engine.Element member) =>') ;
375 writeln(' _overriddenMemberFromEngine(member);');
376 return true;
377 case 'SearchResult':
378 docComment([new dom.Text('Construct based on a value from the search eng ine.')]);
379 writeln('factory SearchResult.fromMatch(engine.SearchMatch match) =>');
380 writeln(' searchResultFromMatch(match);');
381 return true;
382 case 'SearchResultKind':
383 docComment([new dom.Text('Construct based on a value from the search eng ine.')]);
384 writeln('factory SearchResultKind.fromEngine(engine.MatchKind kind) =>') ;
385 writeln(' _searchResultKindFromEngine(kind);');
386 return true;
354 case 'SourceEdit': 387 case 'SourceEdit':
355 docComment([new dom.Text('Construct based on a SourceRange.')]); 388 docComment([new dom.Text('Construct based on a SourceRange.')]);
356 writeln( 389 writeln(
357 'SourceEdit.range(engine.SourceRange range, String replacement, {Str ing id})'); 390 'SourceEdit.range(engine.SourceRange range, String replacement, {Str ing id})');
358 writeln(' : this(range.offset, range.length, replacement, id: id);'); 391 writeln(' : this(range.offset, range.length, replacement, id: id);');
359 return true; 392 return true;
360 default: 393 default:
361 return false; 394 return false;
362 } 395 }
363 } 396 }
364 397
365 /** 398 /**
366 * If the class named [className] requires special getters, emit them and 399 * If the class named [className] requires special getters, emit them and
367 * return true. 400 * return true.
368 */ 401 */
369 bool emitSpecialGetters(String className) { 402 bool emitSpecialGetters(String className) {
370 switch (className) { 403 switch (className) {
371 case 'Element': 404 case 'Element':
372 for (String name in specialElementFlags.keys) { 405 for (String name in specialElementFlags.keys) {
373 String flag = 'FLAG_${name.toUpperCase()}'; 406 String flag = 'FLAG_${name.toUpperCase()}';
374 writeln('bool get ${camelJoin(['is', name])} => (flags & $flag) != 0;' 407 writeln('bool get ${camelJoin(['is', name])} => (flags & $flag) != 0;'
375 ); 408 );
376 } 409 }
(...skipping 11 matching lines...) Expand all
388 * If the class named [className] requires special members, emit them and 421 * If the class named [className] requires special members, emit them and
389 * return true. 422 * return true.
390 */ 423 */
391 bool emitSpecialMembers(String className) { 424 bool emitSpecialMembers(String className) {
392 switch (className) { 425 switch (className) {
393 case 'SourceEdit': 426 case 'SourceEdit':
394 docComment([new dom.Text( 427 docComment([new dom.Text(
395 'Get the result of applying the edit to the given [code].')]); 428 'Get the result of applying the edit to the given [code].')]);
396 writeln('String apply(String code) => _applyEdit(code, this);'); 429 writeln('String apply(String code) => _applyEdit(code, this);');
397 return true; 430 return true;
431 case 'SourceFileEdit':
432 docComment([new dom.Text('Adds the given [Edit] to the list.')]);
433 writeln('void add(SourceEdit edit) => _addEditForSource(this, edit);');
434 writeln();
435 docComment([new dom.Text('Adds the given [Edit]s.')]);
436 writeln('void addAll(Iterable<SourceEdit> edits) =>');
437 writeln(' _addAllEditsForSource(this, edits);');
438 return true;
398 default: 439 default:
399 return false; 440 return false;
400 } 441 }
401 } 442 }
402 443
403 /** 444 /**
404 * Emit the constructor for an object class. 445 * Emit the constructor for an object class.
405 */ 446 */
406 void emitObjectConstructor(TypeObject type, String className) { 447 void emitObjectConstructor(TypeObject type, String className) {
407 List<String> args = <String>[]; 448 List<String> args = <String>[];
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 Request).longMethod); 506 Request).longMethod);
466 writeln('return new Request(id, $methodString, toJson());'); 507 writeln('return new Request(id, $methodString, toJson());');
467 }); 508 });
468 writeln('}'); 509 writeln('}');
469 return true; 510 return true;
470 } 511 }
471 return false; 512 return false;
472 } 513 }
473 514
474 /** 515 /**
516 * Emit the toResponse() code for a class, if appropriate. Returns true if
517 * code was emitted.
518 */
519 bool emitToResponseMember(ImpliedType impliedType) {
520 if (impliedType.kind == 'requestResult') {
521 writeln('Response toResponse(String id) {');
522 indent(() {
523 writeln('return new Response(id, result: toJson());');
524 });
525 writeln('}');
526 return true;
527 }
528 return false;
529 }
530
531 /**
475 * Emit the operator== code for an object class. 532 * Emit the operator== code for an object class.
476 */ 533 */
477 void emitObjectEqualsMember(TypeObject type, String className) { 534 void emitObjectEqualsMember(TypeObject type, String className) {
478 writeln('@override'); 535 writeln('@override');
479 writeln('bool operator==(other) {'); 536 writeln('bool operator==(other) {');
480 indent(() { 537 indent(() {
481 writeln('if (other is $className) {'); 538 writeln('if (other is $className) {');
482 indent(() { 539 indent(() {
483 var comparisons = <String>[]; 540 var comparisons = <String>[];
484 for (TypeObjectField field in type.fields) { 541 for (TypeObjectField field in type.fields) {
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 CodegenProtocolVisitor visitor = new CodegenProtocolVisitor(readApi()); 1033 CodegenProtocolVisitor visitor = new CodegenProtocolVisitor(readApi());
977 return visitor.collectCode(visitor.visitApi); 1034 return visitor.collectCode(visitor.visitApi);
978 }); 1035 });
979 1036
980 /** 1037 /**
981 * Translate spec_input.html into protocol_matchers.dart. 1038 * Translate spec_input.html into protocol_matchers.dart.
982 */ 1039 */
983 main() { 1040 main() {
984 target.generate(); 1041 target.generate();
985 } 1042 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698