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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_emitter/container_builder.dart

Issue 160343002: Implement reflection on annotations of parameters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comment. Created 6 years, 10 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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 part of dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 /// This class should morph into something that makes it easy to build 7 /// This class should morph into something that makes it easy to build
8 /// JavaScript representations of libraries, class-sides, and instance-sides. 8 /// JavaScript representations of libraries, class-sides, and instance-sides.
9 /// Initially, it is just a placeholder for code that is moved from 9 /// Initially, it is just a placeholder for code that is moved from
10 /// [CodeEmitterTask]. 10 /// [CodeEmitterTask].
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 ..add((tearOffName == null || member.isAccessor()) 479 ..add((tearOffName == null || member.isAccessor())
480 ? js("null") : js.string(tearOffName)) 480 ? js("null") : js.string(tearOffName))
481 ..add(requiredParameterCount) 481 ..add(requiredParameterCount)
482 ..add(optionalParameterCount) 482 ..add(optionalParameterCount)
483 ..add(memberTypeExpression) 483 ..add(memberTypeExpression)
484 ..addAll(task.metadataEmitter.reifyDefaultArguments(member)); 484 ..addAll(task.metadataEmitter.reifyDefaultArguments(member));
485 485
486 if (canBeReflected || canBeApplied) { 486 if (canBeReflected || canBeApplied) {
487 parameters.orderedForEachParameter((Element parameter) { 487 parameters.orderedForEachParameter((Element parameter) {
488 expressions.add(task.metadataEmitter.reifyName(parameter.name)); 488 expressions.add(task.metadataEmitter.reifyName(parameter.name));
489 List<MetadataAnnotation> annotations = parameter.metadata.toList();
490 Iterable<int> metadataIndices = annotations.map((MetadataAnnotation a) {
491 compiler.constantHandler.addCompileTimeConstantForEmission(a.value);
492 return task.metadataEmitter.reifyMetadata(a);
493 });
494 // TODO(karlklose): store metadata on elements in correct source order.
495 metadataIndices = metadataIndices.toList().reversed.toList();
496 expressions.add(metadataIndices.isNotEmpty ? metadataIndices
497 : js('[]'));
489 }); 498 });
490 } 499 }
491 if (canBeReflected) { 500 if (canBeReflected) {
492 jsAst.LiteralString reflectionName; 501 jsAst.LiteralString reflectionName;
493 if (member.isConstructor()) { 502 if (member.isConstructor()) {
494 String reflectionNameString = task.getReflectionName(member, name); 503 String reflectionNameString = task.getReflectionName(member, name);
495 reflectionName = 504 reflectionName =
496 new jsAst.LiteralString( 505 new jsAst.LiteralString(
497 '"new ${Elements.reconstructConstructorName(member)}"' 506 '"new ${Elements.reconstructConstructorName(member)}"'
498 ' /* $reflectionNameString */'); 507 ' /* $reflectionNameString */');
499 } else { 508 } else {
500 reflectionName = js.string(member.name); 509 reflectionName = js.string(member.name);
501 } 510 }
502 expressions 511 expressions
503 ..add(reflectionName) 512 ..add(reflectionName)
504 ..addAll(task.metadataEmitter.computeMetadata(member)); 513 ..addAll(task.metadataEmitter.computeMetadata(member));
505 } else if (isClosure && canBeApplied) { 514 } else if (isClosure && canBeApplied) {
506 expressions.add(js.string(member.name)); 515 expressions.add(js.string(member.name));
507 } 516 }
508 517
509 builder.addProperty(name, js.toExpression(expressions)); 518 builder.addProperty(name, js.toExpression(expressions));
510 } 519 }
511 520
512 void addMemberField(VariableElement member, ClassBuilder builder) { 521 void addMemberField(VariableElement member, ClassBuilder builder) {
513 // For now, do nothing. 522 // For now, do nothing.
514 } 523 }
515 } 524 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698