List converted from an Enum array in Ivy Script doesn't work correctly
Today I found something looks like a bug in Ivy Script.
In Ivy Script, I want to have a `List` of all the elements of an `enum`, say `WorkflowPriority`, I simply call `WorkflowPriority.values()`. However, the instance of `List` returned by the call doesn't work correctly, especially with operation `contains` and `remove`.
Here are the tests that I made to check:
(This is an Ivy Script snippet)
import org.junit.Assert;
import com.genzerhawherk.bugs.Lists;
import ch.ivyteam.ivy.workflow.WorkflowPriority;
// Below are all failed tests
Assert.assertTrue(WorkflowPriority.values().contains(WorkflowPriority.HIGH));
List<WorkflowPriority> withGenerics = WorkflowPriority.values();
Assert.assertTrue(withGenerics.contains(WorkflowPriority.HIGH));
List fromEnums = Lists.fromEnums(WorkflowPriority.class);
Assert.assertTrue(fromEnums.contains(WorkflowPriority.HIGH));
List fromEnumVarargs = Lists.enumVarArgs(WorkflowPriority.HIGH, WorkflowPriority.EXCEPTION);
Assert.assertTrue(fromEnumVarargs.contains(WorkflowPriority.HIGH));
// Below are all passed tests
List listComprehensive = [WorkflowPriority.HIGH];
Assert.assertTrue(listComprehensive.contains(WorkflowPriority.HIGH));
List newPriorities = new List().addAll(WorkflowPriority.values());
Assert.assertTrue(newPriorities.contains(WorkflowPriority.HIGH));
List fromList = Lists.toArray([WorkflowPriority.HIGH]);
Assert.assertTrue(fromList.contains(WorkflowPriority.HIGH));
List fromVarArgs = Lists.normalVarArgs(WorkflowPriority.HIGH);
Assert.assertTrue(fromVarArgs.contains(WorkflowPriority.HIGH));
List<WorkflowPriority> manuallyConstructed = new List<WorkflowPriority>();
manuallyConstructed.add(WorkflowPriority.HIGH);
Assert.assertTrue(manuallyConstructed.contains(WorkflowPriority.HIGH));
The bug particularly relates to converting <T `<T extends Enum<T>> Enum<T>> T[] into a `List<T>``List<T>`
Below is the class `Lists` I use in the test
public class Lists {
public static Object[] toArray(Collection<?> collection) {
return collection.toArray();
}
@SafeVarargs
public static <T> T[] normalVarArgs(T...elements) {
return Arrays.copyOf(elements, elements.length);
}
public static <T extends Enum<T>> T[] fromEnums(Class<T> enums) {
return enums.getEnumConstants();
}
@SafeVarargs
public static <T extends Enum<T>> T[] enumVarArgs(T...enums) {
return enums;
}
}