Utils/Reflect/src/main/java/eu/mikroskeem/utils/reflect/Validate.java

99 lines
3.7 KiB
Java

package eu.mikroskeem.utils.reflect;
import lombok.Getter;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
import java.util.stream.Stream;
@Deprecated
public class Validate {
/* Code got from Google Guava */
private static <T> T checkNotNull(T reference, @Nullable Object errorMessage) {
if(reference == null) {
throw new NullPointerException(String.valueOf(errorMessage));
} else {
return reference;
}
}
public static void checkMethods(ClassDescriptor classDescriptor, Validate.MethodDescriptor... methods) {
checkClass(classDescriptor);
Stream.of(methods).forEach(methodDescriptor ->
checkNotNull(Reflect.getMethod(classDescriptor.getClazz(),
methodDescriptor.getMethodName(),
methodDescriptor.getArguments()),
String.format("Method %s(%s) not found",
methodDescriptor.getMethodName(),
Arrays.toString(methodDescriptor.getArguments())
))
);
}
public static void checkConstructors(ClassDescriptor classDescriptor,
Validate.ConstructorDescriptor... constructors) {
checkClass(classDescriptor);
Stream.of(constructors).forEach(constructorDescriptor -> {
try {
checkNotNull(classDescriptor.getClazz().getConstructor(constructorDescriptor.getArguments()),
String.format("Constructor (%s) not found",
Arrays.toString(constructorDescriptor.getArguments())
));
} catch (Exception e){
throw new NullPointerException(e.getMessage());
}
});
}
public static void checkClass(ClassDescriptor classDescriptor){
checkNotNull(classDescriptor.getClazz(), "Class is null");
Stream.of(classDescriptor.getExtendingClasses()).forEach(clazz->{
if(!clazz.isAssignableFrom(classDescriptor.getClazz())){
throw new NullPointerException(String.format("Class doesn't extend %s", clazz.getSimpleName()));
}
});
}
public static @Getter class ClassDescriptor {
private final Class<?> clazz;
private final Class<?>[] extendingClasses;
private ClassDescriptor(Class<?> clazz, Class<?>... arguments){
this.clazz = clazz;
this.extendingClasses = arguments;
}
public static ClassDescriptor newClassDescriptor(Class<?> clazz, Class<?>... classes){
return new ClassDescriptor(clazz, classes);
}
public static ClassDescriptor newClassDescriptor(String clazzName, Class<?>... classes){
Class<?> clazz = Reflect.getClass(clazzName);
return new ClassDescriptor(clazz, classes);
}
}
public static @Getter class ConstructorDescriptor {
private final Class[] arguments;
private ConstructorDescriptor(Class... arguments){
this.arguments = arguments;
}
public static ConstructorDescriptor newConstructorDescriptor(Class... arguments){
return new ConstructorDescriptor(arguments);
}
}
public static @Getter class MethodDescriptor {
private final String methodName;
private final Class[] arguments;
private MethodDescriptor(String methodName, Class... arguments){
this.methodName = methodName;
this.arguments = arguments;
}
public static MethodDescriptor newMethodDescriptor(String methodName, Class... arguments){
return new MethodDescriptor(methodName, arguments);
}
}
}