
one.xingyi.optics.annotations.serialise.IAnnotationProcessorStore Maven / Gradle / Ivy
package one.xingyi.optics.annotations.serialise;
import lombok.*;
import one.xingyi.optics.annotations.processors.PackageAndClass;
import one.xingyi.optics.annotations.interfaces.IFunctionWithException;
import javax.annotation.processing.Filer;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiFunction;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
public interface IAnnotationProcessorStore extends IAnnotationProcessorLoader, IAnnotationProcessorStorer {
static IFunctionWithException classNameToFileObjectForExtension(Filer filer, String extension) {
return pckAndClass -> filer.createResource(StandardLocation.SOURCE_OUTPUT, pckAndClass.getPackageName() + ".storeFor" + extension, pckAndClass.getClassName() + "." + extension);
}
static IAnnotationProcessorStore defaultStore(Filer filer,
Function fromToClassName,
String extension,
BiFunction parser,
Function printer,
Consumer logger,
Predicate debug) {
var cache = new ConcurrentHashMap();
var classNameToFileObject = classNameToFileObjectForExtension(filer, extension);
var storer = new CachedAnnotationProcessorStorer(
new DebuggingAnnotationProcessorStorer(new AnnotationProcessorStorer(fromToClassName, classNameToFileObject, printer),
debug, logger), cache, fromToClassName);
var loader = new DebuggingAnnotationProcessorLoader(
new CachedAnnotationProcessorLoader(
new AnnotationProcessorLoader(fromToClassName, classNameToFileObject, parser),
cache, fromToClassName),
debug, logger);
return new DefaultAnnotationProcessorStore<>(storer, loader);
}
}
@EqualsAndHashCode
@Getter
@ToString
@RequiredArgsConstructor
class DefaultAnnotationProcessorStore implements IAnnotationProcessorStore {
private final IAnnotationProcessorStorer storer;
private final IAnnotationProcessorLoader loader;
@Override
public To load(From from) throws IOException {
return loader.load(from);
}
@Override
public void store(From from, To to) throws IOException {
storer.store(from, to);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy