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

one.xingyi.optics.annotations.serialise.IAnnotationProcessorStore Maven / Gradle / Ivy

There is a newer version: 1.5.9
Show newest version
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