@SuppressWarnings({"unchecked", "rawtypes"})
    public @NonNull Collection<org.incendo.cloud.@NonNull Command<C>> parse(final @NonNull Collection<@NonNull Object> instances) {
        for (final Object instance : instances) {
            this.parseDefaultValues(instance);
        }
        for (final Object instance : instances) {
            this.parseSuggestions(instance);
        }
        for (final Object instance : instances) {
            this.parseParsers(instance);
        }
        for (final Object instance : instances) {
            this.parseExceptionHandlers(instance);
        }

        final List<org.incendo.cloud.Command<C>> result = new ArrayList<>();
        for (final Object instance : instances) {
            final Collection<CommandDescriptor> commandDescriptors = this.commandExtractor.extractCommands(instance);
            final Collection<org.incendo.cloud.Command<C>> commands = this.construct(instance, commandDescriptors);
            for (final org.incendo.cloud.Command<C> command : commands) {
                ((CommandManager) this.manager).command(command);
            }
            result.addAll(commands);
        }
        return Collections.unmodifiableList(result);
    }
Scan some instances of {@link Command}-annotated types and attempt to
compile them into {@link org.incendo.cloud.Command} instances.

@param instances instances to scan
@return collection of parsed commands
cloud-annotations/src/main/java/org/incendo/cloud/annotations/AnnotationParser.java