ProjectAres/PGM/src/main/java/tc/oc/pgm/features/FeatureTypeLiterals.java

41 lines
1.7 KiB
Java

package tc.oc.pgm.features;
import com.google.inject.TypeLiteral;
import tc.oc.commons.core.reflect.ResolvableType;
import tc.oc.commons.core.reflect.TypeArgument;
public interface FeatureTypeLiterals {
default <T extends FeatureDefinition> TypeLiteral<Feature<T>> Feature(TypeLiteral<T> type) {
return new ResolvableType<Feature<T>>(){}.with(new TypeArgument<T>(type){});
}
default <T extends FeatureDefinition> TypeLiteral<Feature<T>> Feature(Class<T> type) {
return Feature(TypeLiteral.get(type));
}
default <T extends FeatureDefinition> TypeLiteral<FeatureParser<T>> FeatureParser(TypeLiteral<T> type) {
return new ResolvableType<FeatureParser<T>>(){}.with(new TypeArgument<T>(type){});
}
default <T extends FeatureDefinition> TypeLiteral<FeatureParser<T>> FeatureParser(Class<T> type) {
return FeatureParser(TypeLiteral.get(type));
}
default <T extends FeatureDefinition> TypeLiteral<FeatureDefinitionParser<T>> FeatureDefinitionParser(TypeLiteral<T> type) {
return new ResolvableType<FeatureDefinitionParser<T>>(){}.with(new TypeArgument<T>(type){});
}
default <T extends FeatureDefinition> TypeLiteral<FeatureDefinitionParser<T>> FeatureDefinitionParser(Class<T> type) {
return FeatureDefinitionParser(TypeLiteral.get(type));
}
default <T extends FeatureDefinition> TypeLiteral<ReflectiveFeatureParser<T>> ReflectiveFeatureParser(TypeLiteral<T> type) {
return new ResolvableType<ReflectiveFeatureParser<T>>(){}.with(new TypeArgument<T>(type){});
}
default <T extends FeatureDefinition> TypeLiteral<ReflectiveFeatureParser<T>> ReflectiveFeatureParser(Class<T> type) {
return ReflectiveFeatureParser(TypeLiteral.get(type));
}
}