diff --git a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java index 6e2f3d23b..e5ceba665 100644 --- a/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java +++ b/common/src/main/java/com/dfsek/terra/api/config/meta/MetaValue.java @@ -3,4 +3,7 @@ package com.dfsek.terra.api.config.meta; import java.util.function.Supplier; public interface MetaValue extends Supplier { + static MetaValue of(T1 value) { + return () -> value; + } } diff --git a/common/src/main/java/com/dfsek/terra/api/util/MetaTokenizer.java b/common/src/main/java/com/dfsek/terra/api/util/MetaTokenizer.java new file mode 100644 index 000000000..b30aeaf58 --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/util/MetaTokenizer.java @@ -0,0 +1,10 @@ +package com.dfsek.terra.api.util; + +import java.io.Reader; +import java.util.regex.Pattern; + +public class MetaTokenizer { + public MetaTokenizer(Reader in) { + + } +} diff --git a/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java index cdf88fab4..8c24df782 100644 --- a/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java +++ b/common/src/main/java/com/dfsek/terra/config/loaders/meta/GenericMetaValueLoader.java @@ -4,8 +4,12 @@ import com.dfsek.tectonic.exception.LoadException; import com.dfsek.tectonic.loading.ConfigLoader; import com.dfsek.terra.api.config.meta.MetaContext; import com.dfsek.terra.api.config.meta.MetaValue; +import com.dfsek.terra.api.util.collections.ProbabilityCollection; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.util.List; +import java.util.Map; public class GenericMetaValueLoader extends MetaValueLoader, Object> { protected GenericMetaValueLoader(MetaContext context) { @@ -13,8 +17,19 @@ public class GenericMetaValueLoader extends MetaValueLoader, O } @Override - public MetaValue load(Type t, Object c, ConfigLoader loader) throws LoadException { - return null; + public MetaValue load(Type type, Object c, ConfigLoader loader) throws LoadException { + ProbabilityCollection collection = new ProbabilityCollection<>(); + + if(type instanceof ParameterizedType) { + ParameterizedType pType = (ParameterizedType) type; + Type generic = pType.getActualTypeArguments()[0]; + if(c instanceof String) { + String possibleMeta = ((String) c).trim(); + // TODO: parse meta string + } + + return MetaValue.of(loader.loadType(generic, c)); + } else throw new LoadException("Unable to load config! Could not retrieve parameterized type: " + type); } @Override