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

Side by Side Diff: dart/runtime/lib/mirrors_impl.dart

Issue 14173005: Update dart:mirrors to use Symbol. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix various issues discovered during own review. Created 7 years, 8 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
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // VM-specific implementation of the dart:mirrors library. 5 // VM-specific implementation of the dart:mirrors library.
6 6
7 // These values are allowed to be passed directly over the wire. 7 // These values are allowed to be passed directly over the wire.
8 bool _isSimpleValue(var value) { 8 bool _isSimpleValue(var value) {
9 return (value == null || value is num || value is String || value is bool); 9 return (value == null || value is num || value is String || value is bool);
10 } 10 }
11 11
12 Map _filterMap(Map old_map, bool filter(key, value)) { 12 Map _filterMap(Map<Symbol, dynamic> old_map, bool filter(Symbol key, value)) {
13 Map new_map = new Map(); 13 Map new_map = new Map<Symbol, dynamic>();
14 old_map.forEach((key, value) { 14 old_map.forEach((key, value) {
15 if (filter(key, value)) { 15 if (filter(key, value)) {
16 new_map[key] = value; 16 new_map[key] = value;
17 } 17 }
18 }); 18 });
19 return new_map; 19 return new_map;
20 } 20 }
21 21
22 String _n(Symbol symbol) => _collection_dev.Symbol.getName(symbol);
23
24 Symbol _s(String name) {
25 if (name == null) return null;
26 return new _collection_dev.Symbol.unvalidated(name);
27 }
28
29 Symbol _computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
30 if (owner == null) return simpleName;
31 return _s('${_n(owner.qualifiedName)}.${_n(simpleName)}');
32 }
33
34 Map<Symbol, dynamic> _convertStringToSymbolMap(Map<String, dynamic> map) {
35 if (map == null) return null;
36 Map<Symbol, dynamic> result = new Map<Symbol, dynamic>();
37 map.forEach((name, value) => result[_s(name)] = value);
38 return result;
39 }
40
22 String _makeSignatureString(TypeMirror returnType, 41 String _makeSignatureString(TypeMirror returnType,
23 List<ParameterMirror> parameters) { 42 List<ParameterMirror> parameters) {
24 StringBuffer buf = new StringBuffer(); 43 StringBuffer buf = new StringBuffer();
25 buf.write(returnType.qualifiedName); 44 buf.write(_n(returnType.qualifiedName));
26 buf.write(' ('); 45 buf.write(' (');
27 bool found_optional_param = false; 46 bool found_optional_param = false;
28 for (int i = 0; i < parameters.length; i++) { 47 for (int i = 0; i < parameters.length; i++) {
29 var param = parameters[i]; 48 var param = parameters[i];
30 if (param.isOptional && !found_optional_param) { 49 if (param.isOptional && !found_optional_param) {
31 buf.write('['); 50 buf.write('[');
32 found_optional_param = true; 51 found_optional_param = true;
33 } 52 }
34 buf.write(param.type.qualifiedName); 53 buf.write(_n(param.type.qualifiedName));
35 if (i < (parameters.length - 1)) { 54 if (i < (parameters.length - 1)) {
36 buf.write(', '); 55 buf.write(', ');
37 } 56 }
38 } 57 }
39 if (found_optional_param) { 58 if (found_optional_param) {
40 buf.write(']'); 59 buf.write(']');
41 } 60 }
42 buf.write(')'); 61 buf.write(')');
43 return buf.toString(); 62 return buf.toString();
44 } 63 }
45 64
46 class _LocalMirrorSystemImpl implements MirrorSystem { 65 class _LocalMirrorSystemImpl implements MirrorSystem {
47 _LocalMirrorSystemImpl(this.libraries, this.isolate) 66 // TODO(ahe): [libraries] should be Map<Uri, LibraryMirror>.
48 : _functionTypes = new Map<String, FunctionTypeMirror>() {} 67 // Change parameter back to "this.libraries" when native code is changed.
68 _LocalMirrorSystemImpl(Map<String, LibraryMirror> libraries, this.isolate)
Søren Gjesse 2013/04/15 14:08:31 Four space indent - more below.
ahe 2013/04/15 14:29:55 Done.
69 : _functionTypes = new Map<String, FunctionTypeMirror>(),
70 this.libraries = _convertStringToSymbolMap(libraries);
49 71
50 final Map<String, LibraryMirror> libraries; 72 final Map<Symbol, LibraryMirror> libraries;
51 final IsolateMirror isolate; 73 final IsolateMirror isolate;
52 74
53 TypeMirror _dynamicType = null; 75 TypeMirror _dynamicType = null;
54 76
55 TypeMirror get dynamicType { 77 TypeMirror get dynamicType {
56 if (_dynamicType == null) { 78 if (_dynamicType == null) {
57 _dynamicType = 79 _dynamicType =
58 new _LocalClassMirrorImpl( 80 new _LocalClassMirrorImpl(
59 null, 'dynamic', false, null, null, [], null, 81 null, 'dynamic', false, null, null, [], null,
60 const {}, const {}, const {}); 82 const {}, const {}, const {});
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 // For now, all VMObjects hold a VMReference. We could consider 154 // For now, all VMObjects hold a VMReference. We could consider
133 // storing the Object reference itself here if the object is a Dart 155 // storing the Object reference itself here if the object is a Dart
134 // language objects (except for objects of type VMReference, of 156 // language objects (except for objects of type VMReference, of
135 // course). 157 // course).
136 VMReference _reference; 158 VMReference _reference;
137 } 159 }
138 160
139 abstract class _LocalObjectMirrorImpl extends _LocalVMObjectMirrorImpl 161 abstract class _LocalObjectMirrorImpl extends _LocalVMObjectMirrorImpl
140 implements ObjectMirror { 162 implements ObjectMirror {
141 _LocalObjectMirrorImpl(ref) : super(ref) {} 163 _LocalObjectMirrorImpl(ref) : super(ref) {}
142 164
143 Future<InstanceMirror> invokeAsync(String memberName, 165 Future<InstanceMirror> invokeAsync(Symbol memberName,
144 List positionalArguments, 166 List positionalArguments,
145 [Map<String,dynamic> namedArguments]) { 167 [Map<Symbol, dynamic> namedArguments]) {
146 if (namedArguments != null) { 168 if (namedArguments != null) {
147 throw new UnimplementedError( 169 throw new UnimplementedError(
148 'named argument support is not implemented'); 170 'named argument support is not implemented');
149 } 171 }
150 // Walk the arguments and make sure they are legal. 172 // Walk the arguments and make sure they are legal.
151 for (int i = 0; i < positionalArguments.length; i++) { 173 for (int i = 0; i < positionalArguments.length; i++) {
152 var arg = positionalArguments[i]; 174 var arg = positionalArguments[i];
153 _validateArgument(i, arg); 175 _validateArgument(i, arg);
154 } 176 }
155 Completer<InstanceMirror> completer = new Completer<InstanceMirror>(); 177 Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
156 try { 178 try {
157 completer.complete( 179 completer.complete(
158 _invoke(this, memberName, positionalArguments)); 180 _invoke(this, _n(memberName), positionalArguments));
159 } catch (exception, s) { 181 } catch (exception, s) {
160 completer.completeError(exception, s); 182 completer.completeError(exception, s);
161 } 183 }
162 return completer.future; 184 return completer.future;
163 } 185 }
164 186
165 Future<InstanceMirror> getFieldAsync(String fieldName) { 187 Future<InstanceMirror> getFieldAsync(Symbol fieldName) {
166 Completer<InstanceMirror> completer = new Completer<InstanceMirror>(); 188 Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
167 try { 189 try {
168 completer.complete(_getField(this, fieldName)); 190 completer.complete(_getField(this, _n(fieldName)));
169 } catch (exception, s) { 191 } catch (exception, s) {
170 completer.completeError(exception, s); 192 completer.completeError(exception, s);
171 } 193 }
172 return completer.future; 194 return completer.future;
173 } 195 }
174 196
175 Future<InstanceMirror> setFieldAsync(String fieldName, Object arg) { 197 Future<InstanceMirror> setFieldAsync(Symbol fieldName, Object arg) {
176 _validateArgument(0, arg); 198 _validateArgument(0, arg);
177 199
178 Completer<InstanceMirror> completer = new Completer<InstanceMirror>(); 200 Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
179 try { 201 try {
180 completer.complete(_setField(this, fieldName, arg)); 202 completer.complete(_setField(this, _n(fieldName), arg));
181 } catch (exception, s) { 203 } catch (exception, s) {
182 completer.completeError(exception, s); 204 completer.completeError(exception, s);
183 } 205 }
184 return completer.future; 206 return completer.future;
185 } 207 }
186 208
187 static _validateArgument(int i, Object arg) 209 static _validateArgument(int i, Object arg)
188 { 210 {
189 if (arg is Mirror) { 211 if (arg is Mirror) {
190 if (arg is! InstanceMirror) { 212 if (arg is! InstanceMirror) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 this.function) : super(ref, type, reflectee) {} 319 this.function) : super(ref, type, reflectee) {}
298 320
299 final MethodMirror function; 321 final MethodMirror function;
300 322
301 String get source { 323 String get source {
302 throw new UnimplementedError( 324 throw new UnimplementedError(
303 'ClosureMirror.source is not implemented'); 325 'ClosureMirror.source is not implemented');
304 } 326 }
305 327
306 Future<InstanceMirror> applyAsync(List<Object> positionalArguments, 328 Future<InstanceMirror> applyAsync(List<Object> positionalArguments,
307 [Map<String,Object> namedArguments]) { 329 [Map<Symbol, Object> namedArguments]) {
308 if (namedArguments != null) { 330 if (namedArguments != null) {
309 throw new UnimplementedError( 331 throw new UnimplementedError(
310 'named argument support is not implemented'); 332 'named argument support is not implemented');
311 } 333 }
312 // Walk the arguments and make sure they are legal. 334 // Walk the arguments and make sure they are legal.
313 for (int i = 0; i < positionalArguments.length; i++) { 335 for (int i = 0; i < positionalArguments.length; i++) {
314 var arg = positionalArguments[i]; 336 var arg = positionalArguments[i];
315 _LocalObjectMirrorImpl._validateArgument(i, arg); 337 _LocalObjectMirrorImpl._validateArgument(i, arg);
316 } 338 }
317 Completer<InstanceMirror> completer = new Completer<InstanceMirror>(); 339 Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
318 try { 340 try {
319 completer.complete( 341 completer.complete(
320 _apply(this, positionalArguments)); 342 _apply(this, positionalArguments));
321 } catch (exception) { 343 } catch (exception) {
322 completer.completeError(exception); 344 completer.completeError(exception);
323 } 345 }
324 return completer.future; 346 return completer.future;
325 } 347 }
326 348
327 Future<InstanceMirror> findInContext(String name) { 349 Future<InstanceMirror> findInContext(Symbol name) {
328 throw new UnimplementedError( 350 throw new UnimplementedError(
329 'ClosureMirror.findInContext() is not implemented'); 351 'ClosureMirror.findInContext() is not implemented');
330 } 352 }
331 353
332 static _apply(ref, positionalArguments) 354 static _apply(ref, positionalArguments)
333 native 'LocalClosureMirrorImpl_apply'; 355 native 'LocalClosureMirrorImpl_apply';
334 } 356 }
335 357
336 class _LazyTypeMirror { 358 class _LazyTypeMirror {
337 _LazyTypeMirror(this.libraryName, this.typeName) {} 359 _LazyTypeMirror(String libraryName, String typeName)
360 : this.libraryName = _s(libraryName),
361 this.typeName = _s(typeName);
338 362
339 TypeMirror resolve(MirrorSystem mirrors) { 363 TypeMirror resolve(MirrorSystem mirrors) {
340 if (libraryName == null) { 364 if (libraryName == null) {
341 if (typeName == 'dynamic') { 365 if (typeName == const Symbol('dynamic')) {
342 return mirrors.dynamicType; 366 return mirrors.dynamicType;
343 } else if (typeName == 'void') { 367 } else if (typeName == const Symbol('void')) {
344 return mirrors.voidType; 368 return mirrors.voidType;
345 } else { 369 } else {
346 throw new UnimplementedError( 370 throw new UnimplementedError(
347 "Mirror for type '$typeName' is not implemented"); 371 "Mirror for type '$typeName' is not implemented");
348 } 372 }
349 } 373 }
350 var resolved = mirrors.libraries[libraryName].members[typeName]; 374 var resolved = mirrors.libraries[libraryName].members[typeName];
351 if (resolved == null) { 375 if (resolved == null) {
352 throw new UnimplementedError( 376 throw new UnimplementedError(
353 "Mirror for type '$typeName' is not implemented"); 377 "Mirror for type '$typeName' is not implemented");
354 } 378 }
355 return resolved; 379 return resolved;
356 } 380 }
357 381
358 final String libraryName; 382 final Symbol libraryName;
359 final String typeName; 383 final Symbol typeName;
360 } 384 }
361 385
362 class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl 386 class _LocalClassMirrorImpl extends _LocalObjectMirrorImpl
363 implements ClassMirror { 387 implements ClassMirror {
364 _LocalClassMirrorImpl(ref, 388 _LocalClassMirrorImpl(ref,
365 this.simpleName, 389 String simpleName,
366 this.isClass, 390 this.isClass,
367 this._owner, 391 this._owner,
368 this._superclass, 392 this._superclass,
369 this._superinterfaces, 393 this._superinterfaces,
370 this._defaultFactory, 394 this._defaultFactory,
371 this.members, 395 Map<String, Mirror> members,
372 this.constructors, 396 Map<String, Mirror> constructors,
373 this.typeVariables) : super(ref) {} 397 Map<String, Mirror> typeVariables)
398 : this.simpleName = _s(simpleName),
399 this.members = _convertStringToSymbolMap(members),
400 this.constructors = _convertStringToSymbolMap(constructors),
401 this.typeVariables = _convertStringToSymbolMap(typeVariables),
402 super(ref);
374 403
375 final String simpleName; 404 final Symbol simpleName;
376 405
377 String _qualifiedName = null; 406 Symbol _qualifiedName = null;
378 String get qualifiedName { 407 Symbol get qualifiedName {
379 if (_owner != null) { 408 if (_qualifiedName == null) {
380 if (_qualifiedName == null) { 409 _qualifiedName = _computeQualifiedName(owner, simpleName);
381 _qualifiedName = '${owner.qualifiedName}.${simpleName}';
382 }
383 } else {
384 // The owner of a ClassMirror is null in certain odd cases, like
385 // 'void', 'dynamic' and function type mirrors.
386 _qualifiedName = simpleName;
387 } 410 }
388 return _qualifiedName; 411 return _qualifiedName;
389 } 412 }
390 413
391 var _owner; 414 var _owner;
392 DeclarationMirror get owner { 415 DeclarationMirror get owner {
393 if (_owner != null && _owner is! Mirror) { 416 if (_owner != null && _owner is! Mirror) {
394 _owner = _owner.resolve(mirrors); 417 _owner = _owner.resolve(mirrors);
395 } 418 }
396 return _owner; 419 return _owner;
397 } 420 }
398 421
399 bool get isPrivate => simpleName.startsWith('_'); 422 bool get isPrivate => _n(simpleName).startsWith('_');
400 423
401 final bool isTopLevel = true; 424 final bool isTopLevel = true;
402 425
403 SourceLocation get location { 426 SourceLocation get location {
404 throw new UnimplementedError( 427 throw new UnimplementedError(
405 'ClassMirror.location is not implemented'); 428 'ClassMirror.location is not implemented');
406 } 429 }
407 430
408 final bool isClass; 431 final bool isClass;
409 432
(...skipping 19 matching lines...) Expand all
429 } 452 }
430 453
431 var _defaultFactory; 454 var _defaultFactory;
432 ClassMirror get defaultFactory { 455 ClassMirror get defaultFactory {
433 if (_defaultFactory != null && _defaultFactory is! Mirror) { 456 if (_defaultFactory != null && _defaultFactory is! Mirror) {
434 _defaultFactory = _defaultFactory.resolve(mirrors); 457 _defaultFactory = _defaultFactory.resolve(mirrors);
435 } 458 }
436 return _defaultFactory; 459 return _defaultFactory;
437 } 460 }
438 461
439 final Map<String, Mirror> members; 462 final Map<Symbol, Mirror> members;
440 463
441 Map<String, MethodMirror> _methods = null; 464 Map<Symbol, MethodMirror> _methods = null;
442 Map<String, MethodMirror> _getters = null; 465 Map<Symbol, MethodMirror> _getters = null;
443 Map<String, MethodMirror> _setters = null; 466 Map<Symbol, MethodMirror> _setters = null;
444 Map<String, VariableMirror> _variables = null; 467 Map<Symbol, VariableMirror> _variables = null;
445 468
446 Map<String, MethodMirror> get methods { 469 Map<Symbol, MethodMirror> get methods {
447 if (_methods == null) { 470 if (_methods == null) {
448 _methods = _filterMap( 471 _methods = _filterMap(
449 members, 472 members,
450 (key, value) => (value is MethodMirror && value.isRegularMethod)); 473 (key, value) => (value is MethodMirror && value.isRegularMethod));
451 } 474 }
452 return _methods; 475 return _methods;
453 } 476 }
454 477
455 Map<String, MethodMirror> get getters { 478 Map<Symbol, MethodMirror> get getters {
456 if (_getters == null) { 479 if (_getters == null) {
457 _getters = _filterMap( 480 _getters = _filterMap(
458 members, 481 members,
459 (key, value) => (value is MethodMirror && value.isGetter)); 482 (key, value) => (value is MethodMirror && value.isGetter));
460 } 483 }
461 return _getters; 484 return _getters;
462 } 485 }
463 486
464 Map<String, MethodMirror> get setters { 487 Map<Symbol, MethodMirror> get setters {
465 if (_setters == null) { 488 if (_setters == null) {
466 _setters = _filterMap( 489 _setters = _filterMap(
467 members, 490 members,
468 (key, value) => (value is MethodMirror && value.isSetter)); 491 (key, value) => (value is MethodMirror && value.isSetter));
469 } 492 }
470 return _setters; 493 return _setters;
471 } 494 }
472 495
473 Map<String, VariableMirror> get variables { 496 Map<Symbol, VariableMirror> get variables {
474 if (_variables == null) { 497 if (_variables == null) {
475 _variables = _filterMap( 498 _variables = _filterMap(
476 members, 499 members,
477 (key, value) => (value is VariableMirror)); 500 (key, value) => (value is VariableMirror));
478 } 501 }
479 return _variables; 502 return _variables;
480 } 503 }
481 504
482 Map<String, MethodMirror> constructors; 505 Map<Symbol, MethodMirror> constructors;
483 Map<String, TypeVariableMirror> typeVariables; 506 Map<Symbol, TypeVariableMirror> typeVariables;
484 507
485 Map<String, TypeMirror> get typeArguments { 508 Map<Symbol, TypeMirror> get typeArguments {
486 throw new UnimplementedError( 509 throw new UnimplementedError(
487 'ClassMirror.typeArguments is not implemented'); 510 'ClassMirror.typeArguments is not implemented');
488 } 511 }
489 512
490 bool get isOriginalDeclaration { 513 bool get isOriginalDeclaration {
491 throw new UnimplementedError( 514 throw new UnimplementedError(
492 'ClassMirror.isOriginalDeclaration is not implemented'); 515 'ClassMirror.isOriginalDeclaration is not implemented');
493 } 516 }
494 517
495 ClassMirror get genericDeclaration { 518 ClassMirror get genericDeclaration {
496 throw new UnimplementedError( 519 throw new UnimplementedError(
497 'ClassMirror.originalDeclaration is not implemented'); 520 'ClassMirror.originalDeclaration is not implemented');
498 } 521 }
499 522
500 String toString() => "ClassMirror on '$simpleName'"; 523 String toString() => "ClassMirror on '$simpleName'";
501 524
502 Future<InstanceMirror> newInstanceAsync(String constructorName, 525 Future<InstanceMirror> newInstanceAsync(Symbol constructorName,
503 List positionalArguments, 526 List positionalArguments,
504 [Map<String,dynamic> namedArguments]) { 527 [Map<Symbol, dynamic> namedArguments]) {
505 if (namedArguments != null) { 528 if (namedArguments != null) {
506 throw new UnimplementedError( 529 throw new UnimplementedError(
507 'named argument support is not implemented'); 530 'named argument support is not implemented');
508 } 531 }
509 // Walk the arguments and make sure they are legal. 532 // Walk the arguments and make sure they are legal.
510 for (int i = 0; i < positionalArguments.length; i++) { 533 for (int i = 0; i < positionalArguments.length; i++) {
511 var arg = positionalArguments[i]; 534 var arg = positionalArguments[i];
512 _LocalObjectMirrorImpl._validateArgument(i, arg); 535 _LocalObjectMirrorImpl._validateArgument(i, arg);
513 } 536 }
514 Completer<InstanceMirror> completer = new Completer<InstanceMirror>(); 537 Completer<InstanceMirror> completer = new Completer<InstanceMirror>();
515 try { 538 try {
516 completer.complete( 539 completer.complete(
517 _invokeConstructor(this, constructorName, positionalArguments)); 540 _invokeConstructor(this, _n(constructorName), positionalArguments));
518 } catch (exception) { 541 } catch (exception) {
519 completer.completeError(exception); 542 completer.completeError(exception);
520 } 543 }
521 return completer.future; 544 return completer.future;
522 } 545 }
523 546
524 static _invokeConstructor(ref, constructorName, positionalArguments) 547 static _invokeConstructor(ref, constructorName, positionalArguments)
525 native 'LocalClassMirrorImpl_invokeConstructor'; 548 native 'LocalClassMirrorImpl_invokeConstructor';
526 } 549 }
527 550
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 return _returnType; 585 return _returnType;
563 } 586 }
564 587
565 final List<ParameterMirror> parameters; 588 final List<ParameterMirror> parameters;
566 589
567 String toString() => "FunctionTypeMirror on '$simpleName'"; 590 String toString() => "FunctionTypeMirror on '$simpleName'";
568 } 591 }
569 592
570 593
571 class _LazyTypeVariableMirror { 594 class _LazyTypeVariableMirror {
572 _LazyTypeVariableMirror(this._variableName, this._owner) {} 595 _LazyTypeVariableMirror(String variableName, this._owner)
596 : this._variableName = _s(variableName);
573 597
574 TypeVariableMirror resolve(MirrorSystem mirrors) { 598 TypeVariableMirror resolve(MirrorSystem mirrors) {
575 ClassMirror owner = _owner.resolve(mirrors); 599 ClassMirror owner = _owner.resolve(mirrors);
576 return owner.typeVariables[_variableName]; 600 return owner.typeVariables[_variableName];
577 } 601 }
578 602
579 final String _variableName; 603 final Symbol _variableName;
580 final _LazyTypeMirror _owner; 604 final _LazyTypeMirror _owner;
581 } 605 }
582 606
583 class _LocalTypeVariableMirrorImpl extends _LocalMirrorImpl 607 class _LocalTypeVariableMirrorImpl extends _LocalMirrorImpl
584 implements TypeVariableMirror { 608 implements TypeVariableMirror {
585 _LocalTypeVariableMirrorImpl(this.simpleName, 609 _LocalTypeVariableMirrorImpl(String simpleName,
586 this._owner, 610 this._owner,
587 this._upperBound) {} 611 this._upperBound)
588 final String simpleName; 612 : this.simpleName = _s(simpleName);
589 613
590 String _qualifiedName = null; 614 final Symbol simpleName;
591 String get qualifiedName { 615
616 Symbol _qualifiedName = null;
617 Symbol get qualifiedName {
592 if (_qualifiedName == null) { 618 if (_qualifiedName == null) {
593 _qualifiedName = '${owner.qualifiedName}.${simpleName}'; 619 _qualifiedName = _computeQualifiedName(owner, simpleName);
594 } 620 }
595 return _qualifiedName; 621 return _qualifiedName;
596 } 622 }
597 623
598 var _owner; 624 var _owner;
599 DeclarationMirror get owner { 625 DeclarationMirror get owner {
600 if (_owner is! Mirror) { 626 if (_owner is! Mirror) {
601 _owner = _owner.resolve(mirrors); 627 _owner = _owner.resolve(mirrors);
602 } 628 }
603 return _owner; 629 return _owner;
(...skipping 15 matching lines...) Expand all
619 } 645 }
620 return _upperBound; 646 return _upperBound;
621 } 647 }
622 648
623 String toString() => "TypeVariableMirror on '$simpleName'"; 649 String toString() => "TypeVariableMirror on '$simpleName'";
624 } 650 }
625 651
626 652
627 class _LocalTypedefMirrorImpl extends _LocalMirrorImpl 653 class _LocalTypedefMirrorImpl extends _LocalMirrorImpl
628 implements TypedefMirror { 654 implements TypedefMirror {
629 _LocalTypedefMirrorImpl(this.simpleName, 655 _LocalTypedefMirrorImpl(String simpleName,
630 this._owner, 656 this._owner,
631 this._referent) {} 657 this._referent)
632 final String simpleName; 658 : this.simpleName = _s(simpleName);
633 659
634 String _qualifiedName = null; 660 final Symbol simpleName;
635 String get qualifiedName { 661
662 Symbol _qualifiedName = null;
663 Symbol get qualifiedName {
636 if (_qualifiedName == null) { 664 if (_qualifiedName == null) {
637 _qualifiedName = '${owner.qualifiedName}.${simpleName}'; 665 _qualifiedName = _computeQualifiedName(owner, simpleName);
638 } 666 }
639 return _qualifiedName; 667 return _qualifiedName;
640 } 668 }
641 669
642 var _owner; 670 var _owner;
643 DeclarationMirror get owner { 671 DeclarationMirror get owner {
644 if (_owner is! Mirror) { 672 if (_owner is! Mirror) {
645 _owner = _owner.resolve(mirrors); 673 _owner = _owner.resolve(mirrors);
646 } 674 }
647 return _owner; 675 return _owner;
(...skipping 14 matching lines...) Expand all
662 _referent = _referent.resolve(mirrors); 690 _referent = _referent.resolve(mirrors);
663 } 691 }
664 return _referent; 692 return _referent;
665 } 693 }
666 694
667 String toString() => "TypedefMirror on '$simpleName'"; 695 String toString() => "TypedefMirror on '$simpleName'";
668 } 696 }
669 697
670 698
671 class _LazyLibraryMirror { 699 class _LazyLibraryMirror {
672 _LazyLibraryMirror(this.libraryName) {} 700 _LazyLibraryMirror(String libraryName)
701 : this.libraryName = _s(libraryName);
673 702
674 LibraryMirror resolve(MirrorSystem mirrors) { 703 LibraryMirror resolve(MirrorSystem mirrors) {
675 return mirrors.libraries[libraryName]; 704 return mirrors.libraries[libraryName];
676 } 705 }
677 706
678 final String libraryName; 707 final Symbol libraryName;
679 } 708 }
680 709
681 class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl 710 class _LocalLibraryMirrorImpl extends _LocalObjectMirrorImpl
682 implements LibraryMirror { 711 implements LibraryMirror {
683 _LocalLibraryMirrorImpl(ref, 712 _LocalLibraryMirrorImpl(ref,
684 this.simpleName, 713 String simpleName,
685 this.url, 714 this.url,
686 this.members) : super(ref) {} 715 Map<String, Mirror> members)
716 : this.simpleName = _s(simpleName),
717 this.members = _convertStringToSymbolMap(members),
718 super(ref);
687 719
688 final String simpleName; 720 final Symbol simpleName;
689 721
690 // The simple name and the qualified name are the same for a library. 722 // The simple name and the qualified name are the same for a library.
691 String get qualifiedName => simpleName; 723 Symbol get qualifiedName => simpleName;
692 724
693 // Always null for libraries. 725 // Always null for libraries.
694 final DeclarationMirror owner = null; 726 final DeclarationMirror owner = null;
695 727
696 // Always false for libraries. 728 // Always false for libraries.
697 final bool isPrivate = false; 729 final bool isPrivate = false;
698 730
699 // Always false for libraries. 731 // Always false for libraries.
700 final bool isTopLevel = false; 732 final bool isTopLevel = false;
701 733
702 SourceLocation get location { 734 SourceLocation get location {
703 throw new UnimplementedError( 735 throw new UnimplementedError(
704 'LibraryMirror.location is not implemented'); 736 'LibraryMirror.location is not implemented');
705 } 737 }
706 738
707 final String url; 739 final String url;
708 final Map<String, Mirror> members; 740 final Map<Symbol, Mirror> members;
709 741
710 Map<String, ClassMirror> _classes = null; 742 Map<Symbol, ClassMirror> _classes = null;
711 Map<String, MethodMirror> _functions = null; 743 Map<Symbol, MethodMirror> _functions = null;
712 Map<String, MethodMirror> _getters = null; 744 Map<Symbol, MethodMirror> _getters = null;
713 Map<String, MethodMirror> _setters = null; 745 Map<Symbol, MethodMirror> _setters = null;
714 Map<String, VariableMirror> _variables = null; 746 Map<Symbol, VariableMirror> _variables = null;
715 747
716 Map<String, ClassMirror> get classes { 748 Map<Symbol, ClassMirror> get classes {
717 if (_classes == null) { 749 if (_classes == null) {
718 _classes = _filterMap(members, 750 _classes = _filterMap(members,
719 (key, value) => (value is ClassMirror)); 751 (key, value) => (value is ClassMirror));
720 } 752 }
721 return _classes; 753 return _classes;
722 } 754 }
723 755
724 Map<String, MethodMirror> get functions { 756 Map<Symbol, MethodMirror> get functions {
725 if (_functions == null) { 757 if (_functions == null) {
726 _functions = _filterMap(members, 758 _functions = _filterMap(members,
727 (key, value) => (value is MethodMirror)); 759 (key, value) => (value is MethodMirror));
728 } 760 }
729 return _functions; 761 return _functions;
730 } 762 }
731 763
732 Map<String, MethodMirror> get getters { 764 Map<Symbol, MethodMirror> get getters {
733 if (_getters == null) { 765 if (_getters == null) {
734 _getters = _filterMap(functions, 766 _getters = _filterMap(functions,
735 (key, value) => (value.isGetter)); 767 (key, value) => (value.isGetter));
736 } 768 }
737 return _getters; 769 return _getters;
738 } 770 }
739 771
740 Map<String, MethodMirror> get setters { 772 Map<Symbol, MethodMirror> get setters {
741 if (_setters == null) { 773 if (_setters == null) {
742 _setters = _filterMap(functions, 774 _setters = _filterMap(functions,
743 (key, value) => (value.isSetter)); 775 (key, value) => (value.isSetter));
744 } 776 }
745 return _setters; 777 return _setters;
746 } 778 }
747 779
748 Map<String, VariableMirror> get variables { 780 Map<Symbol, VariableMirror> get variables {
749 if (_variables == null) { 781 if (_variables == null) {
750 _variables = _filterMap(members, 782 _variables = _filterMap(members,
751 (key, value) => (value is VariableMirror)); 783 (key, value) => (value is VariableMirror));
752 } 784 }
753 return _variables; 785 return _variables;
754 } 786 }
755 787
756 String toString() => "LibraryMirror on '$simpleName'"; 788 String toString() => "LibraryMirror on '$simpleName'";
757 } 789 }
758 790
759 class _LocalMethodMirrorImpl extends _LocalMirrorImpl 791 class _LocalMethodMirrorImpl extends _LocalMirrorImpl
760 implements MethodMirror { 792 implements MethodMirror {
761 _LocalMethodMirrorImpl(this.simpleName, 793 _LocalMethodMirrorImpl(String simpleName,
762 this._owner, 794 this._owner,
763 this.parameters, 795 this.parameters,
764 this._returnType, 796 this._returnType,
765 this.isStatic, 797 this.isStatic,
766 this.isAbstract, 798 this.isAbstract,
767 this.isGetter, 799 this.isGetter,
768 this.isSetter, 800 this.isSetter,
769 this.isConstructor, 801 this.isConstructor,
770 this.isConstConstructor, 802 this.isConstConstructor,
771 this.isGenerativeConstructor, 803 this.isGenerativeConstructor,
772 this.isRedirectingConstructor, 804 this.isRedirectingConstructor,
773 this.isFactoryConstructor) {} 805 this.isFactoryConstructor)
806 : this.simpleName = _s(simpleName);
774 807
775 final String simpleName; 808 final Symbol simpleName;
776 809
777 String _qualifiedName = null; 810 Symbol _qualifiedName = null;
778 String get qualifiedName { 811 Symbol get qualifiedName {
779 if (_qualifiedName == null) { 812 if (_qualifiedName == null) {
780 _qualifiedName = '${owner.qualifiedName}.${simpleName}'; 813 _qualifiedName = _computeQualifiedName(owner, simpleName);
781 } 814 }
782 return _qualifiedName; 815 return _qualifiedName;
783 } 816 }
784 817
785 var _owner; 818 var _owner;
786 DeclarationMirror get owner { 819 DeclarationMirror get owner {
787 if (_owner is! Mirror) { 820 if (_owner is! Mirror) {
788 _owner = _owner.resolve(mirrors); 821 _owner = _owner.resolve(mirrors);
789 } 822 }
790 return _owner; 823 return _owner;
791 } 824 }
792 825
793 bool get isPrivate { 826 bool get isPrivate {
794 return simpleName.startsWith('_') || constructorName.startsWith('_'); 827 return _n(simpleName).startsWith('_') ||
828 _n(constructorName).startsWith('_');
795 } 829 }
796 830
797 bool get isTopLevel => owner is LibraryMirror; 831 bool get isTopLevel => owner is LibraryMirror;
798 832
799 SourceLocation get location { 833 SourceLocation get location {
800 throw new UnimplementedError( 834 throw new UnimplementedError(
801 'MethodMirror.location is not implemented'); 835 'MethodMirror.location is not implemented');
802 } 836 }
803 837
804 var _returnType; 838 var _returnType;
(...skipping 13 matching lines...) Expand all
818 852
819 TypeMirror get isOperator { 853 TypeMirror get isOperator {
820 throw new UnimplementedError( 854 throw new UnimplementedError(
821 'MethodMirror.isOperator is not implemented'); 855 'MethodMirror.isOperator is not implemented');
822 } 856 }
823 857
824 final bool isGetter; 858 final bool isGetter;
825 final bool isSetter; 859 final bool isSetter;
826 final bool isConstructor; 860 final bool isConstructor;
827 861
828 var _constructorName = null; 862 Symbol _constructorName = null;
829 String get constructorName { 863 Symbol get constructorName {
830 if (_constructorName == null) { 864 if (_constructorName == null) {
831 if (!isConstructor) { 865 if (!isConstructor) {
832 _constructorName = ''; 866 _constructorName = _s('');
833 } else { 867 } else {
834 var parts = simpleName.split('.'); 868 var parts = _n(simpleName).split('.');
835 if (parts.length > 2) { 869 if (parts.length > 2) {
836 throw new MirrorException( 870 throw new MirrorException(
837 'Internal error in MethodMirror.constructorName: ' 871 'Internal error in MethodMirror.constructorName: '
838 'malformed name <$simpleName>'); 872 'malformed name <$simpleName>');
839 } else if (parts.length == 2) { 873 } else if (parts.length == 2) {
840 _constructorName = parts[1]; 874 _constructorName = _s(parts[1]);
841 } else { 875 } else {
842 _constructorName = ''; 876 _constructorName = _s('');
843 } 877 }
844 } 878 }
845 } 879 }
846 return _constructorName; 880 return _constructorName;
847 } 881 }
848 882
849 final bool isConstConstructor; 883 final bool isConstConstructor;
850 final bool isGenerativeConstructor; 884 final bool isGenerativeConstructor;
851 final bool isRedirectingConstructor; 885 final bool isRedirectingConstructor;
852 final bool isFactoryConstructor; 886 final bool isFactoryConstructor;
853 887
854 String toString() => "MethodMirror on '$simpleName'"; 888 String toString() => "MethodMirror on '$simpleName'";
855 } 889 }
856 890
857 class _LocalVariableMirrorImpl extends _LocalMirrorImpl 891 class _LocalVariableMirrorImpl extends _LocalMirrorImpl
858 implements VariableMirror { 892 implements VariableMirror {
859 _LocalVariableMirrorImpl(this.simpleName, 893 _LocalVariableMirrorImpl(String simpleName,
860 this._owner, 894 this._owner,
861 this._type, 895 this._type,
862 this.isStatic, 896 this.isStatic,
863 this.isFinal) {} 897 this.isFinal)
898 : this.simpleName = _s(simpleName);
864 899
865 final String simpleName; 900 final Symbol simpleName;
866 901
867 String _qualifiedName = null; 902 Symbol _qualifiedName = null;
868 String get qualifiedName { 903 Symbol get qualifiedName {
869 if (_qualifiedName == null) { 904 if (_qualifiedName == null) {
870 _qualifiedName = '${owner.qualifiedName}.${simpleName}'; 905 _qualifiedName = _computeQualifiedName(owner, simpleName);
871 } 906 }
872 return _qualifiedName; 907 return _qualifiedName;
873 } 908 }
874 909
875 var _owner; 910 var _owner;
876 DeclarationMirror get owner { 911 DeclarationMirror get owner {
877 if (_owner is! Mirror) { 912 if (_owner is! Mirror) {
878 _owner = _owner.resolve(mirrors); 913 _owner = _owner.resolve(mirrors);
879 } 914 }
880 return _owner; 915 return _owner;
881 } 916 }
882 917
883 bool get isPrivate { 918 bool get isPrivate {
884 return simpleName.startsWith('_'); 919 return _n(simpleName).startsWith('_');
885 } 920 }
886 921
887 bool get isTopLevel { 922 bool get isTopLevel {
888 return owner is LibraryMirror; 923 return owner is LibraryMirror;
889 } 924 }
890 925
891 SourceLocation get location { 926 SourceLocation get location {
892 throw new UnimplementedError( 927 throw new UnimplementedError(
893 'VariableMirror.location is not implemented'); 928 'VariableMirror.location is not implemented');
894 } 929 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
966 1001
967 // Creates a new local mirror for some Object. 1002 // Creates a new local mirror for some Object.
968 static InstanceMirror reflect(Object reflectee) { 1003 static InstanceMirror reflect(Object reflectee) {
969 return makeLocalInstanceMirror(reflectee); 1004 return makeLocalInstanceMirror(reflectee);
970 } 1005 }
971 1006
972 static ClassMirror reflectClass(Type reflectee) { 1007 static ClassMirror reflectClass(Type reflectee) {
973 throw new UnimplementedError('reflectClass is not implemented'); 1008 throw new UnimplementedError('reflectClass is not implemented');
974 } 1009 }
975 } 1010 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698