com_baeldung_transactional_TransactionalDetectionUnitTest_java
org.springframework.beans.BeanUtils
public static <T> T instantiateClass(Class<T> clazz) throws BeanInstantiationException {
        Assert.notNull(clazz, "Class must not be null");
        if (clazz.isInterface()) {
            throw new BeanInstantiationException(clazz, "Specified class is an interface");
        }
        try {
            return BeanUtils.instantiateClass(clazz.getDeclaredConstructor(new Class[0]), new Object[0]);
        }
        catch (NoSuchMethodException ex) {
            Constructor<T> ctor = BeanUtils.findPrimaryConstructor(clazz);
            if (ctor != null) {
                return BeanUtils.instantiateClass(ctor, new Object[0]);
            }
            throw new BeanInstantiationException(clazz, "No default constructor found", (Throwable)ex);
        }
        catch (LinkageError err) {
            throw new BeanInstantiationException(clazz, "Unresolvable class definition", (Throwable)err);
        }
    }
 -> java.lang.Class.isInterface(): boolean -> java.lang.Class.getDeclaredConstructor(java.lang.Class[]): java.lang.reflect.Constructor -> java.lang.reflect.Constructor.getModifiers(): int -> java.lang.reflect.Modifier.isPublic(int): boolean -> java.lang.reflect.Constructor.getDeclaringClass(): java.lang.Class -> java.lang.Class.getModifiers(): int -> java.lang.reflect.Modifier.isPublic(int): boolean -> java.lang.reflect.Constructor.getParameterTypes(): java.lang.Class[] -> java.lang.reflect.Constructor.newInstance(java.lang.Object[]): java.lang.Object -> java.lang.Class.getName(): java.lang.String -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.substring(int,int): java.lang.String -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.String.length(): int -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int -> java.util.List.add(java.lang.Object): boolean -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object
 [CALL] [CALL] [EXIT] -> java.lang.Class.isInterface(): boolean -> java.lang.Class.getDeclaredConstructor(java.lang.Class[]): java.lang.reflect.Constructor [CALL] [CALL] [EXIT] [CALL] -> java.lang.reflect.Constructor.getModifiers(): int -> java.lang.reflect.Modifier.isPublic(int): boolean -> java.lang.reflect.Constructor.getDeclaringClass(): java.lang.Class -> java.lang.Class.getModifiers(): int -> java.lang.reflect.Modifier.isPublic(int): boolean [EXIT] [CALL] [EXIT] -> java.lang.reflect.Constructor.getParameterTypes(): java.lang.Class[] [CALL] [EXIT] -> java.lang.reflect.Constructor.newInstance(java.lang.Object[]): java.lang.Object [CALL] -> java.lang.Class.getName(): java.lang.String [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.String.equalsIgnoreCase(java.lang.String): boolean -> java.util.Map.get(java.lang.Object): java.lang.Object [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] -> java.lang.String.substring(int,int): java.lang.String [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] [CALL] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean -> java.util.List.get(int): java.lang.Object [CALL] [EXIT] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [CALL] -> java.lang.String.length(): int [CALL] -> java.lang.String.indexOf(int,int): int -> java.lang.String.indexOf(int,int): int [EXIT] [CALL] [EXIT] -> java.util.List.add(java.lang.Object): boolean [EXIT] -> java.util.Map.put(java.lang.Object,java.lang.Object): java.lang.Object [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT]