public final void add(final CommandMarker command) {
synchronized (mutex) {
commands.add(command);
for (final Method method : command.getClass().getMethods()) {
CliAvailabilityIndicator availability = method.getAnnotation(CliAvailabilityIndicator.class);
if (availability != null) {
Assert.isTrue(
method.getParameterTypes().length == 0,
"CliAvailabilityIndicator is only legal for 0 parameter methods ("
+ method.toGenericString() + ")");
Assert.isTrue(
method.getReturnType().equals(Boolean.TYPE),
"CliAvailabilityIndicator is only legal for primitive boolean return types ("
+ method.toGenericString() + ")");
for (String cmd : availability.value()) {
Assert.isTrue(!availabilityIndicators.containsKey(cmd),
"Cannot specify an availability indicator for '" + cmd + "' more than once");
availabilityIndicators.put(cmd, new MethodTarget(method, command));
}
}