public ParametricContainerCommand(ContainerCommandDescriptor descriptor, Class owner)
    {
        super(descriptor);

        Command annotation = this.getClass().getAnnotation(Command.class);
        if (annotation == null)
        {
            throw new IllegalArgumentException("Missing Command annotation");
        }

        descriptor.setOwner(owner);
        descriptor.setName(annotation.name());
        descriptor.setDescription(annotation.desc());
        descriptor.setUsageGenerator(new UsageGenerator()
        {
            @Override
            protected String generateParameterUsage(CommandInvocation invocation, CommandDescriptor descriptor)
            {
                return "<command>";
            }
        });

        List<AliasConfiguration> aliasList = new ArrayList<>();
        for (String name : annotation.alias())
        {
            aliasList.add(new AliasConfiguration(name));
        }
        Alias alias = this.getClass().getAnnotation(Alias.class);
        if (alias != null)
        {
            for (String name : alias.value())
            {
                AliasConfiguration aliasConf = new AliasConfiguration(name, alias.parents());
                aliasConf.setPrefix(alias.prefix());
                aliasConf.setSuffix(alias.suffix());
                aliasList.add(aliasConf);
            }
        }
        descriptor.addAliases(aliasList);
    }