Chromium Code Reviews| 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..4462bdb798f6431c6b0083f40683f590b754fddc 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] = 'new $JS_PREFIX.JsObject.jsify(${param.name})'; |
|
alexandre.ardhuin
2014/10/01 20:36:52
Same thing about @jsify for JsObjectMap/JsList.
justinfagnani
2014/10/07 20:32:24
Done.
|
| + } 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};"); |
| } |
| } |
| } |