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

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

Powered by Google App Engine
This is Rietveld 408576698