public CompiledPipeline.CompiledExecution buildExecution() {
        return buildExecution(false);
    }
@Test
    @SuppressWarnings({"unchecked"})
    public void testReuseCompiledClasses() throws IOException, InvalidIRException {
        final FixedPluginFactory pluginFactory = new FixedPluginFactory(
                () -> null,
                () -> IDENTITY_FILTER,
                mockOutputSupplier()
        );
        final ConfigVariableExpander cve = ConfigVariableExpander.withoutSecret(EnvironmentVariableProvider.defaultProvider());

        // this pipeline generates 10 classes
        // - 7 for the filters for the nested and leaf Datasets
        // - 3 for the sequence of outputs with a conditional
        final PipelineIR baselinePipeline = ConfigCompiler.configToPipelineIR(
                IRHelpers.toSourceWithMetadataFromPath("org/logstash/config/ir/cache/pipeline_reuse_baseline.conf"),
                false, cve);
        final CompiledPipeline cBaselinePipeline = new CompiledPipeline(baselinePipeline, pluginFactory);

        // this pipeline is much bigger than the baseline
        // but is carefully crafted to reuse the same classes as the baseline pipeline
        final PipelineIR pipelineTwiceAsBig = ConfigCompiler.configToPipelineIR(
                IRHelpers.toSourceWithMetadataFromPath("org/logstash/config/ir/cache/pipeline_reuse_test.conf"),
                false, cve);
        final CompiledPipeline cPipelineTwiceAsBig = new CompiledPipeline(pipelineTwiceAsBig, pluginFactory);

        // test: compiling a much bigger pipeline and asserting no additional classes are generated
        ComputeStepSyntaxElement.cleanClassCache();
        cBaselinePipeline.buildExecution();
        final int cachedBefore = ComputeStepSyntaxElement.classCacheSize();
        cPipelineTwiceAsBig.buildExecution();
        final int cachedAfter = ComputeStepSyntaxElement.classCacheSize();

        final String message = String.format("unexpected cache size, cachedAfter: %d, cachedBefore: %d", cachedAfter, cachedBefore);
        assertEquals(message, 0, cachedAfter - cachedBefore);
    }