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

Side by Side Diff: lib/src/info.dart

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

Powered by Google App Engine
This is Rietveld 408576698