package org.smoothbuild.task.base; import static org.smoothbuild.task.base.AlgorithmHashes.arrayAlgorithmHash; import org.smoothbuild.lang.type.ArrayType; import org.smoothbuild.lang.type.Type; import org.smoothbuild.lang.value.Array; import org.smoothbuild.lang.value.ArrayBuilder; import org.smoothbuild.lang.value.Value; import org.smoothbuild.task.exec.ContainerImpl; import com.google.common.hash.HashCode; public class ArrayAlgorithm implements Algorithm { private final ArrayType arrayType; public ArrayAlgorithm(ArrayType arrayType) { this.arrayType = arrayType; } public HashCode hash() { return arrayAlgorithmHash(); } public Type resultType() { return arrayType; } public Output execute(Input input, ContainerImpl container) { Class<? extends Value> elementClass = (Class<? extends Value>) arrayType.elemType().jType() .getRawType(); return new Output(inputToArray(input, container, elementClass)); } private <T extends Value> Array<T> inputToArray(Input input, ContainerImpl container, Class<T> elementClass) { ArrayBuilder<T> builder = container.create().arrayBuilder(elementClass); for (T value : (Iterable<T>) input.values()) { builder.add(value); } return builder.build(); } }