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

Side by Side Diff: pkg/analyzer2dart/lib/src/element_converter.dart

Issue 548253003: First end-to-end capability in analyzer2dart. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 3 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
« no previous file with comments | « pkg/analyzer2dart/lib/src/driver.dart ('k') | pkg/analyzer2dart/lib/src/tree_shaker.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 /// Convertion of elements between the analyzer element model and the dart2js
6 /// element model.
7
8 library analyzer2dart.element_converter;
9
10 import 'package:compiler/implementation/elements/elements.dart' as dart2js;
11 import 'package:compiler/implementation/elements/modelx.dart' as modelx;
12 import 'package:compiler/implementation/util/util.dart' as util;
13 import 'package:compiler/implementation/dart_types.dart';
14 import 'package:analyzer/src/generated/element.dart' as analyzer;
15
16 class ElementConverter {
17 /// Map from analyzer elements to their equivalent dart2js elements.
18 Map<analyzer.Element, dart2js.Element> conversionMap =
19 <analyzer.Element, dart2js.Element>{};
20
21 /// Map from dart2js elements to their equivalent analyzer elements.
22 Map<dart2js.Element, analyzer.Element> inversionMap =
23 <dart2js.Element, analyzer.Element>{};
24
25 ElementConverterVisitor visitor;
26
27 ElementConverter() {
28 visitor = new ElementConverterVisitor(this);
29 }
30
31 dart2js.Element convertElement(analyzer.Element input) {
32 return conversionMap.putIfAbsent(input, () {
33 dart2js.Element output = convertElementInternal(input);
34 inversionMap[output] = input;
35 return output;
36 });
37 }
38
39 analyzer.Element invertElement(dart2js.Element input) {
40 return inversionMap[input];
41 }
42
43 dart2js.Element convertElementInternal(analyzer.Element input) {
44 dart2js.Element output = input.accept(visitor);
45 if (output != null) return output;
46 throw new UnsupportedError(
47 "Conversion of $input (${input.runtimeType}) is not supported.");
48 }
49 }
50
51 /// Visitor that converts analyzer elements to dart2js elements.
52 class ElementConverterVisitor
53 extends analyzer.SimpleElementVisitor<dart2js.Element> {
54 final ElementConverter converter;
55
56 ElementConverterVisitor(this.converter);
57
58 @override
59 dart2js.LibraryElement visitLibraryElement(analyzer.LibraryElement input) {
60 return new LibraryElementY(converter, input);
61 }
62
63 @override
64 dart2js.FunctionElement visitFunctionElement(analyzer.FunctionElement input) {
65 return new TopLevelFunctionElementY(converter, input);
66 }
67 }
68
69 /// Base [dart2js.Element] implementation for converted analyzer elements.
70 class ElementY extends dart2js.Element {
71 final ElementConverter converter;
72 final analyzer.Element element;
73
74 @override
75 String get name => element.name;
76
77 ElementY(this.converter, this.element);
78
79 @override
80 dart2js.LibraryElement get implementationLibrary => library;
81
82 @override
83 dart2js.Element get origin => this;
84
85 @override
86 dart2js.Element get patch => null;
87
88 @override
89 dart2js.Element get declaration => this;
90
91 @override
92 dart2js.Element get implementation => this;
93
94 @override
95 bool get isPatch => false;
96
97 @override
98 bool get isPatched => false;
99
100 @override
101 dart2js.LibraryElement get library {
102 return converter.convertElement(element.library);
103 }
104
105 unsupported(String method) {
106 throw new UnsupportedError(
107 "'$method' is unsupported on $this ($runtimeType)");
108 }
109
110
111 @override
112 bool get isFinal => unsupported('isFinal');
113
114 @override
115 bool get isStatic => unsupported('isStatic');
116
117 @override
118 bool isForeign(_) => unsupported('isForeign');
119
120 @override
121 bool get impliesType => unsupported('impliesType');
122
123 @override
124 bool get isOperator => unsupported('impliesType');
125
126 @override
127 get position => unsupported('position');
128
129 @override
130 computeType(_) => unsupported('computeType');
131
132 @override
133 get enclosingElement => unsupported('enclosingElement');
134
135 @override
136 accept(_) => unsupported('accept');
137
138 @override
139 void addMetadata(_) => unsupported('addMetadata');
140
141 @override
142 get analyzableElement => unsupported('analyzableElement');
143
144 @override
145 asFunctionElement() => unsupported('asFunctionElement');
146
147 @override
148 buildScope() => unsupported('buildScope');
149
150 @override
151 get compilationUnit => unsupported('compilationUnit');
152
153 @override
154 get contextClass => unsupported('contextClass');
155
156 @override
157 void diagnose(context, listener) => unsupported('diagnose');
158
159 @override
160 get enclosingClass => unsupported('enclosingClass');
161
162 @override
163 get enclosingClassOrCompilationUnit {
164 return unsupported('enclosingClassOrCompilationUnit');
165 }
166
167 @override
168 String get fixedBackendName => unsupported('fixedBackendName');
169
170 @override
171 bool get hasFixedBackendName => unsupported('hasFixedBackendName');
172
173 @override
174 bool get isAbstract => unsupported('isAbstract');
175
176 @override
177 bool get isAssignable => unsupported('isAssignable');
178
179 @override
180 bool get isClassMember => unsupported('isClassMember');
181
182 @override
183 bool get isClosure => unsupported('isClosure');
184
185 @override
186 bool get isConst => unsupported('isConst');
187
188 @override
189 bool get isDeclaration => unsupported('isDeclaration');
190
191 @override
192 bool get isDeferredLoaderGetter => unsupported('isDeferredLoaderGetter');
193
194 @override
195 bool get isFactoryConstructor => unsupported('isFactoryConstructor');
196
197 @override
198 bool get isForwardingConstructor => unsupported('isForwardingConstructor');
199
200 @override
201 bool get isImplementation => unsupported('isImplementation');
202
203 @override
204 bool get isInjected => unsupported('isInjected');
205
206 @override
207 bool get isInstanceMember => unsupported('isInstanceMember');
208
209 @override
210 bool get isMixinApplication => unsupported('isMixinApplication');
211
212 @override
213 bool get isNative => unsupported('isNative');
214
215 @override
216 bool get isSynthesized => unsupported('isSynthesized');
217
218 @override
219 bool get isTopLevel => unsupported('isTopLevel');
220
221 @override
222 get kind => unsupported('kind');
223
224 @override
225 get metadata => unsupported('metadata');
226
227 @override
228 get outermostEnclosingMemberOrTopLevel {
229 return unsupported('outermostEnclosingMemberOrTopLevel');
230 }
231
232 @override
233 void setFixedBackendName(String name) => unsupported('setFixedBackendName');
234
235 @override
236 void setNative(String name) => unsupported('setNative');
237 }
238
239 class LibraryElementY extends ElementY implements dart2js.LibraryElement {
240 analyzer.LibraryElement get element => super.element;
241
242 @override
243 dart2js.ElementKind get kind => dart2js.ElementKind.LIBRARY;
244
245 // TODO(johnniwinther): Ensure the correct semantics of this.
246 @override
247 bool get isInternalLibrary => isPlatformLibrary && element.isPrivate;
248
249 // TODO(johnniwinther): Ensure the correct semantics of this.
250 @override
251 bool get isPlatformLibrary => element.isInSdk;
252
253 @override
254 bool get isDartCore => element.isDartCore;
255
256 LibraryElementY(ElementConverter converter, analyzer.LibraryElement element)
257 : super(converter, element);
258
259 @override
260 void addCompilationUnit(_) => unsupported('addCompilationUnit');
261
262 @override
263 void addImport(element, import, listener) => unsupported('addImport');
264
265 @override
266 void addMember(element, listener) => unsupported('addMember');
267
268 @override
269 void addTag(tag, listener) => unsupported('addTag');
270
271 @override
272 void addToScope(element, listener) => unsupported('addToScope');
273
274 @override
275 void set canUseNative(bool value) => unsupported('canUseNative');
276
277 @override
278 bool get canUseNative => unsupported('canUseNative');
279
280 @override
281 Uri get canonicalUri => unsupported('canonicalUri');
282
283 @override
284 int compareTo(other) => unsupported('compareTo');
285
286 @override
287 get compilationUnits => unsupported('compilationUnits');
288
289 @override
290 get entryCompilationUnit => unsupported('entryCompilationUnit');
291
292 @override
293 get exports => unsupported('exports');
294
295 @override
296 bool get exportsHandled => unsupported('exportsHandled');
297
298 @override
299 find(String elementName) => unsupported('find');
300
301 @override
302 findExported(String elementName) => unsupported('findExported');
303
304 @override
305 findLocal(String elementName) => unsupported('findLocal');
306
307 @override
308 void forEachExport(_) => unsupported('forEachExport');
309
310 @override
311 void forEachLocalMember(_) => unsupported('forEachLocalMember');
312
313 @override
314 getImportsFor(element) => unsupported('getImportsFor');
315
316 @override
317 getLibraryFromTag(tag) => unsupported('getLibraryFromTag');
318
319 @override
320 String getLibraryName() => unsupported('getLibraryName');
321
322 @override
323 String getLibraryOrScriptName() => unsupported('getLibraryOrScriptName');
324
325 @override
326 getNonPrivateElementsInScope() => unsupported('getNonPrivateElementsInScope');
327
328 @override
329 bool hasLibraryName() => unsupported('hasLibraryName');
330
331 @override
332 bool get hasTreeElements => unsupported('hasTreeElements');
333
334 @override
335 bool get isPackageLibrary => unsupported('isPackageLibrary');
336
337 @override
338 get libraryTag => unsupported('libraryTag');
339
340 @override
341 void set libraryTag(value) => unsupported('libraryTag');
342
343 @override
344 localLookup(elementName) => unsupported('localLookup');
345
346 @override
347 void recordResolvedTag(tag, library) => unsupported('recordResolvedTag');
348
349 @override
350 void setExports(exportedElements) => unsupported('setExports');
351
352 @override
353 get tags => unsupported('tags');
354
355 @override
356 get treeElements => unsupported('treeElements');
357 }
358
359 class TopLevelFunctionElementY extends ElementY
360 implements dart2js.FunctionElement {
361 analyzer.FunctionElement get element => super.element;
362
363 final dart2js.FunctionSignature functionSignature =
364 new modelx.FunctionSignatureX(
365 const util.Link<dart2js.Element>(),
366 const util.Link<dart2js.Element>(),
367 0, 0, false, const <dart2js.Element>[],
368 new FunctionType.synthesized());
369
370
371 // TODO(johnniwinther): Ensure the correct semantics of this.
372 @override
373 bool get isFactoryConstructor => false;
374
375 @override
376 bool get isStatic {
377 // Semantic difference: Analyzer considers top-level and static class
378 // members to be static, dart2js only considers static class members to be
379 // static.
380 return false;
381 }
382
383 // TODO(johnniwinther): Ensure the correct semantics of this.
384 @override
385 bool get isAbstract => false;
386
387 @override
388 dart2js.ElementKind get kind => dart2js.ElementKind.FUNCTION;
389
390 @override
391 bool get isClassMember => false;
392
393 @override
394 bool get isInstanceMember => false;
395
396 @override
397 bool get isTopLevel => true;
398
399 TopLevelFunctionElementY(ElementConverter converter,
400 analyzer.FunctionElement element)
401 : super(converter, element);
402
403 @override
404 get abstractField => unsupported('abstractField');
405
406 @override
407 computeSignature(_) => unsupported('computeSignature');
408
409 @override
410 bool get hasNode => unsupported('hasNode');
411
412 @override
413 bool get hasResolvedAst => unsupported('hasResolvedAst');
414
415 @override
416 bool get hasTreeElements => unsupported('hasTreeElements');
417
418 @override
419 get memberContext => unsupported('memberContext');
420
421 @override
422 get node => unsupported('node');
423
424 @override
425 get resolvedAst => unsupported('resolvedAst');
426
427 @override
428 get treeElements => unsupported('treeElements');
429
430 @override
431 FunctionType get type => functionSignature.type;
432 }
OLDNEW
« no previous file with comments | « pkg/analyzer2dart/lib/src/driver.dart ('k') | pkg/analyzer2dart/lib/src/tree_shaker.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698