61 lines
1.6 KiB
Dart
61 lines
1.6 KiB
Dart
import '../reflector.dart';
|
|
|
|
/// A [Reflector] implementation that performs simple [Map] lookups.
|
|
///
|
|
/// `package:angel_container_generator` uses this to create reflectors from analysis metadata.
|
|
class StaticReflector extends Reflector {
|
|
final Map<Symbol, String> names;
|
|
final Map<Type, ReflectedType> types;
|
|
final Map<Function, ReflectedFunction> functions;
|
|
final Map<Object, ReflectedInstance> instances;
|
|
|
|
const StaticReflector(
|
|
{this.names = const {},
|
|
this.types = const {},
|
|
this.functions = const {},
|
|
this.instances = const {}});
|
|
|
|
@override
|
|
String? getName(Symbol symbol) {
|
|
if (!names.containsKey(symbol)) {
|
|
throw ArgumentError(
|
|
'The value of $symbol is unknown - it was not generated.');
|
|
}
|
|
|
|
return names[symbol];
|
|
}
|
|
|
|
@override
|
|
ReflectedClass? reflectClass(Type clazz) =>
|
|
reflectType(clazz) as ReflectedClass?;
|
|
|
|
@override
|
|
ReflectedFunction? reflectFunction(Function function) {
|
|
if (!functions.containsKey(function)) {
|
|
throw ArgumentError(
|
|
'There is no reflection information available about $function.');
|
|
}
|
|
|
|
return functions[function];
|
|
}
|
|
|
|
@override
|
|
ReflectedInstance? reflectInstance(Object object) {
|
|
if (!instances.containsKey(object)) {
|
|
throw ArgumentError(
|
|
'There is no reflection information available about $object.');
|
|
}
|
|
|
|
return instances[object];
|
|
}
|
|
|
|
@override
|
|
ReflectedType? reflectType(Type type) {
|
|
if (!types.containsKey(type)) {
|
|
throw ArgumentError(
|
|
'There is no reflection information available about $type.');
|
|
}
|
|
|
|
return types[type];
|
|
}
|
|
}
|