// Path: spockito-table/src/main/java/org/tools4j/spockito/table/InjectionContext.java
// enum Phase {
//     /**
//      * Initialisation phase if injection is triggered at initialisation time, for instance when using the Junit-5
//      * {@code SpockitoExtension}, when using {@link SpockitoData} or when directly invoking
//      * {@link SpockitoAnnotations#initData(Object)}.
//      */
//     INIT,
//     /**
//      * Test phase if injection is triggered via a test framework such as junit when invoking the test.
//      */
//     TEST
// }


import static java.util.Objects.requireNonNull;
import static org.tools4j.spockito.table.SpockitoAnnotations.annotationDirectOrMeta;
import org.tools4j.spockito.table.InjectionContext.Phase;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;
        try {
            column = tableRow.getTable().getColumnIndexByName(name);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Could not access table column " + name, e);
        }
        return valueByIndex(tableRow, column);
    }

    private String valueByIndex(final TableRow tableRow, final int index) {
        try {
            return tableRow.get(index);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Could not access table value for column index " + index, e);
        }
    }

    private Object convert(final String value, final Object column) {
        try {
            return valueConverter.convert(targetClass, targetType, value);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Conversion to " + targetClass + " failed for column '" + column +
                    "': " + value, e);
        }
    }

    private static Object dataForAnnotatedElement(final AnnotatedElement element) {
        requireNonNull(element);
        final Data data = annotationDirectOrMeta(element, Data.class);
        try {
            final DataProvider dataProvider = data.value().newInstance();
// Path: spockito-table/src/main/java/org/tools4j/spockito/table/InjectionContext.java
// enum Phase {
//     /**
//      * Initialisation phase if injection is triggered at initialisation time, for instance when using the Junit-5
//      * {@code SpockitoExtension}, when using {@link SpockitoData} or when directly invoking
//      * {@link SpockitoAnnotations#initData(Object)}.
//      */
//     INIT,
//     /**
//      * Test phase if injection is triggered via a test framework such as junit when invoking the test.
//      */
//     TEST
// }


// Path: spockito-table/src/main/java/org/tools4j/spockito/table/SpockitoTableRowConverter.java
import static java.util.Objects.requireNonNull;
import static org.tools4j.spockito.table.SpockitoAnnotations.annotationDirectOrMeta;
import org.tools4j.spockito.table.InjectionContext.Phase;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;
import java.lang.reflect.Type;

        try {
            column = tableRow.getTable().getColumnIndexByName(name);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Could not access table column " + name, e);
        }
        return valueByIndex(tableRow, column);
    }

    private String valueByIndex(final TableRow tableRow, final int index) {
        try {
            return tableRow.get(index);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Could not access table value for column index " + index, e);
        }
    }

    private Object convert(final String value, final Object column) {
        try {
            return valueConverter.convert(targetClass, targetType, value);
        } catch (final Exception e) {
            throw new IllegalArgumentException("Conversion to " + targetClass + " failed for column '" + column +
                    "': " + value, e);
        }
    }

    private static Object dataForAnnotatedElement(final AnnotatedElement element) {
        requireNonNull(element);
        final Data data = annotationDirectOrMeta(element, Data.class);
        try {
            final DataProvider dataProvider = data.value().newInstance();
            final InjectionContext context = InjectionContext.create(Phase.INIT, element);