OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 dev_compiler.src.codegen.dart_codegen; | 5 library dev_compiler.src.codegen.dart_codegen; |
6 | 6 |
7 import 'dart:io' show File; | 7 import 'dart:io' show File; |
8 | 8 |
9 import 'package:analyzer/analyzer.dart' as analyzer; | 9 import 'package:analyzer/analyzer.dart' as analyzer; |
10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
11 import 'package:analyzer/src/generated/element.dart'; | 11 import 'package:analyzer/src/generated/element.dart'; |
12 import 'package:analyzer/src/generated/java_core.dart' as java_core; | 12 import 'package:analyzer/src/generated/java_core.dart' as java_core; |
13 import 'package:analyzer/src/generated/scanner.dart' show Token; | 13 import 'package:analyzer/src/generated/scanner.dart' show Token; |
14 import 'package:dart_style/dart_style.dart'; | 14 import 'package:dart_style/dart_style.dart'; |
15 import 'package:logging/logging.dart' as logger; | 15 import 'package:logging/logging.dart' as logger; |
16 import 'package:path/path.dart' as path; | 16 import 'package:path/path.dart' as path; |
17 | 17 |
| 18 import 'package:dev_compiler/devc.dart' show AbstractCompiler; |
18 import 'package:dev_compiler/src/info.dart'; | 19 import 'package:dev_compiler/src/info.dart'; |
19 import 'package:dev_compiler/src/checker/rules.dart'; | |
20 import 'package:dev_compiler/src/options.dart'; | 20 import 'package:dev_compiler/src/options.dart'; |
21 import 'package:dev_compiler/src/utils.dart' as utils; | 21 import 'package:dev_compiler/src/utils.dart' as utils; |
22 import 'ast_builder.dart'; | 22 import 'ast_builder.dart'; |
23 import 'code_generator.dart' as codegenerator; | 23 import 'code_generator.dart' as codegenerator; |
24 import 'reify_coercions.dart' | 24 import 'reify_coercions.dart' |
25 show CoercionReifier, NewTypeIdDesc, InstrumentedRuntime; | 25 show CoercionReifier, NewTypeIdDesc, InstrumentedRuntime; |
26 | 26 |
27 final _log = new logger.Logger('dev_compiler.dart_codegen'); | 27 final _log = new logger.Logger('dev_compiler.dart_codegen'); |
28 | 28 |
29 class DevCompilerRuntime extends InstrumentedRuntime { | 29 class DevCompilerRuntime extends InstrumentedRuntime { |
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 output(id.name); | 378 output(id.name); |
379 return null; | 379 return null; |
380 } | 380 } |
381 | 381 |
382 void generate() { | 382 void generate() { |
383 visitCompilationUnit(unit); | 383 visitCompilationUnit(unit); |
384 } | 384 } |
385 } | 385 } |
386 | 386 |
387 class DartGenerator extends codegenerator.CodeGenerator { | 387 class DartGenerator extends codegenerator.CodeGenerator { |
388 final CompilerOptions options; | |
389 TypeRules _rules; | |
390 final DevCompilerRuntime _runtime = new DevCompilerRuntime(); | 388 final DevCompilerRuntime _runtime = new DevCompilerRuntime(); |
391 | 389 |
392 DartGenerator(String outDir, Uri root, TypeRules rules, this.options) | 390 DartGenerator(AbstractCompiler compiler) : super(compiler); |
393 : _rules = rules, | |
394 super(outDir, root, rules); | |
395 | 391 |
396 Set<LibraryElement> computeExtraImports(Map<Identifier, NewTypeIdDesc> ids) { | 392 Set<LibraryElement> computeExtraImports(Map<Identifier, NewTypeIdDesc> ids) { |
397 var imports = new Set<LibraryElement>(); | 393 var imports = new Set<LibraryElement>(); |
398 void process(Identifier id, NewTypeIdDesc desc) { | 394 void process(Identifier id, NewTypeIdDesc desc) { |
399 if (_identifierNeedsQualification(id, desc)) { | 395 if (_identifierNeedsQualification(id, desc)) { |
400 var library = desc.importedFrom; | 396 var library = desc.importedFrom; |
401 if (utils.isDartPrivateLibrary(library)) { | 397 if (utils.isDartPrivateLibrary(library)) { |
402 _log.severe("Dropping import of private library ${library}\n"); | 398 _log.severe("Dropping import of private library ${library}\n"); |
403 return; | 399 return; |
404 } | 400 } |
405 imports.add(library); | 401 imports.add(library); |
406 } | 402 } |
407 } | 403 } |
408 ids.forEach(process); | 404 ids.forEach(process); |
409 return imports; | 405 return imports; |
410 } | 406 } |
411 | 407 |
412 String generateLibrary(LibraryUnit library, LibraryInfo info) { | 408 String generateLibrary(LibraryUnit library, LibraryInfo info) { |
413 var r = new CoercionReifier(library, rules, options, _runtime); | 409 var r = new CoercionReifier(library, compiler, _runtime); |
414 var ids = r.reify(); | 410 var ids = r.reify(); |
415 var extraImports = computeExtraImports(ids); | 411 var extraImports = computeExtraImports(ids); |
416 | 412 |
417 for (var unit in library.partsThenLibrary) { | 413 for (var unit in library.partsThenLibrary) { |
418 var libraryDir = makeOutputDirectory(info, unit); | 414 var libraryDir = makeOutputDirectory(info, unit); |
419 var uri = unit.element.source.uri; | 415 var uri = unit.element.source.uri; |
420 _log.fine("Generating unit $uri"); | 416 _log.fine("Generating unit $uri"); |
421 FileWriter out = new FileWriter( | 417 FileWriter out = new FileWriter( |
422 options, path.join(libraryDir, '${uri.pathSegments.last}')); | 418 options, path.join(libraryDir, '${uri.pathSegments.last}')); |
423 var unitGen = | 419 var unitGen = |
(...skipping 17 matching lines...) Expand all Loading... |
441 void output(String s) => _out.print(s); | 437 void output(String s) => _out.print(s); |
442 void outputln(String s) => _out.println(s); | 438 void outputln(String s) => _out.println(s); |
443 | 439 |
444 void generate() { | 440 void generate() { |
445 unit.visitChildren(this); | 441 unit.visitChildren(this); |
446 } | 442 } |
447 } | 443 } |
448 | 444 |
449 // This class emits the code unchanged, for comparison purposes. | 445 // This class emits the code unchanged, for comparison purposes. |
450 class EmptyDartGenerator extends codegenerator.CodeGenerator { | 446 class EmptyDartGenerator extends codegenerator.CodeGenerator { |
451 final CompilerOptions options; | 447 EmptyDartGenerator(AbstractCompiler compiler) : super(compiler); |
452 | |
453 EmptyDartGenerator(String outDir, Uri root, TypeRules rules, this.options) | |
454 : super(outDir, root, rules); | |
455 | 448 |
456 String generateLibrary(LibraryUnit library, LibraryInfo info) { | 449 String generateLibrary(LibraryUnit library, LibraryInfo info) { |
457 for (var unit in library.partsThenLibrary) { | 450 for (var unit in library.partsThenLibrary) { |
458 var outputDir = makeOutputDirectory(info, unit); | 451 var outputDir = makeOutputDirectory(info, unit); |
459 generateUnit(unit, info, outputDir); | 452 generateUnit(unit, info, outputDir); |
460 } | 453 } |
461 return null; | 454 return null; |
462 } | 455 } |
463 | 456 |
464 void generateUnit(CompilationUnit unit, LibraryInfo info, String libraryDir) { | 457 void generateUnit(CompilationUnit unit, LibraryInfo info, String libraryDir) { |
465 var uri = unit.element.source.uri; | 458 var uri = unit.element.source.uri; |
466 _log.fine("Emitting original unit " + uri.toString()); | 459 _log.fine("Emitting original unit " + uri.toString()); |
467 FileWriter out = new FileWriter( | 460 FileWriter out = new FileWriter( |
468 options, path.join(libraryDir, '${uri.pathSegments.last}')); | 461 options, path.join(libraryDir, '${uri.pathSegments.last}')); |
469 var unitGen = new EmptyUnitGenerator(unit, out); | 462 var unitGen = new EmptyUnitGenerator(unit, out); |
470 unitGen.generate(); | 463 unitGen.generate(); |
471 out.finalize(); | 464 out.finalize(); |
472 } | 465 } |
473 } | 466 } |
OLD | NEW |