PluginManager#collectPlugins() performs quite some package scanning
sequentially. I have the impression that this operation can simply be
parallelized as follows:

Stream
        .of(inputs)
        .flatMap(input -> Stream
            .of(ops)
            .map(op -> new Object[]{op, input}))
        .parallel()
        .map(opAndInput -> {
            final Function<Input, Output> op = opAndInput[0];
            final Input input = opAndInput[1];
            return op.accept(input);
        })
        .reduce(this::merge);

Here input denotes the packages and ops denote the independent sequential
steps performed in collectPlugins(). I don't know about the overhead of
this call, but the above simple effort might be worth a shot. What do you
think?

Reply via email to