public DirectiveInfo(Scope scope, Class<?> directive) throws IllegalAccessException, InstantiationException { this.scope = scope; this.directive = directive; Object object = directive.newInstance(); this.definition = ((Directive) object).define(); if (definition != null) { this.usage = definition.toString(); } else { this.usage = "No definition available for directive '" + directive + "'"; } this.name = directive.getAnnotation(Name.class).value(); Description desc = directive.getAnnotation(Description.class); if (desc == null) { this.description = "No description specified for directive class '" + directive.getSimpleName() + "'"; } else { this.description = desc.value(); } Deprecated annotation = directive.getAnnotation(Deprecated.class); if (annotation == null) { deprecated = false; } else { deprecated = true; } Categories category = directive.getAnnotation(Categories.class); if (category == null) { categories = new String[] { "default" }; } else { categories = category.categories(); } }
UsageDefinition definition = directive.define(); Arguments arguments = new MapArguments(definition, next); directive.initialize(arguments); directives.add(directive);