
com.freya02.botcommands.api.parameters.ParameterResolverFactory Maven / Gradle / Ivy
package com.freya02.botcommands.api.parameters;
import com.freya02.botcommands.internal.UtilsKt;
import kotlin.reflect.KClass;
import org.jetbrains.annotations.NotNull;
/**
* Factory for {@link ParameterResolver parameter resolvers}.
*
* @see ParameterResolver
*/
public abstract class ParameterResolverFactory, R> {
private final KClass resolverType;
private final KClass jvmErasure;
/**
* Constructs a new parameter resolver factory
*
* @param resolverType Class of the resolver
* @param clazz Class of the parameter being resolved
*/
public ParameterResolverFactory(Class resolverType, @NotNull Class clazz) {
this.resolverType = UtilsKt.toKotlin(resolverType);
this.jvmErasure = UtilsKt.toKotlin(clazz);
}
/**
* Constructs a new parameter resolver factory
*
* @param resolverType Class of the resolver
* @param clazz Class of the parameter being resolved
*/
public ParameterResolverFactory(KClass resolverType, @NotNull KClass clazz) {
this.resolverType = resolverType;
this.jvmErasure = clazz;
}
public KClass getResolverType() {
return resolverType;
}
public KClass getJvmErasure() {
return jvmErasure;
}
@NotNull
public abstract T get(@NotNull ParameterWrapper parameter);
@SuppressWarnings({"unchecked", "rawtypes"})
public static , R> ParameterResolverFactory singleton(T resolver) {
return new ParameterResolverFactory<>(resolver.getClass(), UtilsKt.toJava(resolver.getJvmErasure())) {
@NotNull
@Override
public T get(@NotNull ParameterWrapper parameter) {
return resolver;
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy