import java.util.Iterator;
import java.util.Objects;

public class TestInnerEAMinimal {

    Integer[] ints;

    static class InnerList<E> implements Iterable<E> {
        final E[] a;

        public InnerList(E[] args) {
            a = Objects.requireNonNull(args);
        }

        @Override
        public Iterator<E> iterator() {
            return new It();
        }

        class It implements Iterator<E> {
            int cursor;

            @Override
            public boolean hasNext() {
                return cursor < a.length;
            }

            @Override
            public E next() {
                return a[cursor++];
            }
        }
    }

    // This method will be INLINED into jmhStub
    public long inner_inlined() {
        long sum = 0;
        for (Integer i : new InnerList<>(ints)) {
            sum += i;
        }
        return sum;
    }

    // Simulates JMH stub — this is the compilation root
    public static long jmhStub(TestInnerEAMinimal obj, int iters) {
        long result = 0;
        for (int i = 0; i < iters; i++) {
            result += obj.inner_inlined();
        }
        return result;
    }

    public static void main(String[] args) {
        TestInnerEAMinimal t = new TestInnerEAMinimal();
        t.ints = new Integer[] { 1, 2, 3, 4, 5 };
        long sum = 0;
        for (int i = 0; i < 50_000; i++) {
            sum += jmhStub(t, 1);
        }
        System.out.println("Result: " + sum);
    }
}
