32 lines
1.1 KiB
Java
32 lines
1.1 KiB
Java
package tc.oc.pgm.match;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
import com.google.inject.TypeLiteral;
|
|
import tc.oc.commons.core.reflect.TypeParameterCache;
|
|
import tc.oc.pgm.module.ModuleLoadException;
|
|
|
|
/**
|
|
* Creates a {@link MatchModule} to be loaded into a {@link Match},
|
|
* or returns null to indicate that the module is not needed.
|
|
*/
|
|
@Deprecated
|
|
public interface MatchModuleFactory<T extends MatchModule> {
|
|
|
|
TypeParameterCache<MatchModuleFactory, MatchModule> MATCH_MODULE_TYPE_CACHE = new TypeParameterCache<>(MatchModuleFactory.class, "T");
|
|
|
|
static <T extends MatchModule> TypeLiteral<T> matchModuleType(TypeLiteral<? extends MatchModuleFactory<T>> factoryType) {
|
|
return (TypeLiteral<T>) MATCH_MODULE_TYPE_CACHE.resolve(factoryType);
|
|
}
|
|
|
|
/**
|
|
* Return a new {@link T} module for the given {@link Match},
|
|
* or null to omit the module for that match.
|
|
*
|
|
* If a module is returned, it's members are injected automatically,
|
|
* which means this method must NOT inject anything into the module
|
|
* itself.
|
|
*/
|
|
@Nullable T createMatchModule(Match match) throws ModuleLoadException;
|
|
}
|