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

Side by Side Diff: packages/analyzer/lib/src/summary/public_namespace_computer.dart

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 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
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 library analyzer.src.summary.public_namespace_visitor;
6
7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/src/summary/format.dart';
9 import 'package:analyzer/src/summary/idl.dart';
10
11 /**
12 * Compute the public namespace portion of the summary for the given [unit],
13 * which is presumed to be an unresolved AST.
14 */
15 UnlinkedPublicNamespaceBuilder computePublicNamespace(CompilationUnit unit) {
16 _PublicNamespaceVisitor visitor = new _PublicNamespaceVisitor();
17 unit.accept(visitor);
18 return new UnlinkedPublicNamespaceBuilder(
19 names: visitor.names, exports: visitor.exports, parts: visitor.parts);
20 }
21
22 /**
23 * Serialize a [Configuration] into a [UnlinkedConfigurationBuilder].
24 */
25 UnlinkedConfigurationBuilder serializeConfiguration(
26 Configuration configuration) {
27 return new UnlinkedConfigurationBuilder(
28 name: configuration.name.components.map((i) => i.name).join('.'),
29 value: configuration.value?.stringValue ?? 'true',
30 uri: configuration.uri.stringValue);
31 }
32
33 class _CombinatorEncoder extends SimpleAstVisitor<UnlinkedCombinatorBuilder> {
34 _CombinatorEncoder();
35
36 List<String> encodeNames(NodeList<SimpleIdentifier> names) =>
37 names.map((SimpleIdentifier id) => id.name).toList();
38
39 @override
40 UnlinkedCombinatorBuilder visitHideCombinator(HideCombinator node) {
41 return new UnlinkedCombinatorBuilder(hides: encodeNames(node.hiddenNames));
42 }
43
44 @override
45 UnlinkedCombinatorBuilder visitShowCombinator(ShowCombinator node) {
46 return new UnlinkedCombinatorBuilder(
47 shows: encodeNames(node.shownNames),
48 offset: node.offset,
49 end: node.end);
50 }
51 }
52
53 class _PublicNamespaceVisitor extends RecursiveAstVisitor {
54 final List<UnlinkedPublicNameBuilder> names = <UnlinkedPublicNameBuilder>[];
55 final List<UnlinkedExportPublicBuilder> exports =
56 <UnlinkedExportPublicBuilder>[];
57 final List<String> parts = <String>[];
58
59 _PublicNamespaceVisitor();
60
61 UnlinkedPublicNameBuilder addNameIfPublic(
62 String name, ReferenceKind kind, int numTypeParameters) {
63 if (isPublic(name)) {
64 UnlinkedPublicNameBuilder b = new UnlinkedPublicNameBuilder(
65 name: name, kind: kind, numTypeParameters: numTypeParameters);
66 names.add(b);
67 return b;
68 }
69 return null;
70 }
71
72 bool isPublic(String name) => !name.startsWith('_');
73
74 @override
75 visitClassDeclaration(ClassDeclaration node) {
76 UnlinkedPublicNameBuilder cls = addNameIfPublic(
77 node.name.name,
78 ReferenceKind.classOrEnum,
79 node.typeParameters?.typeParameters?.length ?? 0);
80 if (cls != null) {
81 for (ClassMember member in node.members) {
82 if (member is FieldDeclaration && member.isStatic) {
83 for (VariableDeclaration field in member.fields.variables) {
84 String name = field.name.name;
85 if (isPublic(name)) {
86 cls.members.add(new UnlinkedPublicNameBuilder(
87 name: name,
88 kind: ReferenceKind.propertyAccessor,
89 numTypeParameters: 0));
90 }
91 }
92 }
93 if (member is MethodDeclaration &&
94 member.isStatic &&
95 !member.isSetter &&
96 !member.isOperator) {
97 String name = member.name.name;
98 if (isPublic(name)) {
99 cls.members.add(new UnlinkedPublicNameBuilder(
100 name: name,
101 kind: member.isGetter
102 ? ReferenceKind.propertyAccessor
103 : ReferenceKind.method,
104 numTypeParameters:
105 member.typeParameters?.typeParameters?.length ?? 0));
106 }
107 }
108 if (member is ConstructorDeclaration && member.name != null) {
109 String name = member.name.name;
110 if (isPublic(name)) {
111 cls.members.add(new UnlinkedPublicNameBuilder(
112 name: name,
113 kind: ReferenceKind.constructor,
114 numTypeParameters: 0));
115 }
116 }
117 }
118 }
119 }
120
121 @override
122 visitClassTypeAlias(ClassTypeAlias node) {
123 addNameIfPublic(node.name.name, ReferenceKind.classOrEnum,
124 node.typeParameters?.typeParameters?.length ?? 0);
125 }
126
127 @override
128 visitEnumDeclaration(EnumDeclaration node) {
129 UnlinkedPublicNameBuilder enm =
130 addNameIfPublic(node.name.name, ReferenceKind.classOrEnum, 0);
131 if (enm != null) {
132 enm.members.add(new UnlinkedPublicNameBuilder(
133 name: 'values',
134 kind: ReferenceKind.propertyAccessor,
135 numTypeParameters: 0));
136 for (EnumConstantDeclaration enumConstant in node.constants) {
137 String name = enumConstant.name.name;
138 if (isPublic(name)) {
139 enm.members.add(new UnlinkedPublicNameBuilder(
140 name: name,
141 kind: ReferenceKind.propertyAccessor,
142 numTypeParameters: 0));
143 }
144 }
145 }
146 }
147
148 @override
149 visitExportDirective(ExportDirective node) {
150 exports.add(new UnlinkedExportPublicBuilder(
151 uri: node.uri.stringValue,
152 combinators: node.combinators
153 .map((Combinator c) => c.accept(new _CombinatorEncoder()))
154 .toList(),
155 configurations:
156 node.configurations.map(serializeConfiguration).toList()));
157 }
158
159 @override
160 visitFunctionDeclaration(FunctionDeclaration node) {
161 String name = node.name.name;
162 if (node.isSetter) {
163 name += '=';
164 }
165 addNameIfPublic(
166 name,
167 node.isGetter || node.isSetter
168 ? ReferenceKind.topLevelPropertyAccessor
169 : ReferenceKind.topLevelFunction,
170 node.functionExpression.typeParameters?.typeParameters?.length ?? 0);
171 }
172
173 @override
174 visitFunctionTypeAlias(FunctionTypeAlias node) {
175 addNameIfPublic(node.name.name, ReferenceKind.typedef,
176 node.typeParameters?.typeParameters?.length ?? 0);
177 }
178
179 @override
180 visitPartDirective(PartDirective node) {
181 parts.add(node.uri.stringValue);
182 }
183
184 @override
185 visitVariableDeclaration(VariableDeclaration node) {
186 String name = node.name.name;
187 addNameIfPublic(name, ReferenceKind.topLevelPropertyAccessor, 0);
188 if (!node.isFinal && !node.isConst) {
189 addNameIfPublic('$name=', ReferenceKind.topLevelPropertyAccessor, 0);
190 }
191 }
192 }
OLDNEW
« no previous file with comments | « packages/analyzer/lib/src/summary/pub_summary.dart ('k') | packages/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698