class InvokeFirst {
    @Benchmark
    public void genLambda(Blackhole bh) throws Throwable {<FILL_FUNCTION_BODY>}

    @Benchmark
    public void genLambdaASM(Blackhole bh) throws Throwable {
        ObjIntConsumer<Bean> function = LambdaGenerator.createSetterInt(Bean.class, "setId");
        Bean bean = new Bean();
        function.accept(bean, 123);
        bh.consume(bean);
    }

    @Benchmark
    public void getMethod(Blackhole bh) throws Throwable {
        Method method = Bean.class.getMethod("setId", int.class);

        Bean bean = new Bean();
        method.invoke(bean, 123);
        bh.consume(bean);
    }

    public static class Bean {
        private int id;
        private String name;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static void main(String[] args) throws RunnerException {
        Options options = new OptionsBuilder()
                .include(InvokeFirst.class.getName())
                .mode(Mode.Throughput)
                .timeUnit(TimeUnit.MILLISECONDS)
                .warmupIterations(1)
                .forks(1)
                .build();
        new Runner(options).run();
    }
}

        MethodHandles.Lookup lookup = JDKUtils.trustedLookup(Bean.class);
        MethodType invokedType = MethodType.methodType(ObjIntConsumer.class);
        MethodHandle target = lookup.findVirtual(Bean.class, "setId", MethodType.methodType(void.class, int.class));
        MethodType instantiatedMethodType = MethodType.methodType(void.class, Bean.class, int.class);
        MethodType samMethodType = MethodType.methodType(void.class, Object.class, int.class);

        CallSite callSite = LambdaMetafactory.metafactory(
                lookup,
                "accept",
                invokedType,
                samMethodType,
                target,
                instantiatedMethodType
        );
        ObjIntConsumer function = (ObjIntConsumer) callSite.getTarget().invoke();

        Bean bean = new Bean();
        function.accept(bean, 123);
        bh.consume(bean);
    
<no_super_class>