diff --git a/CHANGELOG.md b/CHANGELOG.md index e517e549..2b6bb8ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ * Use library URIs (not names) to look up annotations in the mirror system. * Loosen version constraint to allow package:build version 0.6 +* Fix a bug against the latest SDK checking whether List implements Iterable ## 0.5.1+7 diff --git a/lib/generators/json_serializable_generator.dart b/lib/generators/json_serializable_generator.dart index 3d7e875c..56bd92dd 100644 --- a/lib/generators/json_serializable_generator.dart +++ b/lib/generators/json_serializable_generator.dart @@ -278,15 +278,10 @@ ParameterizedType _typeTest( if (tester(type)) return type; if (type is InterfaceType) { - var items = type.interfaces.where(tester).toList(); + var tests = type.interfaces.map((type) => _typeTest(type, tester)); + var match = _firstNonNull(tests); - if (items.length > 1) { - throw 'weird - more than 1 interface matches the type test - $items'; - } - - if (items.length == 1) { - return items.single; - } + if (match != null) return match; if (type.superclass != null) { return _typeTest(type.superclass, tester); @@ -295,6 +290,9 @@ ParameterizedType _typeTest( return null; } +/*=T*/ _firstNonNull/**/(Iterable/**/ values) => + values.firstWhere((value) => value != null, orElse: () => null); + bool _isDartIterable(DartType type) { return type.element.library != null && type.element.library.isDartCore &&