From 37f1c32118383b250ba2db6f21adf1737beb2b0a Mon Sep 17 00:00:00 2001 From: Pavel Jbanov Date: Fri, 7 Feb 2014 16:27:47 -0500 Subject: [PATCH] fix(MetadataExtractor): ignore typedefs Fixes #524 --- lib/core/registry.dart | 1 + test/core/registry_spec.dart | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/core/registry.dart b/lib/core/registry.dart index f3a92394a..17985f893 100644 --- a/lib/core/registry.dart +++ b/lib/core/registry.dart @@ -70,6 +70,7 @@ abstract class AnnotationsMap { @NgInjectableService() class MetadataExtractor { Iterable call(Type type) { + if (reflectType(type) is TypedefMirror) return []; var metadata = reflectClass(type).metadata; if (metadata == null) return []; return metadata.map((InstanceMirror im) => im.reflectee); diff --git a/test/core/registry_spec.dart b/test/core/registry_spec.dart index acfd43397..532dbf1ae 100644 --- a/test/core/registry_spec.dart +++ b/test/core/registry_spec.dart @@ -30,8 +30,20 @@ main() => describe('RegistryMap', () { expect(keys).toEqual([new MyAnnotation('A'), new MyAnnotation('B')]); expect(types).toEqual([A1, A1]); }); + + it('should safely ignore typedefs', () { + var module = new Module() + ..type(MyMap) + ..type(MetadataExtractor) + ..value(MyTypedef, (String _) => null); + + var injector = new DynamicInjector(modules: [module]); + expect(() => injector.get(MyMap), isNot(throws)); + }); }); +typedef void MyTypedef(String arg); + class MyMap extends AnnotationMap { MyMap(Injector injector, MetadataExtractor metadataExtractor) : super(injector, metadataExtractor);