83 lines
2.7 KiB
TypeScript
Raw Normal View History

2015-04-24 13:17:36 -07:00
import {Type, isPresent, stringify, BaseException} from 'angular2/src/facade/lang';
import {List, ListWrapper, Map, MapWrapper, StringMapWrapper} from 'angular2/src/facade/collection';
import {SetterFn, GetterFn, MethodFn} from './types';
export {SetterFn, GetterFn, MethodFn} from './types';
export class Reflector {
2015-05-15 12:46:50 +02:00
_typeInfo: Map<Type, any>;
_getters: Map<string, GetterFn>;
_setters: Map<string, SetterFn>;
_methods: Map<string, MethodFn>;
2015-04-24 13:17:36 -07:00
reflectionCapabilities: any;
constructor(reflectionCapabilities) {
this._typeInfo = MapWrapper.create();
this._getters = MapWrapper.create();
this._setters = MapWrapper.create();
this._methods = MapWrapper.create();
this.reflectionCapabilities = reflectionCapabilities;
}
2015-05-15 12:46:50 +02:00
registerType(type: Type, typeInfo: Map<Type, any>): void {
MapWrapper.set(this._typeInfo, type, typeInfo);
}
2015-04-24 13:17:36 -07:00
2015-05-15 12:46:50 +02:00
registerGetters(getters: Map<string, GetterFn>): void { _mergeMaps(this._getters, getters); }
2015-04-24 13:17:36 -07:00
2015-05-15 12:46:50 +02:00
registerSetters(setters: Map<string, SetterFn>): void { _mergeMaps(this._setters, setters); }
2015-04-24 13:17:36 -07:00
2015-05-15 12:46:50 +02:00
registerMethods(methods: Map<string, MethodFn>): void { _mergeMaps(this._methods, methods); }
2015-04-24 13:17:36 -07:00
factory(type: Type): Function {
if (MapWrapper.contains(this._typeInfo, type)) {
return MapWrapper.get(this._typeInfo, type)["factory"];
} else {
return this.reflectionCapabilities.factory(type);
}
}
parameters(typeOfFunc): List<any> {
if (MapWrapper.contains(this._typeInfo, typeOfFunc)) {
return MapWrapper.get(this._typeInfo, typeOfFunc)["parameters"];
} else {
return this.reflectionCapabilities.parameters(typeOfFunc);
}
}
annotations(typeOfFunc): List<any> {
if (MapWrapper.contains(this._typeInfo, typeOfFunc)) {
return MapWrapper.get(this._typeInfo, typeOfFunc)["annotations"];
} else {
return this.reflectionCapabilities.annotations(typeOfFunc);
}
}
getter(name: string): GetterFn {
if (MapWrapper.contains(this._getters, name)) {
return MapWrapper.get(this._getters, name);
} else {
return this.reflectionCapabilities.getter(name);
}
}
setter(name: string): SetterFn {
if (MapWrapper.contains(this._setters, name)) {
return MapWrapper.get(this._setters, name);
} else {
return this.reflectionCapabilities.setter(name);
}
}
method(name: string): MethodFn {
if (MapWrapper.contains(this._methods, name)) {
return MapWrapper.get(this._methods, name);
} else {
return this.reflectionCapabilities.method(name);
}
}
}
2015-05-15 12:46:50 +02:00
function _mergeMaps(target: Map<any, any>, config: Map<string, Function>): void {
2015-04-24 13:17:36 -07:00
StringMapWrapper.forEach(config, (v, k) => MapWrapper.set(target, k, v));
}