SmartArg constructor
SmartArg()
Implementation
SmartArg() {
final instanceMirror = reflectable.reflect(this);
// Find our app meta data (if any)
_app =
instanceMirror.type.metadata.firstWhere((m) => m is Parser) as Parser?;
// Build an easy to use lookup for arguments on the command line
// to their corresponding Parameter configurations.
_values = {};
_commands = {};
_mirrorParameterPairs = [];
{
Group? currentGroup;
for (final mirror in instanceMirror.type.declarations.values
.where((p) => p is VariableMirror && _isFalse(p.isPrivate))) {
currentGroup =
mirror.metadata.firstWhereOrNull((m) => m is Group) as Group? ??
currentGroup;
final parameter =
mirror.metadata.firstWhereOrNull((m) => m is Argument);
if (parameter != null) {
final mpp = MirrorParameterPair(
mirror as VariableMirror,
parameter as Argument,
currentGroup,
);
for (final key in mpp.keys(_app)) {
if (_values.containsKey(key)) {
throw StateError('$key was configured multiple times');
}
_values[key] = mpp;
}
_mirrorParameterPairs.add(mpp);
if (parameter is Command) {
_commands[mpp.displayKey] = mpp;
}
}
}
}
}