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

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

Issue 2765523003: The formatter struggles a bit with these files. (Closed)
Patch Set: The formatter struggles a bit with these files. Created 3 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
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 import "dart:collection" show UnmodifiableListView, UnmodifiableMapView; 7 import "dart:collection" show UnmodifiableListView, UnmodifiableMapView;
8 import "dart:_internal" as internal; 8 import "dart:_internal" as internal;
9 9
10 var _dirty = false; 10 var _dirty = false;
(...skipping 10 matching lines...) Expand all
21 Symbol _s(String name) { 21 Symbol _s(String name) {
22 if (name == null) return null; 22 if (name == null) return null;
23 return new internal.Symbol.unvalidated(name); 23 return new internal.Symbol.unvalidated(name);
24 } 24 }
25 25
26 Symbol _computeQualifiedName(DeclarationMirror owner, Symbol simpleName) { 26 Symbol _computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
27 if (owner == null) return simpleName; 27 if (owner == null) return simpleName;
28 return _s('${_n(owner.qualifiedName)}.${_n(simpleName)}'); 28 return _s('${_n(owner.qualifiedName)}.${_n(simpleName)}');
29 } 29 }
30 30
31 String _makeSignatureString(TypeMirror returnType, 31 String _makeSignatureString(
32 List<ParameterMirror> parameters) { 32 TypeMirror returnType, List<ParameterMirror> parameters) {
33 StringBuffer buf = new StringBuffer(); 33 StringBuffer buf = new StringBuffer();
34 buf.write('('); 34 buf.write('(');
35 bool found_optional_positional = false; 35 bool found_optional_positional = false;
36 bool found_optional_named = false; 36 bool found_optional_named = false;
37 37
38 for (int i = 0; i < parameters.length; i++) { 38 for (int i = 0; i < parameters.length; i++) {
39 var param = parameters[i]; 39 var param = parameters[i];
40 if (param.isOptional && param.isNamed && !found_optional_named) { 40 if (param.isOptional && param.isNamed && !found_optional_named) {
41 buf.write('{'); 41 buf.write('{');
42 found_optional_named = true; 42 found_optional_named = true;
(...skipping 15 matching lines...) Expand all
58 buf.write('}'); 58 buf.write('}');
59 } 59 }
60 if (found_optional_positional) { 60 if (found_optional_positional) {
61 buf.write(']'); 61 buf.write(']');
62 } 62 }
63 buf.write(') -> '); 63 buf.write(') -> ');
64 buf.write(_n(returnType.qualifiedName)); 64 buf.write(_n(returnType.qualifiedName));
65 return buf.toString(); 65 return buf.toString();
66 } 66 }
67 67
68 SourceLocation _location(reflectee) 68 SourceLocation _location(reflectee) native "DeclarationMirror_location";
69 native "DeclarationMirror_location";
70 69
71 List _metadata(reflectee) 70 List _metadata(reflectee) native 'DeclarationMirror_metadata';
72 native 'DeclarationMirror_metadata';
73 71
74 bool _subtypeTest(Type a, Type b) 72 bool _subtypeTest(Type a, Type b) native 'TypeMirror_subtypeTest';
75 native 'TypeMirror_subtypeTest';
76 73
77 class _AccessorCacheAssociation { 74 class _AccessorCacheAssociation {
78 String key; 75 String key;
79 Function value; 76 Function value;
80 bool usedSinceGrowth = true; 77 bool usedSinceGrowth = true;
81 _AccessorCacheAssociation(this.key, this.value); 78 _AccessorCacheAssociation(this.key, this.value);
82 } 79 }
83 80
84 /** 81 /**
85 * A map that will grow as associations are added but will prefer to evict 82 * A map that will grow as associations are added but will prefer to evict
86 * associations that have not been used since the last growth when needing to 83 * associations that have not been used since the last growth when needing to
87 * grow again. Implemented as an open addressing hash table. 84 * grow again. Implemented as an open addressing hash table.
88 */ 85 */
89 class _AccessorCache { 86 class _AccessorCache {
90 List table; 87 List table;
91 int shift; 88 int shift;
92 int mask; 89 int mask;
93 int capacity; // Max number of associations before we start evicting/growing. 90 int capacity; // Max number of associations before we start evicting/growing.
94 int size = 0; // Current number of associations. 91 int size = 0; // Current number of associations.
95 92
96 /** 93 /**
97 * Create a cache whose capacity is 75% of 2^shift. 94 * Create a cache whose capacity is 75% of 2^shift.
98 */ 95 */
99 _AccessorCache.withInitialShift(int shift) { 96 _AccessorCache.withInitialShift(int shift) {
100 // The scheme used here for handling collisions relies on there always 97 // The scheme used here for handling collisions relies on there always
101 // being at least one empty slot. 98 // being at least one empty slot.
102 if (shift < 1) throw new Exception("_AccessorCache requires a shift >= 1"); 99 if (shift < 1) throw new Exception("_AccessorCache requires a shift >= 1");
103 initWithShift(shift); 100 initWithShift(shift);
104 } 101 }
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 } 213 }
217 } 214 }
218 215
219 class _LocalMirrorSystem extends MirrorSystem { 216 class _LocalMirrorSystem extends MirrorSystem {
220 final TypeMirror dynamicType = new _SpecialTypeMirror('dynamic'); 217 final TypeMirror dynamicType = new _SpecialTypeMirror('dynamic');
221 final TypeMirror voidType = new _SpecialTypeMirror('void'); 218 final TypeMirror voidType = new _SpecialTypeMirror('void');
222 219
223 var _libraries; 220 var _libraries;
224 Map<Uri, LibraryMirror> get libraries { 221 Map<Uri, LibraryMirror> get libraries {
225 if ((_libraries == null) || _dirty) { 222 if ((_libraries == null) || _dirty) {
226 _libraries = new Map<Uri, LibraryMirror>.fromIterable( 223 _libraries = new Map<Uri, LibraryMirror>.fromIterable(_computeLibraries(),
227 _computeLibraries(), key: (e) => e.uri); 224 key: (e) => e.uri);
228 _dirty = false; 225 _dirty = false;
229 } 226 }
230 return _libraries; 227 return _libraries;
231 } 228 }
229
232 static _computeLibraries() native "MirrorSystem_libraries"; 230 static _computeLibraries() native "MirrorSystem_libraries";
233 231
234 var _isolate; 232 var _isolate;
235 IsolateMirror get isolate { 233 IsolateMirror get isolate {
236 if (_isolate == null) { 234 if (_isolate == null) {
237 _isolate = _computeIsolate(); 235 _isolate = _computeIsolate();
238 } 236 }
239 return _isolate; 237 return _isolate;
240 } 238 }
239
241 static _computeIsolate() native "MirrorSystem_isolate"; 240 static _computeIsolate() native "MirrorSystem_isolate";
242 241
243 String toString() => "MirrorSystem for isolate '${isolate.debugName}'"; 242 String toString() => "MirrorSystem for isolate '${isolate.debugName}'";
244 } 243 }
245 244
246 class _SourceLocation implements SourceLocation { 245 class _SourceLocation implements SourceLocation {
247 _SourceLocation(uriString, this.line, this.column) 246 _SourceLocation(uriString, this.line, this.column)
248 : this.sourceUri = Uri.parse(uriString); 247 : this.sourceUri = Uri.parse(uriString);
249 248
250 // Line and column positions are 1-origin, or 0 if unknown. 249 // Line and column positions are 1-origin, or 0 if unknown.
(...skipping 21 matching lines...) Expand all
272 } 271 }
273 272
274 class _SyntheticAccessor implements MethodMirror { 273 class _SyntheticAccessor implements MethodMirror {
275 final DeclarationMirror owner; 274 final DeclarationMirror owner;
276 final Symbol simpleName; 275 final Symbol simpleName;
277 final bool isGetter; 276 final bool isGetter;
278 final bool isStatic; 277 final bool isStatic;
279 final bool isTopLevel; 278 final bool isTopLevel;
280 final _target; 279 final _target;
281 280
282 _SyntheticAccessor(this.owner, 281 _SyntheticAccessor(this.owner, this.simpleName, this.isGetter, this.isStatic,
283 this.simpleName, 282 this.isTopLevel, this._target);
284 this.isGetter,
285 this.isStatic,
286 this.isTopLevel,
287 this._target);
288 283
289 bool get isSynthetic => true; 284 bool get isSynthetic => true;
290 bool get isRegularMethod => false; 285 bool get isRegularMethod => false;
291 bool get isOperator => false; 286 bool get isOperator => false;
292 bool get isConstructor => false; 287 bool get isConstructor => false;
293 bool get isConstConstructor => false; 288 bool get isConstConstructor => false;
294 bool get isGenerativeConstructor => false; 289 bool get isGenerativeConstructor => false;
295 bool get isFactoryConstructor => false; 290 bool get isFactoryConstructor => false;
296 bool get isExternal => false; 291 bool get isExternal => false;
297 bool get isRedirectingConstructor => false; 292 bool get isRedirectingConstructor => false;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 InstanceMirror get defaultValue => null; 331 InstanceMirror get defaultValue => null;
337 SourceLocation get location => null; 332 SourceLocation get location => null;
338 List<InstanceMirror> get metadata => _emptyList; 333 List<InstanceMirror> get metadata => _emptyList;
339 } 334 }
340 335
341 abstract class _LocalObjectMirror extends _LocalMirror implements ObjectMirror { 336 abstract class _LocalObjectMirror extends _LocalMirror implements ObjectMirror {
342 final _reflectee; // May be a MirrorReference or an ordinary object. 337 final _reflectee; // May be a MirrorReference or an ordinary object.
343 338
344 _LocalObjectMirror(this._reflectee); 339 _LocalObjectMirror(this._reflectee);
345 340
346 InstanceMirror invoke(Symbol memberName, 341 InstanceMirror invoke(Symbol memberName, List positionalArguments,
347 List positionalArguments, 342 [Map<Symbol, dynamic> namedArguments]) {
348 [Map<Symbol, dynamic> namedArguments]) {
349 int numPositionalArguments = positionalArguments.length; 343 int numPositionalArguments = positionalArguments.length;
350 int numNamedArguments = namedArguments != null ? namedArguments.length : 0; 344 int numNamedArguments = namedArguments != null ? namedArguments.length : 0;
351 int numArguments = numPositionalArguments + numNamedArguments; 345 int numArguments = numPositionalArguments + numNamedArguments;
352 List arguments = new List(numArguments); 346 List arguments = new List(numArguments);
353 arguments.setRange(0, numPositionalArguments, positionalArguments); 347 arguments.setRange(0, numPositionalArguments, positionalArguments);
354 List names = new List(numNamedArguments); 348 List names = new List(numNamedArguments);
355 int argumentIndex = numPositionalArguments; 349 int argumentIndex = numPositionalArguments;
356 int nameIndex = 0; 350 int nameIndex = 0;
357 if (numNamedArguments > 0) { 351 if (numNamedArguments > 0) {
358 namedArguments.forEach((name, value) { 352 namedArguments.forEach((name, value) {
359 arguments[argumentIndex++] = value; 353 arguments[argumentIndex++] = value;
360 names[nameIndex++] = _n(name); 354 names[nameIndex++] = _n(name);
361 }); 355 });
362 } 356 }
363 357
364 return reflect(this._invoke(_reflectee, _n(memberName), arguments, names)); 358 return reflect(this._invoke(_reflectee, _n(memberName), arguments, names));
365 } 359 }
366 360
367 InstanceMirror getField(Symbol memberName) { 361 InstanceMirror getField(Symbol memberName) {
368 return reflect(this._invokeGetter(_reflectee, _n(memberName))); 362 return reflect(this._invokeGetter(_reflectee, _n(memberName)));
369 } 363 }
370 364
371 InstanceMirror setField(Symbol memberName, Object value) { 365 InstanceMirror setField(Symbol memberName, Object value) {
372 this._invokeSetter(_reflectee, _n(memberName), value); 366 this._invokeSetter(_reflectee, _n(memberName), value);
373 return reflect(value); 367 return reflect(value);
374 } 368 }
375 369
376 delegate(Invocation invocation) { 370 delegate(Invocation invocation) {
377 if (invocation.isMethod) { 371 if (invocation.isMethod) {
378 return this.invoke(invocation.memberName, 372 return this
379 invocation.positionalArguments, 373 .invoke(invocation.memberName, invocation.positionalArguments,
380 invocation.namedArguments).reflectee; 374 invocation.namedArguments)
375 .reflectee;
381 } 376 }
382 if (invocation.isGetter) { 377 if (invocation.isGetter) {
383 return this.getField(invocation.memberName).reflectee; 378 return this.getField(invocation.memberName).reflectee;
384 } 379 }
385 if (invocation.isSetter) { 380 if (invocation.isSetter) {
386 var unwrapped = _n(invocation.memberName); 381 var unwrapped = _n(invocation.memberName);
387 var withoutEqual = _s(unwrapped.substring(0, unwrapped.length - 1)); 382 var withoutEqual = _s(unwrapped.substring(0, unwrapped.length - 1));
388 var arg = invocation.positionalArguments[0]; 383 var arg = invocation.positionalArguments[0];
389 this.setField(withoutEqual, arg).reflectee; 384 this.setField(withoutEqual, arg).reflectee;
390 return arg; 385 return arg;
391 } 386 }
392 throw "UNREACHABLE"; 387 throw "UNREACHABLE";
393 } 388 }
394 } 389 }
395 390
396 class _LocalInstanceMirror extends _LocalObjectMirror 391 class _LocalInstanceMirror extends _LocalObjectMirror
397 implements InstanceMirror { 392 implements InstanceMirror {
398
399 _LocalInstanceMirror(reflectee) : super(reflectee); 393 _LocalInstanceMirror(reflectee) : super(reflectee);
400 394
401 ClassMirror _type; 395 ClassMirror _type;
402 ClassMirror get type { 396 ClassMirror get type {
403 if (_type == null) { 397 if (_type == null) {
404 // Note it not safe to use reflectee.runtimeType because runtimeType may 398 // Note it not safe to use reflectee.runtimeType because runtimeType may
405 // be overridden. 399 // be overridden.
406 _type = reflectType(_computeType(reflectee)); 400 _type = reflectType(_computeType(reflectee));
407 } 401 }
408 return _type; 402 return _type;
409 } 403 }
410 404
411 // LocalInstanceMirrors always reflect local instances 405 // LocalInstanceMirrors always reflect local instances
412 bool get hasReflectee => true; 406 bool get hasReflectee => true;
413 407
414 get reflectee => _reflectee; 408 get reflectee => _reflectee;
415 409
416 String toString() => 'InstanceMirror on ${Error.safeToString(_reflectee)}'; 410 String toString() => 'InstanceMirror on ${Error.safeToString(_reflectee)}';
417 411
418 bool operator ==(other) { 412 bool operator ==(other) {
419 return other is _LocalInstanceMirror && 413 return other is _LocalInstanceMirror &&
420 identical(_reflectee, other._reflectee); 414 identical(_reflectee, other._reflectee);
421 } 415 }
422 416
423 int get hashCode { 417 int get hashCode {
424 // Avoid hash collisions with the reflectee. This constant is in Smi range 418 // Avoid hash collisions with the reflectee. This constant is in Smi range
425 // and happens to be the inner padding from RFC 2104. 419 // and happens to be the inner padding from RFC 2104.
426 return identityHashCode(_reflectee) ^ 0x36363636; 420 return identityHashCode(_reflectee) ^ 0x36363636;
427 } 421 }
428 422
429 static var _getFieldClosures = new _AccessorCache.withInitialShift(4); 423 static var _getFieldClosures = new _AccessorCache.withInitialShift(4);
430 static var _setFieldClosures = new _AccessorCache.withInitialShift(4); 424 static var _setFieldClosures = new _AccessorCache.withInitialShift(4);
431 425
432 _createGetterClosure(unwrapped) { 426 _createGetterClosure(unwrapped) {
433 var atPosition = unwrapped.indexOf('@'); 427 var atPosition = unwrapped.indexOf('@');
434 if (atPosition == -1) { 428 if (atPosition == -1) {
435 // Public symbol. 429 // Public symbol.
436 return _eval('(x) => x.$unwrapped', null); 430 return _eval('(x) => x.$unwrapped', null);
437 } else { 431 } else {
438 // Private symbol. 432 // Private symbol.
439 var withoutKey = unwrapped.substring(0, atPosition); 433 var withoutKey = unwrapped.substring(0, atPosition);
440 var privateKey = unwrapped.substring(atPosition); 434 var privateKey = unwrapped.substring(atPosition);
441 return _eval('(x) => x.$withoutKey', privateKey); 435 return _eval('(x) => x.$withoutKey', privateKey);
442 } 436 }
443 } 437 }
444 438
445 _getFieldSlow(unwrapped) { 439 _getFieldSlow(unwrapped) {
446 // Slow path factored out to give the fast path a better chance at being 440 // Slow path factored out to give the fast path a better chance at being
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 var f = _setFieldClosures[unwrapped]; 494 var f = _setFieldClosures[unwrapped];
501 return (f == null) 495 return (f == null)
502 ? _setFieldSlow(unwrapped, arg) 496 ? _setFieldSlow(unwrapped, arg)
503 : reflect(f(_reflectee, arg)); 497 : reflect(f(_reflectee, arg));
504 } 498 }
505 499
506 static _eval(expression, privateKey) 500 static _eval(expression, privateKey)
507 native "Mirrors_evalInLibraryWithPrivateKey"; 501 native "Mirrors_evalInLibraryWithPrivateKey";
508 502
509 // Override to include the receiver in the arguments. 503 // Override to include the receiver in the arguments.
510 InstanceMirror invoke(Symbol memberName, 504 InstanceMirror invoke(Symbol memberName, List positionalArguments,
511 List positionalArguments, 505 [Map<Symbol, dynamic> namedArguments]) {
512 [Map<Symbol, dynamic> namedArguments]) { 506 int numPositionalArguments = positionalArguments.length + 1; // Receiver.
513 int numPositionalArguments = positionalArguments.length + 1; // Receiver.
514 int numNamedArguments = namedArguments != null ? namedArguments.length : 0; 507 int numNamedArguments = namedArguments != null ? namedArguments.length : 0;
515 int numArguments = numPositionalArguments + numNamedArguments; 508 int numArguments = numPositionalArguments + numNamedArguments;
516 List arguments = new List(numArguments); 509 List arguments = new List(numArguments);
517 arguments[0] = _reflectee; // Receiver. 510 arguments[0] = _reflectee; // Receiver.
518 arguments.setRange(1, numPositionalArguments, positionalArguments); 511 arguments.setRange(1, numPositionalArguments, positionalArguments);
519 List names = new List(numNamedArguments); 512 List names = new List(numNamedArguments);
520 int argumentIndex = numPositionalArguments; 513 int argumentIndex = numPositionalArguments;
521 int nameIndex = 0; 514 int nameIndex = 0;
522 if (numNamedArguments > 0) { 515 if (numNamedArguments > 0) {
523 namedArguments.forEach((name, value) { 516 namedArguments.forEach((name, value) {
524 arguments[argumentIndex++] = value; 517 arguments[argumentIndex++] = value;
525 names[nameIndex++] = _n(name); 518 names[nameIndex++] = _n(name);
526 }); 519 });
527 } 520 }
528 521
529 return reflect(this._invoke(_reflectee, _n(memberName), arguments, names)); 522 return reflect(this._invoke(_reflectee, _n(memberName), arguments, names));
530 } 523 }
531 524
532 _invoke(reflectee, functionName, arguments, argumentNames) 525 _invoke(reflectee, functionName, arguments, argumentNames)
533 native 'InstanceMirror_invoke'; 526 native 'InstanceMirror_invoke';
534 527
535 _invokeGetter(reflectee, getterName) 528 _invokeGetter(reflectee, getterName) native 'InstanceMirror_invokeGetter';
536 native 'InstanceMirror_invokeGetter';
537 529
538 _invokeSetter(reflectee, setterName, value) 530 _invokeSetter(reflectee, setterName, value)
539 native 'InstanceMirror_invokeSetter'; 531 native 'InstanceMirror_invokeSetter';
540 532
541 static _computeType(reflectee) 533 static _computeType(reflectee) native 'InstanceMirror_computeType';
542 native 'InstanceMirror_computeType';
543 } 534 }
544 535
545 class _LocalClosureMirror extends _LocalInstanceMirror 536 class _LocalClosureMirror extends _LocalInstanceMirror
546 implements ClosureMirror { 537 implements ClosureMirror {
547 _LocalClosureMirror(reflectee) : super(reflectee); 538 _LocalClosureMirror(reflectee) : super(reflectee);
548 539
549 MethodMirror _function; 540 MethodMirror _function;
550 MethodMirror get function { 541 MethodMirror get function {
551 if (_function == null) { 542 if (_function == null) {
552 _function = _computeFunction(reflectee); 543 _function = _computeFunction(reflectee);
553 } 544 }
554 return _function; 545 return _function;
555 } 546 }
556 547
557 InstanceMirror apply(List<Object> positionalArguments, 548 InstanceMirror apply(List<Object> positionalArguments,
558 [Map<Symbol, Object> namedArguments]) { 549 [Map<Symbol, Object> namedArguments]) {
559 return this.invoke(#call, positionalArguments, namedArguments); 550 return this.invoke(#call, positionalArguments, namedArguments);
560 } 551 }
561 552
562 String toString() => "ClosureMirror on '${Error.safeToString(_reflectee)}'"; 553 String toString() => "ClosureMirror on '${Error.safeToString(_reflectee)}'";
563 554
564 static _computeFunction(reflectee) 555 static _computeFunction(reflectee) native 'ClosureMirror_function';
565 native 'ClosureMirror_function';
566 } 556 }
567 557
568 class _LocalClassMirror extends _LocalObjectMirror 558 class _LocalClassMirror extends _LocalObjectMirror implements ClassMirror {
569 implements ClassMirror {
570 final Type _reflectedType; 559 final Type _reflectedType;
571 Symbol _simpleName; 560 Symbol _simpleName;
572 DeclarationMirror _owner; 561 DeclarationMirror _owner;
573 final bool isAbstract; 562 final bool isAbstract;
574 final bool _isGeneric; 563 final bool _isGeneric;
575 final bool _isMixinAlias; 564 final bool _isMixinAlias;
576 final bool _isGenericDeclaration; 565 final bool _isGenericDeclaration;
577 final bool isEnum; 566 final bool isEnum;
578 Type _instantiator; 567 Type _instantiator;
579 568
580 _LocalClassMirror(reflectee, 569 _LocalClassMirror(
581 reflectedType, 570 reflectee,
582 String simpleName, 571 reflectedType,
583 this._owner, 572 String simpleName,
584 this.isAbstract, 573 this._owner,
585 this._isGeneric, 574 this.isAbstract,
586 this._isMixinAlias, 575 this._isGeneric,
587 this._isGenericDeclaration, 576 this._isMixinAlias,
588 this.isEnum) 577 this._isGenericDeclaration,
578 this.isEnum)
589 : this._simpleName = _s(simpleName), 579 : this._simpleName = _s(simpleName),
590 this._reflectedType = reflectedType, 580 this._reflectedType = reflectedType,
591 this._instantiator = reflectedType, 581 this._instantiator = reflectedType,
592 super(reflectee); 582 super(reflectee);
593 583
594
595 bool get hasReflectedType => !_isGenericDeclaration; 584 bool get hasReflectedType => !_isGenericDeclaration;
596 Type get reflectedType { 585 Type get reflectedType {
597 if (!hasReflectedType) { 586 if (!hasReflectedType) {
598 throw new UnsupportedError( 587 throw new UnsupportedError(
599 "Declarations of generics have no reflected type"); 588 "Declarations of generics have no reflected type");
600 } 589 }
601 return _reflectedType; 590 return _reflectedType;
602 } 591 }
603 592
604 Symbol get simpleName { 593 Symbol get simpleName {
605 // All but anonymous mixin applications have their name set at construction. 594 // All but anonymous mixin applications have their name set at construction.
606 if(_simpleName == null) { 595 if (_simpleName == null) {
607 _simpleName = this._mixinApplicationName; 596 _simpleName = this._mixinApplicationName;
608 } 597 }
609 return _simpleName; 598 return _simpleName;
610 } 599 }
611 600
612 Symbol _qualifiedName = null; 601 Symbol _qualifiedName = null;
613 Symbol get qualifiedName { 602 Symbol get qualifiedName {
614 if (_qualifiedName == null) { 603 if (_qualifiedName == null) {
615 _qualifiedName = _computeQualifiedName(owner, simpleName); 604 _qualifiedName = _computeQualifiedName(owner, simpleName);
616 } 605 }
(...skipping 24 matching lines...) Expand all
641 : _supertypeInstantiated(_reflectedType); 630 : _supertypeInstantiated(_reflectedType);
642 if (supertype == null) { 631 if (supertype == null) {
643 // Object has no superclass. 632 // Object has no superclass.
644 return null; 633 return null;
645 } 634 }
646 _trueSuperclassField = reflectType(supertype); 635 _trueSuperclassField = reflectType(supertype);
647 _trueSuperclassField._instantiator = _instantiator; 636 _trueSuperclassField._instantiator = _instantiator;
648 } 637 }
649 return _trueSuperclassField; 638 return _trueSuperclassField;
650 } 639 }
640
651 ClassMirror get superclass { 641 ClassMirror get superclass {
652 return _isMixinAlias ? _trueSuperclass._trueSuperclass : _trueSuperclass; 642 return _isMixinAlias ? _trueSuperclass._trueSuperclass : _trueSuperclass;
653 } 643 }
654 644
655 var _superinterfaces; 645 var _superinterfaces;
656 List<ClassMirror> get superinterfaces { 646 List<ClassMirror> get superinterfaces {
657 if (_superinterfaces == null) { 647 if (_superinterfaces == null) {
658 _superinterfaces = isOriginalDeclaration 648 _superinterfaces = isOriginalDeclaration
659 ? _nativeInterfaces(_reflectedType) 649 ? _nativeInterfaces(_reflectedType)
660 : _nativeInterfacesInstantiated(_reflectedType); 650 : _nativeInterfacesInstantiated(_reflectedType);
661 _superinterfaces = 651 _superinterfaces =
662 new UnmodifiableListView(_superinterfaces.map(reflectType)); 652 new UnmodifiableListView(_superinterfaces.map(reflectType));
663 } 653 }
664 return _superinterfaces; 654 return _superinterfaces;
665 } 655 }
666 656
667 get _mixinApplicationName { 657 get _mixinApplicationName {
668 var mixins = new List<ClassMirror>(); 658 var mixins = new List<ClassMirror>();
669 var klass = this; 659 var klass = this;
670 while (_nativeMixin(klass._reflectedType) != null) { 660 while (_nativeMixin(klass._reflectedType) != null) {
671 mixins.add(klass.mixin); 661 mixins.add(klass.mixin);
672 klass = klass.superclass; 662 klass = klass.superclass;
673 } 663 }
674 return _s( 664 return _s(_n(klass.qualifiedName) +
675 _n(klass.qualifiedName) 665 ' with ' +
676 + ' with ' 666 mixins.reversed.map((m) => _n(m.qualifiedName)).join(', '));
677 + mixins.reversed.map((m)=>_n(m.qualifiedName)).join(', '));
678 } 667 }
679 668
680 var _mixin; 669 var _mixin;
681 ClassMirror get mixin { 670 ClassMirror get mixin {
682 if (_mixin == null) { 671 if (_mixin == null) {
683 if (_isMixinAlias) { 672 if (_isMixinAlias) {
684 Type mixinType = _nativeMixinInstantiated( 673 Type mixinType = _nativeMixinInstantiated(
685 _trueSuperclass._reflectedType, _instantiator); 674 _trueSuperclass._reflectedType, _instantiator);
686 _mixin = reflectType(mixinType); 675 _mixin = reflectType(mixinType);
687 } else { 676 } else {
688 Type mixinType = _nativeMixinInstantiated(_reflectedType, 677 Type mixinType =
689 _instantiator); 678 _nativeMixinInstantiated(_reflectedType, _instantiator);
690 if (mixinType == null) { 679 if (mixinType == null) {
691 // The reflectee is not a mixin application. 680 // The reflectee is not a mixin application.
692 _mixin = this; 681 _mixin = this;
693 } else { 682 } else {
694 _mixin = reflectType(mixinType); 683 _mixin = reflectType(mixinType);
695 } 684 }
696 } 685 }
697 } 686 }
698 return _mixin; 687 return _mixin;
699 } 688 }
(...skipping 24 matching lines...) Expand all
724 } 713 }
725 714
726 var _cachedInstanceMembers; 715 var _cachedInstanceMembers;
727 Map<Symbol, MethodMirror> get instanceMembers { 716 Map<Symbol, MethodMirror> get instanceMembers {
728 if (_cachedInstanceMembers == null) { 717 if (_cachedInstanceMembers == null) {
729 var result = new Map<Symbol, MethodMirror>(); 718 var result = new Map<Symbol, MethodMirror>();
730 if (superclass != null) { 719 if (superclass != null) {
731 result.addAll(superclass.instanceMembers); 720 result.addAll(superclass.instanceMembers);
732 } 721 }
733 declarations.values.forEach((decl) { 722 declarations.values.forEach((decl) {
734 if (decl is MethodMirror && !decl.isStatic && 723 if (decl is MethodMirror &&
735 !decl.isConstructor && !decl.isAbstract) { 724 !decl.isStatic &&
725 !decl.isConstructor &&
726 !decl.isAbstract) {
736 result[decl.simpleName] = decl; 727 result[decl.simpleName] = decl;
737 } 728 }
738 if (decl is VariableMirror && !decl.isStatic) { 729 if (decl is VariableMirror && !decl.isStatic) {
739 var getterName = decl.simpleName; 730 var getterName = decl.simpleName;
740 result[getterName] = 731 result[getterName] = new _SyntheticAccessor(
741 new _SyntheticAccessor(this, getterName, true, false, false, decl) ; 732 this, getterName, true, false, false, decl);
742 if (!decl.isFinal) { 733 if (!decl.isFinal) {
743 var setterName = _asSetter(decl.simpleName, this.owner); 734 var setterName = _asSetter(decl.simpleName, this.owner);
744 result[setterName] = new _SyntheticAccessor( 735 result[setterName] = new _SyntheticAccessor(
745 this, setterName, false, false, false, decl); 736 this, setterName, false, false, false, decl);
746 } 737 }
747 } 738 }
748 }); 739 });
749 _cachedInstanceMembers = 740 _cachedInstanceMembers =
750 new UnmodifiableMapView<Symbol, MethodMirror>(result); 741 new UnmodifiableMapView<Symbol, MethodMirror>(result);
751 } 742 }
752 return _cachedInstanceMembers; 743 return _cachedInstanceMembers;
753 } 744 }
754 745
755 Map<Symbol, DeclarationMirror> _declarations; 746 Map<Symbol, DeclarationMirror> _declarations;
756 Map<Symbol, DeclarationMirror> get declarations { 747 Map<Symbol, DeclarationMirror> get declarations {
757 if (_declarations != null) return _declarations; 748 if (_declarations != null) return _declarations;
758 749
759 var decls = new Map<Symbol, DeclarationMirror>(); 750 var decls = new Map<Symbol, DeclarationMirror>();
760 751
761 var whoseMembers = _isMixinAlias ? _trueSuperclass : this; 752 var whoseMembers = _isMixinAlias ? _trueSuperclass : this;
762 var members = mixin._computeMembers(_instantiator, 753 var members =
763 whoseMembers.mixin._reflectee); 754 mixin._computeMembers(_instantiator, whoseMembers.mixin._reflectee);
764 for (var member in members) { 755 for (var member in members) {
765 decls[member.simpleName] = member; 756 decls[member.simpleName] = member;
766 } 757 }
767 758
768 var constructors = _computeConstructors(_instantiator, _reflectee); 759 var constructors = _computeConstructors(_instantiator, _reflectee);
769 var stringName = _n(simpleName); 760 var stringName = _n(simpleName);
770 for (var constructor in constructors) { 761 for (var constructor in constructors) {
771 constructor._patchConstructorName(stringName); 762 constructor._patchConstructorName(stringName);
772 decls[constructor.simpleName] = constructor; 763 decls[constructor.simpleName] = constructor;
773 } 764 }
774 765
775 for (var typeVariable in typeVariables) { 766 for (var typeVariable in typeVariables) {
776 decls[typeVariable.simpleName] = typeVariable; 767 decls[typeVariable.simpleName] = typeVariable;
777 } 768 }
778 769
779 return _declarations = 770 return _declarations =
780 new UnmodifiableMapView<Symbol, DeclarationMirror>(decls); 771 new UnmodifiableMapView<Symbol, DeclarationMirror>(decls);
781 } 772 }
782 773
783 bool get _isAnonymousMixinApplication { 774 bool get _isAnonymousMixinApplication {
784 if (_isMixinAlias) return false; // Named mixin application. 775 if (_isMixinAlias) return false; // Named mixin application.
785 if (mixin == this) return false; // Not a mixin application. 776 if (mixin == this) return false; // Not a mixin application.
786 return true; 777 return true;
787 } 778 }
788 779
789 List<TypeVariableMirror> _typeVariables = null; 780 List<TypeVariableMirror> _typeVariables = null;
790 List<TypeVariableMirror> get typeVariables { 781 List<TypeVariableMirror> get typeVariables {
791 if (_typeVariables == null) { 782 if (_typeVariables == null) {
792 if (_isAnonymousMixinApplication) return _typeVariables = _emptyList; 783 if (_isAnonymousMixinApplication) return _typeVariables = _emptyList;
793 _typeVariables = new List<TypeVariableMirror>(); 784 _typeVariables = new List<TypeVariableMirror>();
794 785
795 List params = _ClassMirror_type_variables(_reflectee); 786 List params = _ClassMirror_type_variables(_reflectee);
796 ClassMirror owner = originalDeclaration; 787 ClassMirror owner = originalDeclaration;
797 var mirror; 788 var mirror;
798 for (var i = 0; i < params.length; i += 2) { 789 for (var i = 0; i < params.length; i += 2) {
799 mirror = new _LocalTypeVariableMirror( 790 mirror = new _LocalTypeVariableMirror(params[i + 1], params[i], owner);
800 params[i + 1], params[i], owner);
801 _typeVariables.add(mirror); 791 _typeVariables.add(mirror);
802 } 792 }
803 _typeVariables = new UnmodifiableListView(_typeVariables); 793 _typeVariables = new UnmodifiableListView(_typeVariables);
804 } 794 }
805 return _typeVariables; 795 return _typeVariables;
806 } 796 }
807 797
808 List<TypeMirror> _typeArguments = null; 798 List<TypeMirror> _typeArguments = null;
809 List<TypeMirror> get typeArguments { 799 List<TypeMirror> get typeArguments {
810 if(_typeArguments == null) { 800 if (_typeArguments == null) {
811 if(_isGenericDeclaration || _isAnonymousMixinApplication) { 801 if (_isGenericDeclaration || _isAnonymousMixinApplication) {
812 _typeArguments = _emptyList; 802 _typeArguments = _emptyList;
813 } else { 803 } else {
814 _typeArguments = 804 _typeArguments =
815 new UnmodifiableListView(_computeTypeArguments(_reflectedType)); 805 new UnmodifiableListView(_computeTypeArguments(_reflectedType));
816 } 806 }
817 } 807 }
818 return _typeArguments; 808 return _typeArguments;
819 } 809 }
820 810
821 bool get isOriginalDeclaration => !_isGeneric || _isGenericDeclaration; 811 bool get isOriginalDeclaration => !_isGeneric || _isGenericDeclaration;
822 812
823 ClassMirror get originalDeclaration { 813 ClassMirror get originalDeclaration {
824 if (isOriginalDeclaration) { 814 if (isOriginalDeclaration) {
825 return this; 815 return this;
826 } else { 816 } else {
827 return reflectClass(_reflectedType); 817 return reflectClass(_reflectedType);
828 } 818 }
829 } 819 }
830 820
831 String toString() => "ClassMirror on '${MirrorSystem.getName(simpleName)}'"; 821 String toString() => "ClassMirror on '${MirrorSystem.getName(simpleName)}'";
832 822
833 InstanceMirror newInstance(Symbol constructorName, 823 InstanceMirror newInstance(Symbol constructorName, List positionalArguments,
834 List positionalArguments, 824 [Map<Symbol, dynamic> namedArguments]) {
835 [Map<Symbol, dynamic> namedArguments]) {
836 // Native code will add the 1 or 2 implicit arguments depending on whether 825 // Native code will add the 1 or 2 implicit arguments depending on whether
837 // we end up invoking a factory or constructor respectively. 826 // we end up invoking a factory or constructor respectively.
838 int numPositionalArguments = positionalArguments.length; 827 int numPositionalArguments = positionalArguments.length;
839 int numNamedArguments = namedArguments != null ? namedArguments.length : 0; 828 int numNamedArguments = namedArguments != null ? namedArguments.length : 0;
840 int numArguments = numPositionalArguments + numNamedArguments; 829 int numArguments = numPositionalArguments + numNamedArguments;
841 List arguments = new List(numArguments); 830 List arguments = new List(numArguments);
842 arguments.setRange(0, numPositionalArguments, positionalArguments); 831 arguments.setRange(0, numPositionalArguments, positionalArguments);
843 List names = new List(numNamedArguments); 832 List names = new List(numNamedArguments);
844 int argumentIndex = numPositionalArguments; 833 int argumentIndex = numPositionalArguments;
845 int nameIndex = 0; 834 int nameIndex = 0;
846 if (numNamedArguments > 0) { 835 if (numNamedArguments > 0) {
847 namedArguments.forEach((name, value) { 836 namedArguments.forEach((name, value) {
848 arguments[argumentIndex++] = value; 837 arguments[argumentIndex++] = value;
849 names[nameIndex++] = _n(name); 838 names[nameIndex++] = _n(name);
850 }); 839 });
851 } 840 }
852 841
853 return reflect(_invokeConstructor(_reflectee, 842 return reflect(_invokeConstructor(
854 _reflectedType, 843 _reflectee, _reflectedType, _n(constructorName), arguments, names));
855 _n(constructorName),
856 arguments,
857 names));
858 } 844 }
859 845
860 List<InstanceMirror> get metadata { 846 List<InstanceMirror> get metadata {
861 // Get the metadata objects, convert them into InstanceMirrors using 847 // Get the metadata objects, convert them into InstanceMirrors using
862 // reflect() and then make them into a Dart list. 848 // reflect() and then make them into a Dart list.
863 return new UnmodifiableListView(_metadata(_reflectee).map(reflect)); 849 return new UnmodifiableListView(_metadata(_reflectee).map(reflect));
864 } 850 }
865 851
866 bool operator ==(other) { 852 bool operator ==(other) {
867 return this.runtimeType == other.runtimeType && 853 return this.runtimeType == other.runtimeType &&
868 this._reflectee == other._reflectee && 854 this._reflectee == other._reflectee &&
869 this._reflectedType == other._reflectedType && 855 this._reflectedType == other._reflectedType &&
870 this._isGenericDeclaration == other._isGenericDeclaration; 856 this._isGenericDeclaration == other._isGenericDeclaration;
871 } 857 }
872 858
873 int get hashCode => simpleName.hashCode; 859 int get hashCode => simpleName.hashCode;
874 860
875 bool isSubtypeOf(TypeMirror other) { 861 bool isSubtypeOf(TypeMirror other) {
876 if (other == currentMirrorSystem().dynamicType) return true; 862 if (other == currentMirrorSystem().dynamicType) return true;
877 if (other == currentMirrorSystem().voidType) return false; 863 if (other == currentMirrorSystem().voidType) return false;
878 return _subtypeTest(_reflectedType, other._reflectedType); 864 return _subtypeTest(_reflectedType, other._reflectedType);
879 } 865 }
880 866
881 bool isAssignableTo(TypeMirror other) { 867 bool isAssignableTo(TypeMirror other) {
882 if (other == currentMirrorSystem().dynamicType) return true; 868 if (other == currentMirrorSystem().dynamicType) return true;
883 if (other == currentMirrorSystem().voidType) return false; 869 if (other == currentMirrorSystem().voidType) return false;
884 return _subtypeTest(_reflectedType, other._reflectedType) 870 return _subtypeTest(_reflectedType, other._reflectedType) ||
885 || _subtypeTest(other._reflectedType, _reflectedType); 871 _subtypeTest(other._reflectedType, _reflectedType);
886 } 872 }
887 873
888 bool isSubclassOf(ClassMirror other) { 874 bool isSubclassOf(ClassMirror other) {
889 if (other is! ClassMirror) throw new ArgumentError(other); 875 if (other is! ClassMirror) throw new ArgumentError(other);
890 ClassMirror otherDeclaration = other.originalDeclaration; 876 ClassMirror otherDeclaration = other.originalDeclaration;
891 ClassMirror c = this; 877 ClassMirror c = this;
892 while (c != null) { 878 while (c != null) {
893 c = c.originalDeclaration; 879 c = c.originalDeclaration;
894 if (c == otherDeclaration) return true; 880 if (c == otherDeclaration) return true;
895 c = c.superclass; 881 c = c.superclass;
896 } 882 }
897 return false; 883 return false;
898 } 884 }
899 885
900 static _libraryUri(reflectee) 886 static _libraryUri(reflectee) native "ClassMirror_libraryUri";
901 native "ClassMirror_libraryUri";
902 887
903 static _supertype(reflectedType) 888 static _supertype(reflectedType) native "ClassMirror_supertype";
904 native "ClassMirror_supertype";
905 889
906 static _supertypeInstantiated(reflectedType) 890 static _supertypeInstantiated(reflectedType)
907 native "ClassMirror_supertype_instantiated"; 891 native "ClassMirror_supertype_instantiated";
908 892
909 static _nativeInterfaces(reflectedType) 893 static _nativeInterfaces(reflectedType) native "ClassMirror_interfaces";
910 native "ClassMirror_interfaces";
911 894
912 static _nativeInterfacesInstantiated(reflectedType) 895 static _nativeInterfacesInstantiated(reflectedType)
913 native "ClassMirror_interfaces_instantiated"; 896 native "ClassMirror_interfaces_instantiated";
914 897
915 static _nativeMixin(reflectedType) 898 static _nativeMixin(reflectedType) native "ClassMirror_mixin";
916 native "ClassMirror_mixin";
917 899
918 static _nativeMixinInstantiated(reflectedType, instantiator) 900 static _nativeMixinInstantiated(reflectedType, instantiator)
919 native "ClassMirror_mixin_instantiated"; 901 native "ClassMirror_mixin_instantiated";
920 902
921 _computeMembers(reflectee, instantiator) 903 _computeMembers(reflectee, instantiator) native "ClassMirror_members";
922 native "ClassMirror_members";
923 904
924 _computeConstructors(reflectee, instantiator) 905 _computeConstructors(reflectee, instantiator)
925 native "ClassMirror_constructors"; 906 native "ClassMirror_constructors";
926 907
927 _invoke(reflectee, memberName, arguments, argumentNames) 908 _invoke(reflectee, memberName, arguments, argumentNames)
928 native 'ClassMirror_invoke'; 909 native 'ClassMirror_invoke';
929 910
930 _invokeGetter(reflectee, getterName) 911 _invokeGetter(reflectee, getterName) native 'ClassMirror_invokeGetter';
931 native 'ClassMirror_invokeGetter';
932 912
933 _invokeSetter(reflectee, setterName, value) 913 _invokeSetter(reflectee, setterName, value) native 'ClassMirror_invokeSetter';
934 native 'ClassMirror_invokeSetter';
935 914
936 static _invokeConstructor(reflectee, type, constructorName, arguments, argumen tNames) 915 static _invokeConstructor(reflectee, type, constructorName, arguments,
937 native 'ClassMirror_invokeConstructor'; 916 argumentNames) native 'ClassMirror_invokeConstructor';
938 917
939 static _ClassMirror_type_variables(reflectee) 918 static _ClassMirror_type_variables(reflectee)
940 native "ClassMirror_type_variables"; 919 native "ClassMirror_type_variables";
941 920
942 static _computeTypeArguments(reflectee) 921 static _computeTypeArguments(reflectee) native "ClassMirror_type_arguments";
943 native "ClassMirror_type_arguments";
944 } 922 }
945 923
946 class _LocalFunctionTypeMirror extends _LocalClassMirror 924 class _LocalFunctionTypeMirror extends _LocalClassMirror
947 implements FunctionTypeMirror { 925 implements FunctionTypeMirror {
948 final _functionReflectee; 926 final _functionReflectee;
949 _LocalFunctionTypeMirror(reflectee, this._functionReflectee, reflectedType) 927 _LocalFunctionTypeMirror(reflectee, this._functionReflectee, reflectedType)
950 : super(reflectee, reflectedType, null, null, false, false, false, false, false); 928 : super(reflectee, reflectedType, null, null, false, false, false, false,
929 false);
951 930
952 bool get _isAnonymousMixinApplication => false; 931 bool get _isAnonymousMixinApplication => false;
953 932
954 // FunctionTypeMirrors have a simpleName generated from their signature. 933 // FunctionTypeMirrors have a simpleName generated from their signature.
955 Symbol _simpleName = null; 934 Symbol _simpleName = null;
956 Symbol get simpleName { 935 Symbol get simpleName {
957 if (_simpleName == null) { 936 if (_simpleName == null) {
958 _simpleName = _s(_makeSignatureString(returnType, parameters)); 937 _simpleName = _s(_makeSignatureString(returnType, parameters));
959 } 938 }
960 return _simpleName; 939 return _simpleName;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1029 } 1008 }
1030 1009
1031 List<InstanceMirror> get metadata { 1010 List<InstanceMirror> get metadata {
1032 // Get the metadata objects, convert them into InstanceMirrors using 1011 // Get the metadata objects, convert them into InstanceMirrors using
1033 // reflect() and then make them into a Dart list. 1012 // reflect() and then make them into a Dart list.
1034 return new UnmodifiableListView(_metadata(_reflectee).map(reflect)); 1013 return new UnmodifiableListView(_metadata(_reflectee).map(reflect));
1035 } 1014 }
1036 1015
1037 bool operator ==(other) { 1016 bool operator ==(other) {
1038 return this.runtimeType == other.runtimeType && 1017 return this.runtimeType == other.runtimeType &&
1039 this._reflectee == other._reflectee; 1018 this._reflectee == other._reflectee;
1040 } 1019 }
1041 1020
1042 int get hashCode => simpleName.hashCode; 1021 int get hashCode => simpleName.hashCode;
1043 } 1022 }
1044 1023
1045 class _LocalTypeVariableMirror extends _LocalDeclarationMirror 1024 class _LocalTypeVariableMirror extends _LocalDeclarationMirror
1046 implements TypeVariableMirror { 1025 implements TypeVariableMirror {
1047 _LocalTypeVariableMirror(reflectee, 1026 _LocalTypeVariableMirror(reflectee, String simpleName, this._owner)
1048 String simpleName,
1049 this._owner)
1050 : super(reflectee, _s(simpleName)); 1027 : super(reflectee, _s(simpleName));
1051 1028
1052 DeclarationMirror _owner; 1029 DeclarationMirror _owner;
1053 DeclarationMirror get owner { 1030 DeclarationMirror get owner {
1054 if (_owner == null) { 1031 if (_owner == null) {
1055 _owner = _TypeVariableMirror_owner(_reflectee).originalDeclaration; 1032 _owner = _TypeVariableMirror_owner(_reflectee).originalDeclaration;
1056 } 1033 }
1057 return _owner; 1034 return _owner;
1058 } 1035 }
1059 1036
1060 bool get isStatic => false; 1037 bool get isStatic => false;
1061 bool get isTopLevel => false; 1038 bool get isTopLevel => false;
1062 1039
1063 TypeMirror _upperBound = null; 1040 TypeMirror _upperBound = null;
1064 TypeMirror get upperBound { 1041 TypeMirror get upperBound {
1065 if (_upperBound == null) { 1042 if (_upperBound == null) {
1066 _upperBound = reflectType(_TypeVariableMirror_upper_bound(_reflectee)); 1043 _upperBound = reflectType(_TypeVariableMirror_upper_bound(_reflectee));
1067 } 1044 }
1068 return _upperBound; 1045 return _upperBound;
1069 } 1046 }
1070 1047
1071 bool get hasReflectedType => false; 1048 bool get hasReflectedType => false;
1072 Type get reflectedType { 1049 Type get reflectedType {
1073 throw new UnsupportedError('Type variables have no reflected type'); 1050 throw new UnsupportedError('Type variables have no reflected type');
1074 } 1051 }
1052
1075 Type get _reflectedType => _reflectee; 1053 Type get _reflectedType => _reflectee;
1076 1054
1077 List<TypeVariableMirror> get typeVariables => _emptyList; 1055 List<TypeVariableMirror> get typeVariables => _emptyList;
1078 List<TypeMirror> get typeArguments => _emptyList; 1056 List<TypeMirror> get typeArguments => _emptyList;
1079 1057
1080 bool get isOriginalDeclaration => true; 1058 bool get isOriginalDeclaration => true;
1081 TypeMirror get originalDeclaration => this; 1059 TypeMirror get originalDeclaration => this;
1082 1060
1083 String toString() => "TypeVariableMirror on '${_n(simpleName)}'"; 1061 String toString() => "TypeVariableMirror on '${_n(simpleName)}'";
1084 1062
1085 operator ==(other) { 1063 operator ==(other) {
1086 return other is TypeVariableMirror 1064 return other is TypeVariableMirror &&
1087 && simpleName == other.simpleName 1065 simpleName == other.simpleName &&
1088 && owner == other.owner; 1066 owner == other.owner;
1089 } 1067 }
1068
1090 int get hashCode => simpleName.hashCode; 1069 int get hashCode => simpleName.hashCode;
1091 1070
1092 bool isSubtypeOf(TypeMirror other) { 1071 bool isSubtypeOf(TypeMirror other) {
1093 if (other == currentMirrorSystem().dynamicType) return true; 1072 if (other == currentMirrorSystem().dynamicType) return true;
1094 if (other == currentMirrorSystem().voidType) return false; 1073 if (other == currentMirrorSystem().voidType) return false;
1095 return _subtypeTest(_reflectedType, other._reflectedType); 1074 return _subtypeTest(_reflectedType, other._reflectedType);
1096 } 1075 }
1097 1076
1098 bool isAssignableTo(TypeMirror other) { 1077 bool isAssignableTo(TypeMirror other) {
1099 if (other == currentMirrorSystem().dynamicType) return true; 1078 if (other == currentMirrorSystem().dynamicType) return true;
1100 if (other == currentMirrorSystem().voidType) return false; 1079 if (other == currentMirrorSystem().voidType) return false;
1101 return _subtypeTest(_reflectedType, other._reflectedType) 1080 return _subtypeTest(_reflectedType, other._reflectedType) ||
1102 || _subtypeTest(other._reflectedType, _reflectedType); 1081 _subtypeTest(other._reflectedType, _reflectedType);
1103 } 1082 }
1104 1083
1105 static DeclarationMirror _TypeVariableMirror_owner(reflectee) 1084 static DeclarationMirror _TypeVariableMirror_owner(reflectee)
1106 native "TypeVariableMirror_owner"; 1085 native "TypeVariableMirror_owner";
1107 1086
1108 static Type _TypeVariableMirror_upper_bound(reflectee) 1087 static Type _TypeVariableMirror_upper_bound(reflectee)
1109 native "TypeVariableMirror_upper_bound"; 1088 native "TypeVariableMirror_upper_bound";
1110 } 1089 }
1111 1090
1112
1113 class _LocalTypedefMirror extends _LocalDeclarationMirror 1091 class _LocalTypedefMirror extends _LocalDeclarationMirror
1114 implements TypedefMirror { 1092 implements TypedefMirror {
1115 final Type _reflectedType; 1093 final Type _reflectedType;
1116 final bool _isGeneric; 1094 final bool _isGeneric;
1117 final bool _isGenericDeclaration; 1095 final bool _isGenericDeclaration;
1118 1096
1119 _LocalTypedefMirror(reflectee, 1097 _LocalTypedefMirror(reflectee, this._reflectedType, String simpleName,
1120 this._reflectedType, 1098 this._isGeneric, this._isGenericDeclaration, this._owner)
1121 String simpleName,
1122 this._isGeneric,
1123 this._isGenericDeclaration,
1124 this._owner)
1125 : super(reflectee, _s(simpleName)); 1099 : super(reflectee, _s(simpleName));
1126 1100
1127 bool get isTopLevel => true; 1101 bool get isTopLevel => true;
1128 1102
1129 DeclarationMirror _owner; 1103 DeclarationMirror _owner;
1130 DeclarationMirror get owner { 1104 DeclarationMirror get owner {
1131 if (_owner == null) { 1105 if (_owner == null) {
1132 var uri = _LocalClassMirror._libraryUri(_reflectee); 1106 var uri = _LocalClassMirror._libraryUri(_reflectee);
1133 _owner = currentMirrorSystem().libraries[Uri.parse(uri)]; 1107 _owner = currentMirrorSystem().libraries[Uri.parse(uri)];
1134 } 1108 }
(...skipping 29 matching lines...) Expand all
1164 } 1138 }
1165 1139
1166 List<TypeVariableMirror> _typeVariables = null; 1140 List<TypeVariableMirror> _typeVariables = null;
1167 List<TypeVariableMirror> get typeVariables { 1141 List<TypeVariableMirror> get typeVariables {
1168 if (_typeVariables == null) { 1142 if (_typeVariables == null) {
1169 _typeVariables = new List<TypeVariableMirror>(); 1143 _typeVariables = new List<TypeVariableMirror>();
1170 List params = _LocalClassMirror._ClassMirror_type_variables(_reflectee); 1144 List params = _LocalClassMirror._ClassMirror_type_variables(_reflectee);
1171 TypedefMirror owner = originalDeclaration; 1145 TypedefMirror owner = originalDeclaration;
1172 var mirror; 1146 var mirror;
1173 for (var i = 0; i < params.length; i += 2) { 1147 for (var i = 0; i < params.length; i += 2) {
1174 mirror = new _LocalTypeVariableMirror( 1148 mirror = new _LocalTypeVariableMirror(params[i + 1], params[i], owner);
1175 params[i + 1], params[i], owner);
1176 _typeVariables.add(mirror); 1149 _typeVariables.add(mirror);
1177 } 1150 }
1178 } 1151 }
1179 return _typeVariables; 1152 return _typeVariables;
1180 } 1153 }
1181 1154
1182 List<TypeMirror> _typeArguments = null; 1155 List<TypeMirror> _typeArguments = null;
1183 List<TypeMirror> get typeArguments { 1156 List<TypeMirror> get typeArguments {
1184 if(_typeArguments == null) { 1157 if (_typeArguments == null) {
1185 if(_isGenericDeclaration) { 1158 if (_isGenericDeclaration) {
1186 _typeArguments = _emptyList; 1159 _typeArguments = _emptyList;
1187 } else { 1160 } else {
1188 _typeArguments = new UnmodifiableListView( 1161 _typeArguments = new UnmodifiableListView(
1189 _LocalClassMirror._computeTypeArguments(_reflectedType)); 1162 _LocalClassMirror._computeTypeArguments(_reflectedType));
1190 } 1163 }
1191 } 1164 }
1192 return _typeArguments; 1165 return _typeArguments;
1193 } 1166 }
1194 1167
1195 String toString() => "TypedefMirror on '${_n(simpleName)}'"; 1168 String toString() => "TypedefMirror on '${_n(simpleName)}'";
1196 1169
1197 bool isSubtypeOf(TypeMirror other) { 1170 bool isSubtypeOf(TypeMirror other) {
1198 if (other == currentMirrorSystem().dynamicType) return true; 1171 if (other == currentMirrorSystem().dynamicType) return true;
1199 if (other == currentMirrorSystem().voidType) return false; 1172 if (other == currentMirrorSystem().voidType) return false;
1200 return _subtypeTest(_reflectedType, other._reflectedType); 1173 return _subtypeTest(_reflectedType, other._reflectedType);
1201 } 1174 }
1202 1175
1203 bool isAssignableTo(TypeMirror other) { 1176 bool isAssignableTo(TypeMirror other) {
1204 if (other == currentMirrorSystem().dynamicType) return true; 1177 if (other == currentMirrorSystem().dynamicType) return true;
1205 if (other == currentMirrorSystem().voidType) return false; 1178 if (other == currentMirrorSystem().voidType) return false;
1206 return _subtypeTest(_reflectedType, other._reflectedType) 1179 return _subtypeTest(_reflectedType, other._reflectedType) ||
1207 || _subtypeTest(other._reflectedType, _reflectedType); 1180 _subtypeTest(other._reflectedType, _reflectedType);
1208 } 1181 }
1209 1182
1210 static _nativeReferent(reflectedType) 1183 static _nativeReferent(reflectedType) native "TypedefMirror_referent";
1211 native "TypedefMirror_referent";
1212 1184
1213 static _nativeDeclaration(reflectedType) 1185 static _nativeDeclaration(reflectedType) native "TypedefMirror_declaration";
1214 native "TypedefMirror_declaration";
1215 } 1186 }
1216 1187
1217 Symbol _asSetter(Symbol getter, LibraryMirror library) { 1188 Symbol _asSetter(Symbol getter, LibraryMirror library) {
1218 var unwrapped = MirrorSystem.getName(getter); 1189 var unwrapped = MirrorSystem.getName(getter);
1219 return MirrorSystem.getSymbol('${unwrapped}=', library); 1190 return MirrorSystem.getSymbol('${unwrapped}=', library);
1220 } 1191 }
1221 1192
1222 class _LocalLibraryMirror extends _LocalObjectMirror implements LibraryMirror { 1193 class _LocalLibraryMirror extends _LocalObjectMirror implements LibraryMirror {
1223 final Symbol simpleName; 1194 final Symbol simpleName;
1224 final Uri uri; 1195 final Uri uri;
1225 1196
1226 _LocalLibraryMirror(reflectee, 1197 _LocalLibraryMirror(reflectee, String simpleName, String url)
1227 String simpleName,
1228 String url)
1229 : this.simpleName = _s(simpleName), 1198 : this.simpleName = _s(simpleName),
1230 this.uri = Uri.parse(url), 1199 this.uri = Uri.parse(url),
1231 super(reflectee); 1200 super(reflectee);
1232 1201
1233 // The simple name and the qualified name are the same for a library. 1202 // The simple name and the qualified name are the same for a library.
1234 Symbol get qualifiedName => simpleName; 1203 Symbol get qualifiedName => simpleName;
1235 1204
1236 DeclarationMirror get owner => null; 1205 DeclarationMirror get owner => null;
1237 1206
1238 bool get isPrivate => false; 1207 bool get isPrivate => false;
(...skipping 20 matching lines...) Expand all
1259 } 1228 }
1260 1229
1261 List<InstanceMirror> get metadata { 1230 List<InstanceMirror> get metadata {
1262 // Get the metadata objects, convert them into InstanceMirrors using 1231 // Get the metadata objects, convert them into InstanceMirrors using
1263 // reflect() and then make them into a Dart list. 1232 // reflect() and then make them into a Dart list.
1264 return new UnmodifiableListView(_metadata(_reflectee).map(reflect)); 1233 return new UnmodifiableListView(_metadata(_reflectee).map(reflect));
1265 } 1234 }
1266 1235
1267 bool operator ==(other) { 1236 bool operator ==(other) {
1268 return this.runtimeType == other.runtimeType && 1237 return this.runtimeType == other.runtimeType &&
1269 this._reflectee == other._reflectee; 1238 this._reflectee == other._reflectee;
1270 } 1239 }
1271 1240
1272 int get hashCode => simpleName.hashCode; 1241 int get hashCode => simpleName.hashCode;
1273 1242
1274 String toString() => "LibraryMirror on '${_n(simpleName)}'"; 1243 String toString() => "LibraryMirror on '${_n(simpleName)}'";
1275 1244
1276 var _cachedLibraryDependencies; 1245 var _cachedLibraryDependencies;
1277 get libraryDependencies { 1246 get libraryDependencies {
1278 if (_cachedLibraryDependencies == null) { 1247 if (_cachedLibraryDependencies == null) {
1279 _cachedLibraryDependencies = _libraryDependencies(_reflectee); 1248 _cachedLibraryDependencies = _libraryDependencies(_reflectee);
1280 } 1249 }
1281 return _cachedLibraryDependencies; 1250 return _cachedLibraryDependencies;
1282 } 1251 }
1283 1252
1284 _libraryDependencies(reflectee) 1253 _libraryDependencies(reflectee) native 'LibraryMirror_libraryDependencies';
1285 native 'LibraryMirror_libraryDependencies';
1286 1254
1287 _invoke(reflectee, memberName, arguments, argumentNames) 1255 _invoke(reflectee, memberName, arguments, argumentNames)
1288 native 'LibraryMirror_invoke'; 1256 native 'LibraryMirror_invoke';
1289 1257
1290 _invokeGetter(reflectee, getterName) 1258 _invokeGetter(reflectee, getterName) native 'LibraryMirror_invokeGetter';
1291 native 'LibraryMirror_invokeGetter';
1292 1259
1293 _invokeSetter(reflectee, setterName, value) 1260 _invokeSetter(reflectee, setterName, value)
1294 native 'LibraryMirror_invokeSetter'; 1261 native 'LibraryMirror_invokeSetter';
1295 1262
1296 _computeMembers(reflectee) 1263 _computeMembers(reflectee) native "LibraryMirror_members";
1297 native "LibraryMirror_members";
1298 } 1264 }
1299 1265
1300 class _LocalLibraryDependencyMirror 1266 class _LocalLibraryDependencyMirror extends _LocalMirror
1301 extends _LocalMirror implements LibraryDependencyMirror { 1267 implements LibraryDependencyMirror {
1302 final LibraryMirror sourceLibrary; 1268 final LibraryMirror sourceLibrary;
1303 var _targetMirrorOrPrefix; 1269 var _targetMirrorOrPrefix;
1304 final List<CombinatorMirror> combinators; 1270 final List<CombinatorMirror> combinators;
1305 final Symbol prefix; 1271 final Symbol prefix;
1306 final bool isImport; 1272 final bool isImport;
1307 final bool isDeferred; 1273 final bool isDeferred;
1308 final List<InstanceMirror> metadata; 1274 final List<InstanceMirror> metadata;
1309 1275
1310 _LocalLibraryDependencyMirror(this.sourceLibrary, 1276 _LocalLibraryDependencyMirror(
1311 this._targetMirrorOrPrefix, 1277 this.sourceLibrary,
1312 this.combinators, 1278 this._targetMirrorOrPrefix,
1313 prefixString, 1279 this.combinators,
1314 this.isImport, 1280 prefixString,
1315 this.isDeferred, 1281 this.isImport,
1316 unwrappedMetadata) 1282 this.isDeferred,
1283 unwrappedMetadata)
1317 : prefix = _s(prefixString), 1284 : prefix = _s(prefixString),
1318 metadata = new UnmodifiableListView(unwrappedMetadata.map(reflect)); 1285 metadata = new UnmodifiableListView(unwrappedMetadata.map(reflect));
1319 1286
1320 bool get isExport => !isImport; 1287 bool get isExport => !isImport;
1321 1288
1322 LibraryMirror get targetLibrary { 1289 LibraryMirror get targetLibrary {
1323 if (_targetMirrorOrPrefix is _LocalLibraryMirror) { 1290 if (_targetMirrorOrPrefix is _LocalLibraryMirror) {
1324 return _targetMirrorOrPrefix; 1291 return _targetMirrorOrPrefix;
1325 } 1292 }
1326 var mirrorOrNull = _tryUpgradePrefix(_targetMirrorOrPrefix); 1293 var mirrorOrNull = _tryUpgradePrefix(_targetMirrorOrPrefix);
(...skipping 25 matching lines...) Expand all
1352 1319
1353 bool get isHide => !isShow; 1320 bool get isHide => !isShow;
1354 } 1321 }
1355 1322
1356 class _LocalMethodMirror extends _LocalDeclarationMirror 1323 class _LocalMethodMirror extends _LocalDeclarationMirror
1357 implements MethodMirror { 1324 implements MethodMirror {
1358 final Type _instantiator; 1325 final Type _instantiator;
1359 final bool isStatic; 1326 final bool isStatic;
1360 final int _kindFlags; 1327 final int _kindFlags;
1361 1328
1362 _LocalMethodMirror(reflectee, 1329 _LocalMethodMirror(reflectee, String simpleName, this._owner,
1363 String simpleName, 1330 this._instantiator, this.isStatic, this._kindFlags)
1364 this._owner,
1365 this._instantiator,
1366 this.isStatic,
1367 this._kindFlags)
1368 : super(reflectee, _s(simpleName)); 1331 : super(reflectee, _s(simpleName));
1369 1332
1370 static const kAbstract = 0; 1333 static const kAbstract = 0;
1371 static const kGetter = 1; 1334 static const kGetter = 1;
1372 static const kSetter = 2; 1335 static const kSetter = 2;
1373 static const kConstructor = 3; 1336 static const kConstructor = 3;
1374 static const kConstCtor = 4; 1337 static const kConstCtor = 4;
1375 static const kGenerativeCtor = 5; 1338 static const kGenerativeCtor = 5;
1376 static const kRedirectingCtor = 6; 1339 static const kRedirectingCtor = 6;
1377 static const kFactoryCtor = 7; 1340 static const kFactoryCtor = 7;
1378 static const kExternal = 8; 1341 static const kExternal = 8;
1379 1342
1380 // These offsets much be kept in sync with those in mirrors.h. 1343 // These offsets much be kept in sync with those in mirrors.h.
1381 bool get isAbstract => 0 != (_kindFlags & (1 << kAbstract)); 1344 bool get isAbstract => 0 != (_kindFlags & (1 << kAbstract));
1382 bool get isGetter => 0 != (_kindFlags & (1 << kGetter)); 1345 bool get isGetter => 0 != (_kindFlags & (1 << kGetter));
1383 bool get isSetter => 0 != (_kindFlags & (1 << kSetter)); 1346 bool get isSetter => 0 != (_kindFlags & (1 << kSetter));
1384 bool get isConstructor => 0 != (_kindFlags & (1 << kConstructor)); 1347 bool get isConstructor => 0 != (_kindFlags & (1 << kConstructor));
1385 bool get isConstConstructor => 0 != (_kindFlags & (1 << kConstCtor)); 1348 bool get isConstConstructor => 0 != (_kindFlags & (1 << kConstCtor));
1386 bool get isGenerativeConstructor => 0 != (_kindFlags & (1 << kGenerativeCtor) ); 1349 bool get isGenerativeConstructor =>
1387 bool get isRedirectingConstructor => 0 != (_kindFlags & (1 << kRedirectingCtor )); 1350 0 != (_kindFlags & (1 << kGenerativeCtor));
1388 bool get isFactoryConstructor => 0 != (_kindFlags & (1 << kFactoryCtor)); 1351 bool get isRedirectingConstructor =>
1389 bool get isExternal => 0 != (_kindFlags & (1 << kExternal)); 1352 0 != (_kindFlags & (1 << kRedirectingCtor));
1353 bool get isFactoryConstructor => 0 != (_kindFlags & (1 << kFactoryCtor));
1354 bool get isExternal => 0 != (_kindFlags & (1 << kExternal));
1390 1355
1391 static const _operators = const ["%", "&", "*", "+", "-", "/", "<", "<<", 1356 static const _operators = const [
1392 "<=", "==", ">", ">=", ">>", "[]", "[]=", "^", "|", "~", "unary-", "~/"]; 1357 "%", "&", "*", "+", "-", "/", "<", "<<", //
1358 "<=", "==", ">", ">=", ">>", "[]", "[]=",
1359 "^", "|", "~", "unary-", "~/",
1360 ];
1393 bool get isOperator => _operators.contains(_n(simpleName)); 1361 bool get isOperator => _operators.contains(_n(simpleName));
1394 1362
1395 DeclarationMirror _owner; 1363 DeclarationMirror _owner;
1396 DeclarationMirror get owner { 1364 DeclarationMirror get owner {
1397 // For nested closures it is possible, that the mirror for the owner has not 1365 // For nested closures it is possible, that the mirror for the owner has not
1398 // been created yet. 1366 // been created yet.
1399 if (_owner == null) { 1367 if (_owner == null) {
1400 _owner = _MethodMirror_owner(_reflectee, _instantiator); 1368 _owner = _MethodMirror_owner(_reflectee, _instantiator);
1401 } 1369 }
1402 return _owner; 1370 return _owner;
1403 } 1371 }
1404 1372
1405 bool get isPrivate => _n(simpleName).startsWith('_') || 1373 bool get isPrivate =>
1406 _n(constructorName).startsWith('_'); 1374 _n(simpleName).startsWith('_') || _n(constructorName).startsWith('_');
1407 1375
1408 bool get isTopLevel => owner is LibraryMirror; 1376 bool get isTopLevel => owner is LibraryMirror;
1409 bool get isSynthetic => false; 1377 bool get isSynthetic => false;
1410 1378
1411 TypeMirror _returnType = null; 1379 TypeMirror _returnType = null;
1412 TypeMirror get returnType { 1380 TypeMirror get returnType {
1413 if (_returnType == null) { 1381 if (_returnType == null) {
1414 if (isConstructor) { 1382 if (isConstructor) {
1415 _returnType = owner; 1383 _returnType = owner;
1416 } else { 1384 } else {
1417 _returnType = reflectType( 1385 _returnType =
1418 _MethodMirror_return_type(_reflectee, _instantiator)); 1386 reflectType(_MethodMirror_return_type(_reflectee, _instantiator));
1419 } 1387 }
1420 } 1388 }
1421 return _returnType; 1389 return _returnType;
1422 } 1390 }
1423 1391
1424 List<ParameterMirror> _parameters = null; 1392 List<ParameterMirror> _parameters = null;
1425 List<ParameterMirror> get parameters { 1393 List<ParameterMirror> get parameters {
1426 if (_parameters == null) { 1394 if (_parameters == null) {
1427 _parameters = _MethodMirror_parameters(_reflectee); 1395 _parameters = _MethodMirror_parameters(_reflectee);
1428 _parameters = new UnmodifiableListView(_parameters); 1396 _parameters = new UnmodifiableListView(_parameters);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1469 1437
1470 static dynamic _MethodMirror_owner(reflectee, instantiator) 1438 static dynamic _MethodMirror_owner(reflectee, instantiator)
1471 native "MethodMirror_owner"; 1439 native "MethodMirror_owner";
1472 1440
1473 static dynamic _MethodMirror_return_type(reflectee, instantiator) 1441 static dynamic _MethodMirror_return_type(reflectee, instantiator)
1474 native "MethodMirror_return_type"; 1442 native "MethodMirror_return_type";
1475 1443
1476 List<ParameterMirror> _MethodMirror_parameters(reflectee) 1444 List<ParameterMirror> _MethodMirror_parameters(reflectee)
1477 native "MethodMirror_parameters"; 1445 native "MethodMirror_parameters";
1478 1446
1479 static String _MethodMirror_source(reflectee) 1447 static String _MethodMirror_source(reflectee) native "MethodMirror_source";
1480 native "MethodMirror_source";
1481 } 1448 }
1482 1449
1483 class _LocalVariableMirror extends _LocalDeclarationMirror 1450 class _LocalVariableMirror extends _LocalDeclarationMirror
1484 implements VariableMirror { 1451 implements VariableMirror {
1485 final DeclarationMirror owner; 1452 final DeclarationMirror owner;
1486 final bool isStatic; 1453 final bool isStatic;
1487 final bool isFinal; 1454 final bool isFinal;
1488 final bool isConst; 1455 final bool isConst;
1489 1456
1490 _LocalVariableMirror(reflectee, 1457 _LocalVariableMirror(reflectee, String simpleName, this.owner, this._type,
1491 String simpleName, 1458 this.isStatic, this.isFinal, this.isConst)
1492 this.owner,
1493 this._type,
1494 this.isStatic,
1495 this.isFinal,
1496 this.isConst)
1497 : super(reflectee, _s(simpleName)); 1459 : super(reflectee, _s(simpleName));
1498 1460
1499 bool get isTopLevel => owner is LibraryMirror; 1461 bool get isTopLevel => owner is LibraryMirror;
1500 1462
1501 Type get _instantiator { 1463 Type get _instantiator {
1502 return owner._instantiator; 1464 return owner._instantiator;
1503 } 1465 }
1504 1466
1505 TypeMirror _type; 1467 TypeMirror _type;
1506 TypeMirror get type { 1468 TypeMirror get type {
1507 if (_type == null) { 1469 if (_type == null) {
1508 _type = reflectType(_VariableMirror_type(_reflectee, _instantiator)); 1470 _type = reflectType(_VariableMirror_type(_reflectee, _instantiator));
1509 } 1471 }
1510 return _type; 1472 return _type;
1511 } 1473 }
1512 1474
1513 String toString() => "VariableMirror on '${MirrorSystem.getName(simpleName)}'" ; 1475 String toString() =>
1476 "VariableMirror on '${MirrorSystem.getName(simpleName)}'";
1514 1477
1515 static _VariableMirror_type(reflectee, instantiator) 1478 static _VariableMirror_type(reflectee, instantiator)
1516 native "VariableMirror_type"; 1479 native "VariableMirror_type";
1517 } 1480 }
1518 1481
1519 class _LocalParameterMirror extends _LocalVariableMirror 1482 class _LocalParameterMirror extends _LocalVariableMirror
1520 implements ParameterMirror { 1483 implements ParameterMirror {
1521 final int _position; 1484 final int _position;
1522 final bool isOptional; 1485 final bool isOptional;
1523 final bool isNamed; 1486 final bool isNamed;
1524 final List _unmirroredMetadata; 1487 final List _unmirroredMetadata;
1525 1488
1526 _LocalParameterMirror(reflectee, 1489 _LocalParameterMirror(
1527 String simpleName, 1490 reflectee,
1528 DeclarationMirror owner, 1491 String simpleName,
1529 this._position, 1492 DeclarationMirror owner,
1530 this.isOptional, 1493 this._position,
1531 this.isNamed, 1494 this.isOptional,
1532 bool isFinal, 1495 this.isNamed,
1533 this._defaultValueReflectee, 1496 bool isFinal,
1534 this._unmirroredMetadata) 1497 this._defaultValueReflectee,
1535 : super(reflectee, 1498 this._unmirroredMetadata)
1536 simpleName, 1499 : super(
1537 owner, 1500 reflectee,
1538 null, // We override the type. 1501 simpleName,
1539 false, // isStatic does not apply. 1502 owner,
1540 isFinal, 1503 null, // We override the type.
1541 false // Not const. 1504 false, // isStatic does not apply.
1542 ); 1505 isFinal,
1506 false // Not const.
1507 );
1543 1508
1544 Object _defaultValueReflectee; 1509 Object _defaultValueReflectee;
1545 InstanceMirror _defaultValue; 1510 InstanceMirror _defaultValue;
1546 InstanceMirror get defaultValue { 1511 InstanceMirror get defaultValue {
1547 if (!isOptional) { 1512 if (!isOptional) {
1548 return null; 1513 return null;
1549 } 1514 }
1550 if (_defaultValue == null) { 1515 if (_defaultValue == null) {
1551 _defaultValue = reflect(_defaultValueReflectee); 1516 _defaultValue = reflect(_defaultValueReflectee);
1552 } 1517 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1676 _instantiationCache[key] = typeMirror; 1641 _instantiationCache[key] = typeMirror;
1677 if (typeMirror is ClassMirror && !typeMirror._isGeneric) { 1642 if (typeMirror is ClassMirror && !typeMirror._isGeneric) {
1678 _declarationCache[key] = typeMirror; 1643 _declarationCache[key] = typeMirror;
1679 } 1644 }
1680 } 1645 }
1681 return typeMirror; 1646 return typeMirror;
1682 } 1647 }
1683 1648
1684 static Type _instantiateType(Type key, List<Type> typeArguments) { 1649 static Type _instantiateType(Type key, List<Type> typeArguments) {
1685 if (typeArguments.isEmpty) { 1650 if (typeArguments.isEmpty) {
1686 throw new ArgumentError.value( 1651 throw new ArgumentError.value(typeArguments, 'typeArguments',
1687 typeArguments, 'typeArguments', 'Type arguments list cannot be empty.'); 1652 'Type arguments list cannot be empty.');
1688 } 1653 }
1689 return instantiateGenericType(key, typeArguments.toList(growable: false)); 1654 return instantiateGenericType(key, typeArguments.toList(growable: false));
1690 } 1655 }
1691 } 1656 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698