All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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