change api to take a string yay!
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 3ab3e97..b427227 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -59,6 +59,12 @@
@override
List<String> get extraRequiredLibraries => _requiredLibraries[name];
+
+ @override
+ List<String> get extraIndexedLibraries => const <String>[
+ // Required for the JsonDecodeExperimentalTransformer.
+ "dart:convert",
+ ];
@override
bool mayDefineRestrictedType(Uri uri) =>
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index 623e157..95f051a 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -68,6 +68,7 @@
List<String> get extraIndexedLibraries => const [
'dart:async',
'dart:collection',
+ 'dart:convert',
'dart:html',
'dart:indexed_db',
'dart:math',
diff --git a/pkg/kernel/lib/transformations/json_decode_experimental.dart b/pkg/kernel/lib/transformations/json_decode_experimental.dart
index cc56d3e..cc72c8a 100644
--- a/pkg/kernel/lib/transformations/json_decode_experimental.dart
+++ b/pkg/kernel/lib/transformations/json_decode_experimental.dart
@@ -32,8 +32,25 @@
procedure.name.name == 'jsonDecodeExperimental') {
// We know we have exactly one type argument.
var typeArg = node.arguments.types.first as InterfaceType;
- var expr = _newInstance(typeArg, node.arguments.positional.first);
- print(expr.leakingDebugToString());
+ var jsonVar = VariableDeclaration(
+ 'json',
+ type: const DynamicType(),
+ initializer: StaticInvocation(
+ coreTypes.index
+ .getLibrary('dart:convert')
+ .procedures
+ .firstWhere((p) => p.name.name == 'jsonDecode'),
+ Arguments(node.arguments.positional)),
+ );
+ var expr = MethodInvocation(
+ FunctionExpression(FunctionNode(
+ Block([
+ jsonVar,
+ ReturnStatement(_newInstance(typeArg, VariableGet(jsonVar))),
+ ]),
+ )),
+ Name('call'),
+ Arguments.empty());
return expr;
} else {
return node;
diff --git a/pkg/vm/lib/target/vm.dart b/pkg/vm/lib/target/vm.dart
index 7f1b1964..40020fa 100644
--- a/pkg/vm/lib/target/vm.dart
+++ b/pkg/vm/lib/target/vm.dart
@@ -125,6 +125,8 @@
// could possibly be done more cleanly after the VM no longer supports
// doing constant evaluation on its own. See http://dartbug.com/32836
"dart:typed_data",
+ // Required for the JsonDecodeExperimentalTransformer.
+ "dart:convert",
];
@override