Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1457)

Unified Diff: third_party/pkg/di/lib/dynamic_injector.dart

Issue 257423008: Update all Angular libs (run update_all.sh). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/pkg/di/lib/di.dart ('k') | third_party/pkg/di/lib/errors.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 46c782e8e2acfde6fc9d964c9145fd0b6de24088..deef7811742dab373c6f67bd63eb5cb4a32eedb0 100644
--- a/third_party/pkg/di/lib/dynamic_injector.dart
+++ b/third_party/pkg/di/lib/dynamic_injector.dart
@@ -1,12 +1,17 @@
library di.dynamic_injector;
import 'di.dart';
-import 'mirrors.dart';
+import 'src/mirrors.dart';
+import 'src/base_injector.dart';
+import 'src/error_helper.dart';
+import 'src/provider.dart';
+
+export 'di.dart';
/**
* Dynamic implementation of [Injector] that uses mirrors.
*/
-class DynamicInjector extends Injector {
+class DynamicInjector extends BaseInjector {
DynamicInjector({List<Module> modules, String name,
bool allowImplicitInjection: false})
@@ -16,15 +21,14 @@ class DynamicInjector extends Injector {
DynamicInjector._fromParent(List<Module> modules, Injector parent, {name})
: super.fromParent(modules, parent, name: name);
- newFromParent(List<Module> modules, String name) {
- return new DynamicInjector._fromParent(modules, this, name: name);
- }
+ newFromParent(List<Module> modules, String name) =>
+ new DynamicInjector._fromParent(modules, this, name: name);
- Object newInstanceOf(Type type, ObjectFactory getInstanceByType,
- Injector requestor, error) {
+ Object newInstanceOf(Type type, ObjectFactory objFactory, Injector requestor,
+ resolving) {
var classMirror = reflectType(type);
if (classMirror is TypedefMirror) {
- throw new NoProviderError(error('No implementation provided '
+ throw new NoProviderError(error(resolving, 'No implementation provided '
'for ${getSymbolName(classMirror.qualifiedName)} typedef!'));
}
@@ -32,22 +36,33 @@ class DynamicInjector extends Injector {
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 (MirrorSystem.getName(p.type.qualifiedName) == 'dynamic') {
+ if (p.type.qualifiedName == #dynamic) {
var name = MirrorSystem.getName(p.simpleName);
- throw new NoProviderError(error("The '$name' parameter must be typed"));
+ throw new NoProviderError(
+ error(resolving, "The '$name' parameter must be typed"));
}
if (p.type is TypedefMirror) {
throw new NoProviderError(
- error('Cannot create new instance of a typedef ${p.type}'));
+ 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);
}
- return getInstanceByType(getReflectedTypeWorkaround(p.type), requestor);
}
var args = new List.generate(ctor.parameters.length, resolveArgument,
@@ -66,7 +81,12 @@ class DynamicInjector extends Injector {
int position = 0;
List args = mm.parameters.map((ParameterMirror parameter) {
try {
- return get(getReflectedTypeWorkaround(parameter.type));
+ 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);
+ }
} on NoProviderError catch (e) {
throw new NoProviderError(e.message);
} finally {
« no previous file with comments | « third_party/pkg/di/lib/di.dart ('k') | third_party/pkg/di/lib/errors.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698