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

Unified Diff: lib/src/transformer/js_proxy_generator.dart

Issue 615913004: Add @jsify annotation. Support automatically proxying Lists and Maps to Dart in Proxies. Support co… (Closed) Base URL: https://github.com/dart-lang/js-interop.git@master
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: lib/src/transformer/js_proxy_generator.dart
diff --git a/lib/src/transformer/js_proxy_generator.dart b/lib/src/transformer/js_proxy_generator.dart
index 5896d7c4ba4a5c65a3bc83d837102ee85a6c0095..69a63efcec56f2ae3b856b34cbd61f3817692fd5 100644
--- a/lib/src/transformer/js_proxy_generator.dart
+++ b/lib/src/transformer/js_proxy_generator.dart
@@ -24,6 +24,7 @@ class JsProxyGenerator {
final ClassElement jsProxyClass;
final ClassElement exportClass;
final ClassElement noExportClass;
+ final ClassElement jsifyClass;
final LibraryElement library;
final LibraryElement jsLibrary;
@@ -48,6 +49,7 @@ class JsProxyGenerator {
jsProxyClass = jsMetadataLibrary.getType('JsProxy'),
exportClass = jsMetadataLibrary.getType('Export'),
noExportClass = jsMetadataLibrary.getType('NoExport'),
+ jsifyClass = jsMetadataLibrary.getType('Jsify'),
inheritanceManager = new InheritanceManager(library) {
assert(jsLibrary != null);
assert(library != null);
@@ -193,11 +195,19 @@ class JsProxyGenerator {
if (!a.isStatic) {
var returnType = a.returnType;
- var jsParameterList = new StringBuffer();
+ var jsArgs = new List(a.parameters.length);
- var parameterList = a.parameters
- .map((p) => '$JS_PREFIX.toJs(${p.name})')
- .join(', ');
+ for (int i = 0; i < a.parameters.length; i++) {
+ var param = a.parameters[i];
+ var hasJsify = hasAnnotation(param, jsifyClass);
+ if (hasJsify) {
+ jsArgs[i] = '$JS_PREFIX.jsify(${param.name})';
+ } else {
+ jsArgs[i] = '$JS_PREFIX.toJs(${param.name})';
+ }
+ }
+
+ var parameterList = jsArgs.join(', ');
MethodDeclaration m = a.node;
var offset = m.body.offset;
@@ -207,8 +217,8 @@ class JsProxyGenerator {
"$JS_PREFIX.toJs(this).callMethod('$name', [$parameterList])); }");
} else {
transaction.edit(offset, end, " => $JS_PREFIX.toDart("
- "$JS_PREFIX.toJs(this).callMethod('$name', [$parameterList]))"
- " as ${a.returnType};");
+ "$JS_PREFIX.toJs(this).callMethod('$name', [$parameterList]), "
+ "#${returnType.name}) as ${a.returnType};");
}
}
}
« lib/src/mirrors.dart ('K') | « lib/src/static.dart ('k') | lib/src/transformer/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698