| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 /// Defines static information collected by the type checker and used later by | |
| 6 /// emitters to generate code. | |
| 7 | |
| 8 import 'package:analyzer/dart/ast/ast.dart'; | |
| 9 import 'package:analyzer/dart/element/element.dart'; | |
| 10 import 'package:analyzer/src/dart/ast/ast.dart'; | |
| 11 import 'package:analyzer/src/dart/ast/utilities.dart'; | |
| 12 import 'package:analyzer/src/generated/parser.dart'; | |
| 13 | |
| 14 import 'utils.dart' as utils; | |
| 15 | |
| 16 import 'package:analyzer/src/task/strong/info.dart'; | |
| 17 export 'package:analyzer/src/task/strong/info.dart'; | |
| 18 | |
| 19 /// Represents a summary of the results collected by running the program | |
| 20 /// checker. | |
| 21 class CheckerResults { | |
| 22 final List<LibraryInfo> libraries; | |
| 23 final bool failure; | |
| 24 | |
| 25 CheckerResults(this.libraries, this.failure); | |
| 26 } | |
| 27 | |
| 28 /// Computed information about each library. | |
| 29 class LibraryInfo { | |
| 30 /// Canonical name of the library. This is unfortunately not derived from the | |
| 31 /// library directive as it doesn't have any meaningful rules enforced. | |
| 32 /// Instead, this is inferred from the path to the file defining the library. | |
| 33 final String name; | |
| 34 | |
| 35 /// Corresponding analyzer element. | |
| 36 final LibraryElement library; | |
| 37 | |
| 38 LibraryInfo(library) | |
| 39 : library = library, | |
| 40 name = utils.canonicalLibraryName(library); | |
| 41 } | |
| 42 | |
| 43 class LibraryUnit { | |
| 44 final CompilationUnit library; | |
| 45 final List<CompilationUnit> parts; | |
| 46 | |
| 47 LibraryUnit(this.library, this.parts); | |
| 48 | |
| 49 Iterable<CompilationUnit> get libraryThenParts sync* { | |
| 50 yield library; | |
| 51 yield* parts; | |
| 52 } | |
| 53 | |
| 54 Iterable<CompilationUnit> get partsThenLibrary sync* { | |
| 55 yield* parts; | |
| 56 yield library; | |
| 57 } | |
| 58 | |
| 59 /// Creates a clone of this library's AST. | |
| 60 LibraryUnit clone() { | |
| 61 return new LibraryUnit( | |
| 62 _cloneUnit(library), parts.map(_cloneUnit).toList(growable: false)); | |
| 63 } | |
| 64 | |
| 65 static CompilationUnit _cloneUnit(CompilationUnit oldNode) { | |
| 66 var newNode = oldNode.accept(new _AstCloner()); | |
| 67 ResolutionCopier.copyResolutionData(oldNode, newNode); | |
| 68 return newNode; | |
| 69 } | |
| 70 } | |
| 71 | |
| 72 class _AstCloner extends AstCloner { | |
| 73 void _cloneProperties(AstNode clone, AstNode node) { | |
| 74 if (clone != null) { | |
| 75 CoercionInfo.set(clone, CoercionInfo.get(node)); | |
| 76 DynamicInvoke.set(clone, DynamicInvoke.get(node)); | |
| 77 } | |
| 78 } | |
| 79 | |
| 80 @override | |
| 81 AstNode cloneNode(AstNode node) { | |
| 82 var clone = super.cloneNode(node); | |
| 83 _cloneProperties(clone, node); | |
| 84 return clone; | |
| 85 } | |
| 86 | |
| 87 @override | |
| 88 List cloneNodeList(List list) { | |
| 89 var clone = super.cloneNodeList(list); | |
| 90 for (int i = 0, len = list.length; i < len; i++) { | |
| 91 _cloneProperties(clone[i], list[i]); | |
| 92 } | |
| 93 return clone; | |
| 94 } | |
| 95 | |
| 96 // TODO(jmesserly): ResolutionCopier is not copying this yet. | |
| 97 @override | |
| 98 BlockFunctionBody visitBlockFunctionBody(BlockFunctionBody node) { | |
| 99 var clone = super.visitBlockFunctionBody(node); | |
| 100 (clone as FunctionBodyImpl).localVariableInfo = | |
| 101 (node as FunctionBodyImpl).localVariableInfo; | |
| 102 return clone; | |
| 103 } | |
| 104 | |
| 105 @override | |
| 106 ExpressionFunctionBody visitExpressionFunctionBody( | |
| 107 ExpressionFunctionBody node) { | |
| 108 var clone = super.visitExpressionFunctionBody(node); | |
| 109 (clone as FunctionBodyImpl).localVariableInfo = | |
| 110 (node as FunctionBodyImpl).localVariableInfo; | |
| 111 return clone; | |
| 112 } | |
| 113 } | |
| OLD | NEW |