| Index: third_party/pkg/di/lib/dynamic_injector.dart
|
| diff --git a/third_party/pkg/di/lib/dynamic_injector.dart b/third_party/pkg/di/lib/dynamic_injector.dart
|
| index deef7811742dab373c6f67bd63eb5cb4a32eedb0..46c782e8e2acfde6fc9d964c9145fd0b6de24088 100644
|
| --- a/third_party/pkg/di/lib/dynamic_injector.dart
|
| +++ b/third_party/pkg/di/lib/dynamic_injector.dart
|
| @@ -1,17 +1,12 @@
|
| library di.dynamic_injector;
|
|
|
| import 'di.dart';
|
| -import 'src/mirrors.dart';
|
| -import 'src/base_injector.dart';
|
| -import 'src/error_helper.dart';
|
| -import 'src/provider.dart';
|
| -
|
| -export 'di.dart';
|
| +import 'mirrors.dart';
|
|
|
| /**
|
| * Dynamic implementation of [Injector] that uses mirrors.
|
| */
|
| -class DynamicInjector extends BaseInjector {
|
| +class DynamicInjector extends Injector {
|
|
|
| DynamicInjector({List<Module> modules, String name,
|
| bool allowImplicitInjection: false})
|
| @@ -21,14 +16,15 @@ class DynamicInjector extends BaseInjector {
|
| DynamicInjector._fromParent(List<Module> modules, Injector parent, {name})
|
| : super.fromParent(modules, parent, name: name);
|
|
|
| - newFromParent(List<Module> modules, String name) =>
|
| - new DynamicInjector._fromParent(modules, this, name: name);
|
| + newFromParent(List<Module> modules, String name) {
|
| + return new DynamicInjector._fromParent(modules, this, name: name);
|
| + }
|
|
|
| - Object newInstanceOf(Type type, ObjectFactory objFactory, Injector requestor,
|
| - resolving) {
|
| + Object newInstanceOf(Type type, ObjectFactory getInstanceByType,
|
| + Injector requestor, error) {
|
| var classMirror = reflectType(type);
|
| if (classMirror is TypedefMirror) {
|
| - throw new NoProviderError(error(resolving, 'No implementation provided '
|
| + throw new NoProviderError(error('No implementation provided '
|
| 'for ${getSymbolName(classMirror.qualifiedName)} typedef!'));
|
| }
|
|
|
| @@ -36,33 +32,22 @@ class DynamicInjector extends BaseInjector {
|
|
|
| if (ctor == null) {
|
| throw new NoProviderError('Unable to find default constructor for $type. '
|
| - 'Make sure class has a default constructor.' + (1.0 is int ?
|
| - 'Make sure you have correctly configured @MirrorsUsed.' : ''));
|
| + 'Make sure class has a default constructor.' +
|
| + (1.0 is int ?
|
| + ' Make sure you have correctly configured @MirrorsUsed.' : ''));
|
| }
|
|
|
| resolveArgument(int pos) {
|
| ParameterMirror p = ctor.parameters[pos];
|
| - if (p.type.qualifiedName == #dynamic) {
|
| + if (MirrorSystem.getName(p.type.qualifiedName) == 'dynamic') {
|
| var name = MirrorSystem.getName(p.simpleName);
|
| - throw new NoProviderError(
|
| - error(resolving, "The '$name' parameter must be typed"));
|
| + throw new NoProviderError(error("The '$name' parameter must be typed"));
|
| }
|
| if (p.type is TypedefMirror) {
|
| throw new NoProviderError(
|
| - error(resolving,
|
| - 'Cannot create new instance of a typedef ${p.type}'));
|
| - }
|
| - if (p.metadata.isNotEmpty) {
|
| - assert(p.metadata.length == 1);
|
| - var type = p.metadata.first.type.reflectedType;
|
| - return objFactory.getInstanceByKey(
|
| - new Key((p.type as ClassMirror).reflectedType, type),
|
| - requestor, resolving);
|
| - } else {
|
| - return objFactory.getInstanceByKey(
|
| - new Key((p.type as ClassMirror).reflectedType),
|
| - requestor, resolving);
|
| + error('Cannot create new instance of a typedef ${p.type}'));
|
| }
|
| + return getInstanceByType(getReflectedTypeWorkaround(p.type), requestor);
|
| }
|
|
|
| var args = new List.generate(ctor.parameters.length, resolveArgument,
|
| @@ -81,12 +66,7 @@ class DynamicInjector extends BaseInjector {
|
| int position = 0;
|
| List args = mm.parameters.map((ParameterMirror parameter) {
|
| try {
|
| - if (parameter.metadata.isNotEmpty) {
|
| - var annotation = parameter.metadata[0].type.reflectedType;
|
| - return get((parameter.type as ClassMirror).reflectedType, annotation);
|
| - } else {
|
| - return get((parameter.type as ClassMirror).reflectedType);
|
| - }
|
| + return get(getReflectedTypeWorkaround(parameter.type));
|
| } on NoProviderError catch (e) {
|
| throw new NoProviderError(e.message);
|
| } finally {
|
|
|