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

        final PipelineIR baselinePipeline = ConfigCompiler.configToPipelineIR(
                IRHelpers.toSourceWithMetadataFromPath("org/logstash/config/ir/cache/pipeline1.conf"),
                false, null);
        final CompiledPipeline cBaselinePipeline = new CompiledPipeline(baselinePipeline, pluginFactory);
        final ConfigVariableExpander cve = ConfigVariableExpander.withoutSecret(EnvironmentVariableProvider.defaultProvider());

        final PipelineIR pipelineWithDifferentId = ConfigCompiler.configToPipelineIR(
                IRHelpers.toSourceWithMetadataFromPath("org/logstash/config/ir/cache/pipeline2.conf"),
                false, cve);
        final CompiledPipeline cPipelineWithDifferentId = new CompiledPipeline(pipelineWithDifferentId, pluginFactory);

        // actual test: compiling a pipeline with an extra filter should only create 1 extra class
        ComputeStepSyntaxElement.cleanClassCache();
        cBaselinePipeline.buildExecution();
        final int cachedBefore = ComputeStepSyntaxElement.classCacheSize();
        cPipelineWithDifferentId.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);
    }