com.github.dakusui.jcunit.runners.standard.annotations.Value Maven / Gradle / Ivy
package com.github.dakusui.jcunit.runners.standard.annotations;
import com.github.dakusui.jcunit.core.Checks;
import com.github.dakusui.jcunit.core.Utils;
import com.github.dakusui.jcunit.plugins.Plugin;
import com.github.dakusui.jcunit.plugins.PluginUtils;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.LinkedList;
import java.util.List;
@Retention(RetentionPolicy.RUNTIME)
public @interface Value {
String[] value();
class Builder {
private String[] values;
public Builder() {
}
public Builder add(String... values) {
this.values = values;
return this;
}
public Value build() {
return new Value() {
@Override
public Class extends Annotation> annotationType() {
return Value.class;
}
@Override
public String[] value() {
return Builder.this.values;
}
};
}
}
class ArrayBuilder {
private final List values = new LinkedList();
public ArrayBuilder() {
}
public ArrayBuilder add(String... values) {
this.values.add(new Builder().add(values).build());
return this;
}
public Value[] build() {
return this.values.toArray(new Value[this.values.size()]);
}
}
/**
* A resolver that converts {@literal @}{@code Value} into a value whose type is specified as
* a parameter type of constructor.
*
* By this resolver, values given by {@literal @}{@code Value} annotation become actual values
* that are used by plug-in implementations.
*/
class Resolver extends Plugin.Param.Resolver {
public Resolver() {
super(createConverters(PluginUtils.StringArrayResolver.INSTANCE.allConverters()));
}
private static List> createConverters(List> converters) {
return Utils.transform(
Checks.checknotnull(converters),
new Utils.Form, Plugin.Param.Converter>() {
@Override
public Plugin.Param.Converter apply(final Plugin.Param.Converter inConverter) {
return new Plugin.Param.Converter() {
@Override
public Object convert(Class requested, Value inValue) {
return inConverter.convert(requested, inValue.value());
}
@Override
public boolean supports(Class> target) {
return inConverter.supports(target);
}
};
}
}
);
}
@Override
protected Plugin.Param.Converter chooseConverter(Class clazz, List> from) {
return from.get(0);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy