From 7fe2fde3f6299b9192b8fbc9cb893680f6308d7b Mon Sep 17 00:00:00 2001 From: altro3 Date: Tue, 20 Aug 2024 13:44:23 +0700 Subject: [PATCH] Code cleanup. Update versions --- .../micronaut/aot/MicronautAotOptimizer.java | 76 ++++++----- .../main/java/io/micronaut/aot/cli/Main.java | 8 +- .../io/micronaut/aot/cli/VersionProvider.java | 18 +-- .../micronaut/aot/core/AOTCodeGenerator.java | 2 +- .../io/micronaut/aot/core/AOTContext.java | 16 ++- .../java/io/micronaut/aot/core/AOTModule.java | 7 +- .../io/micronaut/aot/core/Configuration.java | 10 +- .../java/io/micronaut/aot/core/Option.java | 3 + .../java/io/micronaut/aot/core/Runtime.java | 2 +- .../core/codegen/AbstractCodeGenerator.java | 2 +- ...ApplicationContextConfigurerGenerator.java | 32 ++--- .../DelegatingSourceGenerationContext.java | 5 +- .../aot/core/codegen/MapGenerator.java | 23 ++-- .../aot/core/config/MetadataUtils.java | 11 +- .../core/config/SourceGeneratorLoader.java | 60 ++++----- .../context/ApplicationContextAnalyzer.java | 31 ++--- .../DefaultSourceGenerationContext.java | 58 ++++----- .../aot/config/ConfigPropsGenerator.java | 4 +- ...actStaticServiceLoaderSourceGenerator.java | 72 +++++------ .../CachedEnvironmentSourceGenerator.java | 8 +- ...onstantPropertySourcesSourceGenerator.java | 3 +- .../DeduceEnvironmentSourceGenerator.java | 35 +++--- .../EnvironmentPropertiesSourceGenerator.java | 22 ++-- ...lVMOptimizationFeatureSourceGenerator.java | 11 +- ...JitStaticServiceLoaderSourceGenerator.java | 114 ++++++++--------- .../KnownMissingTypesSourceGenerator.java | 30 ++--- .../sourcegen/Logback14GeneratorHelper.java | 118 +++++++++--------- .../LogbackConfigurationSourceGenerator.java | 8 +- .../sourcegen/MapPropertySourceGenerator.java | 46 +++---- ...iveStaticServiceLoaderSourceGenerator.java | 87 +++++++------ .../NettyPropertiesSourceGenerator.java | 80 ++++++------ .../std/sourcegen/ParentTagTagClassTuple.java | 2 - .../sourcegen/PublishersSourceGenerator.java | 21 ++-- .../YamlPropertySourceGenerator.java | 18 ++- .../micronaut/build/internal/VersionInfo.java | 4 +- gradle.properties | 4 +- 36 files changed, 534 insertions(+), 517 deletions(-) diff --git a/aot-api/src/main/java/io/micronaut/aot/MicronautAotOptimizer.java b/aot-api/src/main/java/io/micronaut/aot/MicronautAotOptimizer.java index d75feeed..0281eecb 100644 --- a/aot-api/src/main/java/io/micronaut/aot/MicronautAotOptimizer.java +++ b/aot-api/src/main/java/io/micronaut/aot/MicronautAotOptimizer.java @@ -58,7 +58,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.Deque; import java.util.List; import java.util.Locale; import java.util.Optional; @@ -73,13 +72,13 @@ * generation at build time. Its role is to generate a bunch of * source code for various optimizations which can be computed * at build time. - * + *

* Typically, generated code will involve the generation of an * "optimized" entry point for the application, which delegates * to the main entry point, but also performs some static * initialization by making calls to the * {@link io.micronaut.core.optim.StaticOptimizations} class. - * + *

* The Micronaut AOT optimizer is experimental and won't do * anything by its own: it must be integrated in some form, for * example via a build plugin, which in turn will make the generated @@ -87,7 +86,7 @@ * call this class to generate the optimization code, and in addition * create an optimized jar, an optimized native binary or even a * full distribution. - * + *

* The optimizer works by passing in the whole application runtime * classpath and a set of configuration options. It then analyzes * the classpath, for example to identify the services to be loaded, @@ -119,9 +118,9 @@ private MicronautAotOptimizer(List classpath, private void compileGeneratedSources(List extraClasspath, List javaFiles) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - DiagnosticCollector ds = new DiagnosticCollector<>(); + var ds = new DiagnosticCollector(); try (StandardJavaFileManager mgr = compiler.getStandardFileManager(ds, null, null)) { - List fullClasspath = new ArrayList<>(classpath); + var fullClasspath = new ArrayList<>(classpath); fullClasspath.addAll(extraClasspath); List options = compilerOptions(outputClassesDirectory, fullClasspath); List filesToCompile = outputSourceFilesToSourceDir(outputSourcesDirectory, javaFiles); @@ -134,8 +133,8 @@ private void compileGeneratedSources(List extraClasspath, List j throw new RuntimeException("Unable to compile generated classes", e); } List> diagnostics = ds.getDiagnostics().stream() - .filter(d -> d.getKind() == Diagnostic.Kind.ERROR) - .collect(Collectors.toList()); + .filter(d -> d.getKind() == Diagnostic.Kind.ERROR) + .toList(); if (!diagnostics.isEmpty()) { throwCompilationError(diagnostics); } @@ -150,21 +149,21 @@ private void compileGeneratedSources(List extraClasspath, List j */ public static void exportConfiguration(String runtime, File propertiesFile) { List list = SourceGeneratorLoader.list(Runtime.valueOf(runtime.toUpperCase(Locale.ENGLISH))); - try (PrintWriter wrt = new PrintWriter(new FileOutputStream(propertiesFile))) { - Deque queue = new ArrayDeque<>(list); + try (var wrt = new PrintWriter(new FileOutputStream(propertiesFile))) { + var queue = new ArrayDeque<>(list); while (!queue.isEmpty()) { AOTModule generator = queue.pop(); if (!generator.description().isEmpty()) { Arrays.stream(generator.description().split("\r?\n")).forEach(line -> - wrt.println("# " + line)); + wrt.println("# " + line)); } wrt.println(generator.id() + ".enabled = true"); Arrays.stream(generator.subgenerators()) - .map(MetadataUtils::findMetadata) - .filter(Optional::isPresent) - .map(Optional::get) - .sorted(Collections.reverseOrder()) - .forEachOrdered(queue::addFirst); + .map(MetadataUtils::findMetadata) + .filter(Optional::isPresent) + .map(Optional::get) + .sorted(Collections.reverseOrder()) + .forEachOrdered(queue::addFirst); for (Option option : generator.options()) { wrt.println(toPropertiesSample(option)); } @@ -190,16 +189,16 @@ public static void exportConfiguration(String runtime, File propertiesFile) { * @param props the configuration properties */ public static void execute(Properties props) { - Configuration config = new DefaultConfiguration(props); + var config = new DefaultConfiguration(props); String pkg = config.mandatoryValue(GENERATED_PACKAGE); - File outputDir = new File(config.mandatoryValue(OUTPUT_DIRECTORY)); - File sourcesDir = new File(outputDir, "sources"); - File classesDir = new File(outputDir, "classes"); - File logsDir = new File(outputDir, "logs"); + var outputDir = new File(config.mandatoryValue(OUTPUT_DIRECTORY)); + var sourcesDir = new File(outputDir, "sources"); + var classesDir = new File(outputDir, "classes"); + var logsDir = new File(outputDir, "logs"); runner(pkg, sourcesDir, classesDir, logsDir, config) - .addClasspath(config.stringList(CLASSPATH).stream().map(File::new).collect(Collectors.toList())) - .execute(); + .addClasspath(config.stringList(CLASSPATH).stream().map(File::new).collect(Collectors.toList())) + .execute(); } public static Runner runner(String generatedPackage, @@ -211,7 +210,7 @@ public static Runner runner(String generatedPackage, } private static List outputSourceFilesToSourceDir(File srcDir, List javaFiles) { - List srcFiles = new ArrayList<>(javaFiles.size()); + var srcFiles = new ArrayList(javaFiles.size()); if (srcDir.isDirectory() || srcDir.mkdirs()) { StreamHelper.trying(() -> { for (JavaFile javaFile : javaFiles) { @@ -230,7 +229,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } private static void throwCompilationError(List> diagnostics) { - StringBuilder sb = new StringBuilder("Compilation errors:\n"); + var sb = new StringBuilder("Compilation errors:\n"); for (Diagnostic d : diagnostics) { JavaFileObject source = d.getSource(); String srcFile = source == null ? "unknown" : new File(source.toUri()).getName(); @@ -242,11 +241,11 @@ private static void throwCompilationError(List compilerOptions(File dstDir, List classPath) { - List options = new ArrayList<>(); + var options = new ArrayList(); options.add("-source"); - options.add("1.8"); + options.add("17"); options.add("-target"); - options.add("1.8"); + options.add("17"); options.add("-classpath"); String cp = classPath.stream().map(File::getAbsolutePath).collect(Collectors.joining(File.pathSeparator)); options.add(cp); @@ -259,15 +258,15 @@ private void writeLogs(DefaultSourceGenerationContext context) { if (logsDirectory.isDirectory() || logsDirectory.mkdirs()) { writeLines(new File(logsDirectory, OUTPUT_RESOURCES_FILE_NAME), context.getExcludedResources()); context.getDiagnostics().forEach((key, messages) -> { - File logFile = new File(logsDirectory, key.toLowerCase(Locale.US) + ".log"); + var logFile = new File(logsDirectory, key.toLowerCase(Locale.US) + ".log"); writeLines(logFile, messages); }); } } private static void writeLines(File outputFile, Collection lines) { - try (PrintWriter writer = new PrintWriter( - new OutputStreamWriter(new FileOutputStream(outputFile), StandardCharsets.UTF_8) + try (var writer = new PrintWriter( + new OutputStreamWriter(new FileOutputStream(outputFile), StandardCharsets.UTF_8) )) { lines.forEach(writer::println); } catch (FileNotFoundException e) { @@ -318,13 +317,12 @@ public Runner addClasspath(Collection elements) { return this; } - @SuppressWarnings("unchecked") public Runner execute() { - MicronautAotOptimizer optimizer = new MicronautAotOptimizer( - classpath, - outputSourcesDirectory, - outputClassesDirectory, - logsDirectory); + var optimizer = new MicronautAotOptimizer( + classpath, + outputSourcesDirectory, + outputClassesDirectory, + logsDirectory); ApplicationContextAnalyzer analyzer = ApplicationContextAnalyzer.create(spec -> { if (config.containsKey(Environments.TARGET_ENVIRONMENTS_NAMES)) { List targetEnvs = config.stringList(Environments.TARGET_ENVIRONMENTS_NAMES); @@ -335,10 +333,10 @@ public Runner execute() { }); Set environmentNames = analyzer.getEnvironmentNames(); LOGGER.info("Analysis will be performed with active environments: {}", environmentNames); - DefaultSourceGenerationContext context = new DefaultSourceGenerationContext(generatedPackage, analyzer, config, outputClassesDirectory.toPath()); + var context = new DefaultSourceGenerationContext(generatedPackage, analyzer, config, outputClassesDirectory.toPath()); List sourceGenerators = SourceGeneratorLoader.load(config.getRuntime(), context); ApplicationContextConfigurerGenerator generator = new ApplicationContextConfigurerGenerator( - sourceGenerators + sourceGenerators ); generator.generate(context); optimizer.compileGeneratedSources(context.getExtraClasspath(), context.getGeneratedJavaFiles()); diff --git a/aot-cli/src/main/java/io/micronaut/aot/cli/Main.java b/aot-cli/src/main/java/io/micronaut/aot/cli/Main.java index 539593cc..d24cc2bc 100644 --- a/aot-cli/src/main/java/io/micronaut/aot/cli/Main.java +++ b/aot-cli/src/main/java/io/micronaut/aot/cli/Main.java @@ -63,9 +63,9 @@ public class Main implements Runnable, ConfigKeys { @Override public void run() { List classpath = toURLs(classpathString); - Properties props = new Properties(); + var props = new Properties(); if (config.exists()) { - try (InputStreamReader reader = new InputStreamReader(new FileInputStream(config))) { + try (var reader = new InputStreamReader(new FileInputStream(config))) { props.load(reader); } catch (IOException e) { throw new RuntimeException(e); @@ -97,7 +97,7 @@ public void run() { * @param ctxClassLoader the current context classloader */ private void executeInIsolatedLoader(Properties props, URL[] urls, ClassLoader ctxClassLoader) { - URLClassLoader cl = new URLClassLoader(urls, new FilteringClassLoader(ctxClassLoader)); + var cl = new URLClassLoader(urls, new FilteringClassLoader(ctxClassLoader)); try { Thread.currentThread().setContextClassLoader(cl); Class runnerClass = cl.loadClass("io.micronaut.aot.MicronautAotOptimizer"); @@ -127,7 +127,7 @@ private static List toURLs(String classpathString) { } }) .filter(Objects::nonNull) - .collect(Collectors.toList()); + .toList(); } public static int execute(String[] args) { diff --git a/aot-cli/src/main/java/io/micronaut/aot/cli/VersionProvider.java b/aot-cli/src/main/java/io/micronaut/aot/cli/VersionProvider.java index 28061392..a6b58b80 100644 --- a/aot-cli/src/main/java/io/micronaut/aot/cli/VersionProvider.java +++ b/aot-cli/src/main/java/io/micronaut/aot/cli/VersionProvider.java @@ -32,15 +32,15 @@ public class VersionProvider implements CommandLine.IVersionProvider { static { String text = "unknown"; - try (InputStream stream = VersionProvider.class.getResourceAsStream("/version.txt")) { - text = new BufferedReader( - new InputStreamReader(stream, StandardCharsets.UTF_8)) - .lines() - .collect(Collectors.joining("\n")); - } catch (Exception ex) { - // noop - } - VERSION = text; + try (InputStream stream = VersionProvider.class.getResourceAsStream("/version.txt")) { + text = new BufferedReader( + new InputStreamReader(stream, StandardCharsets.UTF_8)) + .lines() + .collect(Collectors.joining("\n")); + } catch (Exception ex) { + // noop + } + VERSION = text; } @Override diff --git a/aot-core/src/main/java/io/micronaut/aot/core/AOTCodeGenerator.java b/aot-core/src/main/java/io/micronaut/aot/core/AOTCodeGenerator.java index 39deb28f..6ffb1c98 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/AOTCodeGenerator.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/AOTCodeGenerator.java @@ -31,7 +31,7 @@ *

  • one or more source files
  • *
  • one or more resource files
  • * - * + *

    * Code generators must be annotated with {@link AOTModule}. */ public interface AOTCodeGenerator { diff --git a/aot-core/src/main/java/io/micronaut/aot/core/AOTContext.java b/aot-core/src/main/java/io/micronaut/aot/core/AOTContext.java index cc287f29..c59357e8 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/AOTContext.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/AOTContext.java @@ -45,6 +45,7 @@ public interface AOTContext { /** * Returns the source generators configuration. + * * @return the configuration */ @NonNull @@ -52,6 +53,7 @@ public interface AOTContext { /** * Returns the application context analyzer. + * * @return the application context analyzer */ @NonNull @@ -59,6 +61,7 @@ public interface AOTContext { /** * Registers a generated source file. + * * @param javaFile the file to be added. */ void registerGeneratedSourceFile(@NonNull JavaFile javaFile); @@ -66,6 +69,7 @@ public interface AOTContext { /** * Registers a code block to be executed statically when * the optimized binary is loaded. + * * @param staticInitializer the static initializer method */ void registerStaticInitializer(MethodSpec staticInitializer); @@ -75,6 +79,7 @@ public interface AOTContext { * create a class which implements the {@link io.micronaut.core.optim.StaticOptimizations} * service type. The consumer should create a body which returns * an instance of the optimization type. + * * @param className the name of the class to generate * @param optimizationKind the type of the optimization * @param bodyBuilder the builder of the body of the load() method @@ -84,6 +89,7 @@ public interface AOTContext { /** * Registers a generated service type. + * * @param serviceType the type of the service * @param simpleServiceName the simple name of the generated type */ @@ -91,6 +97,7 @@ public interface AOTContext { /** * Registers a new generated resource. + * * @param path the relative path to the resource (including file name) * @param consumer the consumer to be called when the resource is generated. */ @@ -118,12 +125,14 @@ public interface AOTContext { /** * Registers a type as a requiring initialization at build time. + * * @param className the type */ void registerBuildTimeInit(@NonNull String className); /** * Generates a java file spec. + * * @param typeSpec the type spec of the main class * @return a java file */ @@ -144,6 +153,7 @@ public interface AOTContext { /** * Stores an entry in the context. The entry may be read by other * processors, as long as they are executed in the proper order. + * * @param type the class of the value to store * @param value the value to store * @param the type of the value @@ -152,6 +162,7 @@ public interface AOTContext { /** * Reads an entry from the context. + * * @param type the class of the entry * @param the type of the entry * @return an empty value if absent @@ -161,6 +172,7 @@ public interface AOTContext { /** * Returns the diagnostics map. + * * @return the diagnostics */ @NonNull @@ -168,13 +180,15 @@ public interface AOTContext { /** * Returns the target runtime environment. + * * @return target runtime */ @NonNull Runtime getRuntime(); /** - * Returns the set of classes which require build time initialization + * Returns the set of classes which require build time initialization. + * * @return the set of classes needing build time init */ Set getBuildTimeInitClasses(); diff --git a/aot-core/src/main/java/io/micronaut/aot/core/AOTModule.java b/aot-core/src/main/java/io/micronaut/aot/core/AOTModule.java index 6dc85969..200f1210 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/AOTModule.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/AOTModule.java @@ -28,6 +28,7 @@ public @interface AOTModule { /** * A unique identifier for this source generator. + * * @return the id */ String id(); @@ -36,6 +37,7 @@ * Returns a description for this source generator. * Description is optional because some code generators * are purely internal and not exposed to users. + * * @return a description or an empty options */ String description() default ""; @@ -43,6 +45,7 @@ /** * Returns the identifiers of source generators which must * be executed before this generator is called. + * * @return the list of ids */ String[] dependencies() default {}; @@ -60,14 +63,16 @@ /** * Returns the set of configuration keys which affect * the configuration of this source generator. + * * @return a set of configuration keys */ Option[] options() default {}; /** * Returns the runtimes this module is valid for. + * * @return the list of runtimes this module applies to. */ - Runtime[] enabledOn() default { Runtime.JIT, Runtime.NATIVE }; + Runtime[] enabledOn() default {Runtime.JIT, Runtime.NATIVE}; } diff --git a/aot-core/src/main/java/io/micronaut/aot/core/Configuration.java b/aot-core/src/main/java/io/micronaut/aot/core/Configuration.java index 251b0fb8..a9daac0b 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/Configuration.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/Configuration.java @@ -33,6 +33,7 @@ public interface Configuration { /** * Returns true if the configuration contains an entry * for the specified key. + * * @param key the key to look for * @return true if the configuration contains an entry for the key */ @@ -98,10 +99,10 @@ default List stringList(@NonNull String key) { @NonNull default List stringList(@NonNull String key, @NonNull String separator) { return optionalValue(key, opt -> opt.map(string -> - Arrays.stream(string.split(separator)) - .filter(Objects::nonNull) - .filter(s -> !s.trim().isEmpty()) - .collect(Collectors.toList()) + Arrays.stream(string.split(separator)) + .filter(Objects::nonNull) + .filter(s -> !s.trim().isEmpty()) + .collect(Collectors.toList()) ).orElse(Collections.emptyList())); } @@ -131,6 +132,7 @@ default boolean isFeatureEnabled(@NonNull String featureId) { /** * Returns the target runtime for optimizations. + * * @return the target runtime */ @NonNull diff --git a/aot-core/src/main/java/io/micronaut/aot/core/Option.java b/aot-core/src/main/java/io/micronaut/aot/core/Option.java index 89bd0ea9..59eacc39 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/Option.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/Option.java @@ -21,18 +21,21 @@ public @interface Option { /** * Returns the key used to configure this option. + * * @return the key, as found in properties */ String key(); /** * Returns a description of this configuration option. + * * @return the description */ String description() default ""; /** * Returns a sample value for this option, if any. + * * @return a sample value */ String sampleValue() default ""; diff --git a/aot-core/src/main/java/io/micronaut/aot/core/Runtime.java b/aot-core/src/main/java/io/micronaut/aot/core/Runtime.java index c89a613a..4b6ef87c 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/Runtime.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/Runtime.java @@ -16,7 +16,7 @@ package io.micronaut.aot.core; /** - * The targetted type of runtime. + * The targeted type of runtime. */ public enum Runtime { JIT("JIT"), diff --git a/aot-core/src/main/java/io/micronaut/aot/core/codegen/AbstractCodeGenerator.java b/aot-core/src/main/java/io/micronaut/aot/core/codegen/AbstractCodeGenerator.java index 0bef6d6a..4eb57410 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/codegen/AbstractCodeGenerator.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/codegen/AbstractCodeGenerator.java @@ -34,7 +34,7 @@ public static String simpleNameOf(String fqcn) { protected static MethodSpec staticMethodBuilder(String name, Consumer consumer) { MethodSpec.Builder builder = MethodSpec.methodBuilder(name) - .addModifiers(Modifier.PRIVATE, Modifier.STATIC); + .addModifiers(Modifier.PRIVATE, Modifier.STATIC); consumer.accept(builder); return builder.build(); } diff --git a/aot-core/src/main/java/io/micronaut/aot/core/codegen/ApplicationContextConfigurerGenerator.java b/aot-core/src/main/java/io/micronaut/aot/core/codegen/ApplicationContextConfigurerGenerator.java index ccc3acb9..0b07d4e2 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/codegen/ApplicationContextConfigurerGenerator.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/codegen/ApplicationContextConfigurerGenerator.java @@ -26,8 +26,8 @@ import io.micronaut.context.ApplicationContextBuilder; import io.micronaut.context.ApplicationContextConfigurer; import io.micronaut.core.annotation.NonNull; +import io.micronaut.core.util.CollectionUtils; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -40,7 +40,7 @@ * it is responsible for generating a new entry point, which delegates * to the original entry point of the application, and injects a number * of optimizations before starting the application. - * + *

    * The list of optimizations to inject is determined by the list of * delegate optimizers which are passed to this generator. */ @@ -58,10 +58,10 @@ public ApplicationContextConfigurerGenerator(List sourceGenera @Override public void generate(@NonNull AOTContext context) { TypeSpec.Builder optimizedEntryPoint = TypeSpec.classBuilder(CUSTOMIZER_CLASS_NAME) - .addSuperinterface(ApplicationContextConfigurer.class) - .addModifiers(PUBLIC); + .addSuperinterface(ApplicationContextConfigurer.class) + .addModifiers(PUBLIC); CodeBlock.Builder staticInitializer = CodeBlock.builder(); - StaticInitializerCapturingContext capturer = new StaticInitializerCapturingContext(context, optimizedEntryPoint, staticInitializer); + var capturer = new StaticInitializerCapturingContext(context, optimizedEntryPoint, staticInitializer); for (AOTCodeGenerator sourceGenerator : sourceGenerators) { sourceGenerator.generate(capturer); } @@ -74,17 +74,17 @@ public void generate(@NonNull AOTContext context) { private void addDiagnostics(AOTContext context, TypeSpec.Builder optimizedEntryPoint) { MethodSpec.Builder configure = MethodSpec.methodBuilder("configure") - .addModifiers(PUBLIC) - .addAnnotation(Override.class) - .addParameter(ApplicationContextBuilder.class, "builder"); - MapGenerator mapGenerator = new MapGenerator(); + .addModifiers(PUBLIC) + .addAnnotation(Override.class) + .addParameter(ApplicationContextBuilder.class, "builder"); + var mapGenerator = new MapGenerator(); CodeBlock mapBlock = mapGenerator.generateMap(optimizedEntryPoint, createDiagnosticsMap(context)); configure.addStatement("builder.properties($L)", mapBlock); optimizedEntryPoint.addMethod(configure.build()); } private Map createDiagnosticsMap(AOTContext context) { - Map values = new LinkedHashMap<>(); + var values = CollectionUtils.newLinkedHashMap(3); values.put("micronaut.aot.enabled", true); values.put("micronaut.aot.runtime", context.getRuntime().toString()); values.put("micronaut.aot.optimizations", buildOptimizationList()); @@ -93,12 +93,12 @@ private Map createDiagnosticsMap(AOTContext context) { private List buildOptimizationList() { return sourceGenerators.stream() - .map(Object::getClass) - .map(MetadataUtils::findMetadata) - .filter(Optional::isPresent) - .map(Optional::get) - .map(AOTModule::id) - .collect(Collectors.toList()); + .map(Object::getClass) + .map(MetadataUtils::findMetadata) + .filter(Optional::isPresent) + .map(Optional::get) + .map(AOTModule::id) + .collect(Collectors.toList()); } private static final class StaticInitializerCapturingContext extends DelegatingSourceGenerationContext { diff --git a/aot-core/src/main/java/io/micronaut/aot/core/codegen/DelegatingSourceGenerationContext.java b/aot-core/src/main/java/io/micronaut/aot/core/codegen/DelegatingSourceGenerationContext.java index c2c213c6..6d54c371 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/codegen/DelegatingSourceGenerationContext.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/codegen/DelegatingSourceGenerationContext.java @@ -19,9 +19,9 @@ import com.squareup.javapoet.JavaFile; import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec; +import io.micronaut.aot.core.AOTContext; import io.micronaut.aot.core.Configuration; import io.micronaut.aot.core.Runtime; -import io.micronaut.aot.core.AOTContext; import io.micronaut.aot.core.context.ApplicationContextAnalyzer; import io.micronaut.core.annotation.NonNull; @@ -88,7 +88,8 @@ public void registerStaticOptimization(String className, Class optimizati /** * Registers a generated service type. - * @param serviceType the type of the service + * + * @param serviceType the type of the service * @param simpleServiceName the simple name of the generated type */ @Override diff --git a/aot-core/src/main/java/io/micronaut/aot/core/codegen/MapGenerator.java b/aot-core/src/main/java/io/micronaut/aot/core/codegen/MapGenerator.java index 91391664..ef27a2dd 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/codegen/MapGenerator.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/codegen/MapGenerator.java @@ -51,19 +51,18 @@ public final CodeBlock generateMap(TypeSpec.Builder builder, Map private String convertValueToSource(Object value, TypeSpec.Builder builder) { if (value == null) { return "null"; + } + Class valueClass = value.getClass(); + if (CharSequence.class.isAssignableFrom(valueClass)) { + return CodeBlock.of("$S", value).toString(); + } else if (Number.class.isAssignableFrom(valueClass) || Boolean.class.isAssignableFrom(valueClass)) { + return convertNumberOrBoolean(valueClass, value); + } else if (List.class.isAssignableFrom(valueClass)) { + return generateListMethod((List) value, builder); + } else if (Map.class.isAssignableFrom(valueClass)) { + return generateMapMethod((Map) value, builder); } else { - Class valueClass = value.getClass(); - if (CharSequence.class.isAssignableFrom(valueClass)) { - return CodeBlock.of("$S", value).toString(); - } else if (Number.class.isAssignableFrom(valueClass) || Boolean.class.isAssignableFrom(valueClass)) { - return convertNumberOrBoolean(valueClass, value); - } else if (List.class.isAssignableFrom(valueClass)) { - return generateListMethod((List) value, builder); - } else if (Map.class.isAssignableFrom(valueClass)) { - return generateMapMethod((Map) value, builder); - } else { - throw new UnsupportedOperationException("Configuration map contains an entry of type " + valueClass + " which is not supported yet. Please file a bug report."); - } + throw new UnsupportedOperationException("Configuration map contains an entry of type " + valueClass + " which is not supported yet. Please file a bug report."); } } diff --git a/aot-core/src/main/java/io/micronaut/aot/core/config/MetadataUtils.java b/aot-core/src/main/java/io/micronaut/aot/core/config/MetadataUtils.java index bde53866..633d89a3 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/config/MetadataUtils.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/config/MetadataUtils.java @@ -15,8 +15,8 @@ */ package io.micronaut.aot.core.config; -import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.AOTCodeGenerator; +import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.Option; import io.micronaut.aot.core.Runtime; @@ -29,6 +29,7 @@ public class MetadataUtils { /** * Returns the AOT module annotation for a class, if present. + * * @param clazz the class to look for * @return the module annotation. */ @@ -40,6 +41,7 @@ public static Optional findMetadata(Class clazz) { * Returns the option with the corresponding name. If * the supplied class is not annotated with {@link AOTModule} * invocation will fail. + * * @param clazz the AOT module class * @param name the name of the option * @return the corresponding option @@ -51,11 +53,12 @@ public static Option findOption(Class clazz, String name) { /** * Returns a string representation of the option, for * use in properties files. + * * @param option the option to convert to sample text. * @return a sample */ public static String toPropertiesSample(Option option) { - StringBuilder sb = new StringBuilder(); + var sb = new StringBuilder(); String description = option.description(); if (!description.isEmpty()) { sb.append("# ").append(description).append("\n"); @@ -69,8 +72,8 @@ public static String toPropertiesSample(Option option) { public static boolean isEnabledOn(Runtime runtime, AOTCodeGenerator module) { return findMetadata(module.getClass()) - .map(aotModule -> isEnabledOn(runtime, aotModule)) - .orElse(false); + .map(aotModule -> isEnabledOn(runtime, aotModule)) + .orElse(false); } public static boolean isEnabledOn(Runtime runtime, AOTModule module) { diff --git a/aot-core/src/main/java/io/micronaut/aot/core/config/SourceGeneratorLoader.java b/aot-core/src/main/java/io/micronaut/aot/core/config/SourceGeneratorLoader.java index 4687c88b..c2b2228b 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/config/SourceGeneratorLoader.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/config/SourceGeneratorLoader.java @@ -56,42 +56,42 @@ public class SourceGeneratorLoader { public static List load(Runtime runtime, AOTContext context) { Configuration configuration = context.getConfiguration(); return sourceGeneratorStream() - .map(sg -> new Object() { - final AOTCodeGenerator generator = sg; - final AOTModule module = MetadataUtils.findMetadata(sg.getClass()).orElse(null); - }) - .filter(sg -> { - if (sg.module != null) { - boolean isEnabledOnRuntime = MetadataUtils.isEnabledOn(runtime, sg.module); - if (!isEnabledOnRuntime) { - LOGGER.debug("Skipping source generator {} as it is not enabled on runtime {}", sg.generator.getClass().getName(), runtime); - return false; - } - boolean isEnabledByConfiguration = configuration.isFeatureEnabled(sg.module.id()); - if (!isEnabledByConfiguration) { - LOGGER.debug("Skipping source generator {} as it is not enabled by configuration", sg.generator.getClass().getName()); - return false; - } - LOGGER.debug("Loading source generator {}", sg.generator.getClass().getName()); - return true; + .map(sg -> new Object() { + final AOTCodeGenerator generator = sg; + final AOTModule module = MetadataUtils.findMetadata(sg.getClass()).orElse(null); + }) + .filter(sg -> { + if (sg.module != null) { + boolean isEnabledOnRuntime = MetadataUtils.isEnabledOn(runtime, sg.module); + if (!isEnabledOnRuntime) { + LOGGER.debug("Skipping source generator {} as it is not enabled on runtime {}", sg.generator.getClass().getName(), runtime); + return false; } - return false; - }) - .sorted(Comparator.comparing(f -> f.module, EXECUTION_ORDER)) - .map(sg -> sg.generator) - .collect(Collectors.toList()); + boolean isEnabledByConfiguration = configuration.isFeatureEnabled(sg.module.id()); + if (!isEnabledByConfiguration) { + LOGGER.debug("Skipping source generator {} as it is not enabled by configuration", sg.generator.getClass().getName()); + return false; + } + LOGGER.debug("Loading source generator {}", sg.generator.getClass().getName()); + return true; + } + return false; + }) + .sorted(Comparator.comparing(f -> f.module, EXECUTION_ORDER)) + .map(sg -> sg.generator) + .collect(Collectors.toList()); } @NonNull public static List list(Runtime runtime) { return sourceGeneratorStream() - .map(Object::getClass) - .map(MetadataUtils::findMetadata) - .filter(Optional::isPresent) - .map(Optional::get) - .filter(aotModule -> MetadataUtils.isEnabledOn(runtime, aotModule)) - .sorted(EXECUTION_ORDER) - .collect(Collectors.toList()); + .map(Object::getClass) + .map(MetadataUtils::findMetadata) + .filter(Optional::isPresent) + .map(Optional::get) + .filter(aotModule -> MetadataUtils.isEnabledOn(runtime, aotModule)) + .sorted(EXECUTION_ORDER) + .collect(Collectors.toList()); } private static Stream sourceGeneratorStream() { diff --git a/aot-core/src/main/java/io/micronaut/aot/core/context/ApplicationContextAnalyzer.java b/aot-core/src/main/java/io/micronaut/aot/core/context/ApplicationContextAnalyzer.java index 06884b96..fdbd630a 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/context/ApplicationContextAnalyzer.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/context/ApplicationContextAnalyzer.java @@ -47,12 +47,11 @@ * An application context analyzer is responsible for instantiating * an application context and inferring whether a bean should be * included in the application binaries. - * + *

    * It uses a {@code Predicate} as superinterface because it * needs to run in the same classloader as the optimizer, where the * Micronaut specific types are different from the ones loaded in * the analyzed classpath. - * */ @SuppressWarnings("unused") public final class ApplicationContextAnalyzer { @@ -72,15 +71,18 @@ public ApplicationContext getApplicationContext() { /** * Instantiates an application context analyzer. + * * @return an analyzer */ public static ApplicationContextAnalyzer create() { - return create(spec -> { }); + return create(spec -> { + }); } /** * Instantiates an application context analyzer with the ability to * customize the application context. + * * @param spec the spec to configure the application context * @return the analyzer */ @@ -106,7 +108,7 @@ private static void finalizeConfiguration(ApplicationContext context) { method = DefaultBeanContext.class.getDeclaredMethod("readAllBeanDefinitionClasses"); method.setAccessible(true); method.invoke(context); - } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { // ignore } } @@ -118,6 +120,7 @@ private static void finalizeConfiguration(ApplicationContext context) { /** * Returns a predicate which can be used to determine, from annotation metadata, * if a bean matches requirements. + * * @return a predicate */ public Predicate getAnnotationMetadataPredicate() { @@ -143,7 +146,7 @@ public boolean containsProperties(String name) { } @Override - public Optional getProperty(String name, ArgumentConversionContext conversionContext) { + public Optional getProperty(String name, ArgumentConversionContext conversionContext) { return applicationContext.getProperty(name, conversionContext); } @@ -153,42 +156,42 @@ public Collection> getPropertyPathMatches(String pathPattern) { } @Override - public T getBean(BeanDefinition definition) { + public R getBean(BeanDefinition definition) { return applicationContext.getBean(definition); } @Override - public T getBean(Class beanType, Qualifier qualifier) { + public R getBean(Class beanType, Qualifier qualifier) { return applicationContext.getBean(beanType, qualifier); } @Override - public Optional findBean(Argument beanType, Qualifier qualifier) { + public Optional findBean(Argument beanType, Qualifier qualifier) { return applicationContext.findBean(beanType, qualifier); } @Override - public Optional findBean(Class beanType, Qualifier qualifier) { + public Optional findBean(Class beanType, Qualifier qualifier) { return applicationContext.findBean(beanType, qualifier); } @Override - public Collection getBeansOfType(Class beanType) { + public Collection getBeansOfType(Class beanType) { return applicationContext.getBeansOfType(beanType); } @Override - public Collection getBeansOfType(Class beanType, Qualifier qualifier) { + public Collection getBeansOfType(Class beanType, Qualifier qualifier) { return applicationContext.getBeansOfType(beanType, qualifier); } @Override - public Stream streamOfType(Class beanType, Qualifier qualifier) { + public Stream streamOfType(Class beanType, Qualifier qualifier) { return applicationContext.streamOfType(beanType, qualifier); } @Override - public T getProxyTargetBean(Class beanType, Qualifier qualifier) { + public R getProxyTargetBean(Class beanType, Qualifier qualifier) { return applicationContext.getProxyTargetBean(beanType, qualifier); } @@ -226,7 +229,7 @@ private class AnnotationMetadataProviderPredicate implements Predicate context = new ShallowConditionContext<>(component); + var context = new ShallowConditionContext<>(component); return new RequiresCondition(component.getAnnotationMetadata()).matches(context); } diff --git a/aot-core/src/main/java/io/micronaut/aot/core/context/DefaultSourceGenerationContext.java b/aot-core/src/main/java/io/micronaut/aot/core/context/DefaultSourceGenerationContext.java index 3801e74d..490571e6 100644 --- a/aot-core/src/main/java/io/micronaut/aot/core/context/DefaultSourceGenerationContext.java +++ b/aot-core/src/main/java/io/micronaut/aot/core/context/DefaultSourceGenerationContext.java @@ -48,19 +48,18 @@ import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; -import java.util.stream.Collectors; /** * The source generation context. - * - * Typically provides access to the application classloader or the name of + *

    + * Typically, provides access to the application classloader or the name of * the package of classes which are going to be generated. - * + *

    * In addition, the context can be used to register resources which will need - * to be excluded from the final binary (e.g if a configuration file is replaced + * to be excluded from the final binary (e.g. if a configuration file is replaced * with a class at build time, we need a way to explain that the resource file * needs to be excluded from the binary). - * + *

    * Last but not least, this context can be used to send diagnostic messages * which are written to log files during code generation. */ @@ -155,16 +154,16 @@ public void registerStaticOptimization(String className, Class optimizati CodeBlock.Builder body = CodeBlock.builder(); bodyBuilder.accept(body); MethodSpec method = MethodSpec.methodBuilder("load") - .addModifiers(Modifier.PUBLIC) - .addAnnotation(Override.class) - .returns(optimizationKind) - .addCode(body.build()) - .build(); + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class) + .returns(optimizationKind) + .addCode(body.build()) + .build(); TypeSpec generatedType = TypeSpec.classBuilder(className) - .addModifiers(Modifier.PUBLIC) - .addSuperinterface(ParameterizedTypeName.get(StaticOptimizations.Loader.class, optimizationKind)) - .addMethod(method) - .build(); + .addModifiers(Modifier.PUBLIC) + .addSuperinterface(ParameterizedTypeName.get(StaticOptimizations.Loader.class, optimizationKind)) + .addMethod(method) + .build(); registerBuildTimeInit(optimizationKind.getName()); registerGeneratedSourceFile(javaFile(generatedType)); registerServiceImplementation(StaticOptimizations.Loader.class, className); @@ -172,13 +171,14 @@ public void registerStaticOptimization(String className, Class optimizati /** * Registers a generated service type. - * @param serviceType the type of the service + * + * @param serviceType the type of the service * @param simpleServiceName the simple name of the generated type */ @Override public void registerServiceImplementation(Class serviceType, String simpleServiceName) { registerGeneratedResource("META-INF/services/" + serviceType.getName(), serviceFile -> { - try (PrintWriter wrt = new PrintWriter(new FileWriter(serviceFile, true))) { + try (var wrt = new PrintWriter(new FileWriter(serviceFile, true))) { wrt.println(getPackageName() + "." + simpleServiceName); } catch (IOException e) { throw new RuntimeException(e); @@ -208,18 +208,18 @@ public void registerGeneratedResource(@NonNull String path, Consumer getExtraClasspath() { return classesRequiredAtCompilation.stream() - .map(Class::getProtectionDomain) - .map(ProtectionDomain::getCodeSource) - .map(CodeSource::getLocation) - .map(url -> { - try { - return new File(url.toURI()); - } catch (Exception e) { - return null; - } - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); + .map(Class::getProtectionDomain) + .map(ProtectionDomain::getCodeSource) + .map(CodeSource::getLocation) + .map(url -> { + try { + return new File(url.toURI()); + } catch (Exception e) { + return null; + } + }) + .filter(Objects::nonNull) + .toList(); } @Override diff --git a/aot-std-optimizers/src/configPropsGenerator/java/io/micronaut/aot/config/ConfigPropsGenerator.java b/aot-std-optimizers/src/configPropsGenerator/java/io/micronaut/aot/config/ConfigPropsGenerator.java index 10892e3f..e02152ba 100644 --- a/aot-std-optimizers/src/configPropsGenerator/java/io/micronaut/aot/config/ConfigPropsGenerator.java +++ b/aot-std-optimizers/src/configPropsGenerator/java/io/micronaut/aot/config/ConfigPropsGenerator.java @@ -33,7 +33,7 @@ public static void main(String[] args) throws IOException { throw new IllegalArgumentException("A single argument, the path to the output file, is expected"); } try (var writer = new PrintWriter(Files.newBufferedWriter(Path.of(args[0]), StandardCharsets.UTF_8))) { - var codegenerators = Stream.concat( + var codeGenerators = Stream.concat( SourceGeneratorLoader.list(Runtime.JIT).stream(), SourceGeneratorLoader.list(Runtime.NATIVE).stream() ).distinct() @@ -42,7 +42,7 @@ public static void main(String[] args) throws IOException { "but properties to be added to the Micronaut AOT configuration, via your build plugin." + "Please refer to the appropriate Maven or Gradle plugin for more details."); writer.println(); - for (AOTModule module : codegenerators) { + for (AOTModule module : codeGenerators) { writer.println("=== Module " + module.id()); writer.println(); writer.print("This module is available "); diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/AbstractStaticServiceLoaderSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/AbstractStaticServiceLoaderSourceGenerator.java index 1d2cd750..d563be17 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/AbstractStaticServiceLoaderSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/AbstractStaticServiceLoaderSourceGenerator.java @@ -91,20 +91,20 @@ public void generate(@NonNull AOTContext context) { serviceNames = context.getConfiguration().stringList(findOption(this.getClass(), SERVICE_TYPES).key()); } if (substitutions == null) { - Set resourceNames = new LinkedHashSet<>(); + var resourceNames = new LinkedHashSet(); resourceNames.add("application"); context.getAnalyzer().getEnvironmentNames() - .stream() - .map(env -> "application-" + env) - .forEach(resourceNames::add); + .stream() + .map(env -> "application-" + env) + .forEach(resourceNames::add); context.getConfiguration().stringList(Environments.POSSIBLE_ENVIRONMENTS_NAMES) - .stream() - .filter(env -> !"default".equals(env)) - .map(env -> "application-" + env) - .forEach(resourceNames::add); + .stream() + .filter(env -> !"default".equals(env)) + .map(env -> "application-" + env) + .forEach(resourceNames::add); substitutions = new HashMap<>(); if (context.getConfiguration().isFeatureEnabled(YamlPropertySourceGenerator.ID)) { - YamlPropertySourceGenerator yaml = new YamlPropertySourceGenerator(resourceNames); + var yaml = new YamlPropertySourceGenerator(resourceNames); yaml.generate(context); if (MetadataUtils.isEnabledOn(context.getRuntime(), yaml)) { LOGGER.debug("Substituting {} with {}", PropertySourceLoader.class.getName(), yaml.getClass().getName()); @@ -143,12 +143,12 @@ public void generate(@NonNull AOTContext context) { LOGGER.debug("Generated static service loader classes: {}", staticServiceClasses.keySet()); LOGGER.debug("Generated static {} service loader substitutions", substitutes.values().size()); staticServiceClasses.values() - .stream() - .map(generatedType -> { - context.registerBuildTimeInit(generatedType.className()); - return context.javaFile(generatedType.typeSpec()); - }) - .forEach(context::registerGeneratedSourceFile); + .stream() + .map(generatedType -> { + context.registerBuildTimeInit(generatedType.className()); + return context.javaFile(generatedType.typeSpec()); + }) + .forEach(context::registerGeneratedSourceFile); context.registerStaticOptimization("StaticServicesLoader", SoftServiceLoader.Optimizations.class, this::buildOptimization); } @@ -165,10 +165,10 @@ private void generateServiceLoader() { } TypeSpec.Builder factory = prepareServiceLoaderType(serviceName, serviceType); generateFindAllMethod( - implementations.stream().filter(clazz -> !rejectedClasses.test(clazz.getName()) && !disabledServices.contains(clazz)), - serviceName, - serviceType, - factory); + implementations.stream().filter(clazz -> !rejectedClasses.test(clazz.getName()) && !disabledServices.contains(clazz)), + serviceName, + serviceType, + factory); staticServiceClasses.put(serviceName, new GeneratedType(context.getPackageName() + "." + factoryNameFor(serviceName), factory.build())); } } @@ -176,15 +176,15 @@ private void generateServiceLoader() { private void collectServiceImplementations(String serviceName) { context.addDiagnostics(SERVICE_LOADING_CATEGORY, "Starting service discovery for type " + serviceName); ClassLoader cl = this.getClass().getClassLoader(); - Set seen = Collections.synchronizedSet(new HashSet<>()); + var seen = Collections.synchronizedSet(new HashSet()); SoftServiceLoader.ServiceCollector> availableClasses = SoftServiceLoader.newCollector(serviceName, s -> !s.isEmpty(), cl, className -> { if (rejectedClasses.test(className) || !seen.add(className)) { return null; } AbstractCodeGenerator substitution = substitutions.get(className); if (substitution != null) { - List javaFiles = new ArrayList<>(); - AOTContext tracker = new DelegatingSourceGenerationContext(context) { + var javaFiles = new ArrayList(); + var tracker = new DelegatingSourceGenerationContext(context) { @Override public void registerGeneratedSourceFile(@NonNull JavaFile javaFile) { super.registerGeneratedSourceFile(javaFile); @@ -219,7 +219,7 @@ public void registerGeneratedSourceFile(@NonNull JavaFile javaFile) { } return clazz; }); - List> serviceClasses = new ArrayList<>(); + var serviceClasses = new ArrayList>(); availableClasses.collect(serviceClasses::add); this.serviceClasses.put(serviceName, serviceClasses); } @@ -239,9 +239,9 @@ protected abstract void generateFindAllMethod(Stream> serviceClasses, private TypeSpec.Builder prepareServiceLoaderType(String serviceName, Class serviceType) { String name = factoryNameFor(serviceName); TypeSpec.Builder factory = TypeSpec.classBuilder(name) - .addModifiers(PUBLIC) - .addAnnotation(Generated.class) - .addSuperinterface(ParameterizedTypeName.get(SoftServiceLoader.StaticServiceLoader.class, serviceType)); + .addModifiers(PUBLIC) + .addAnnotation(Generated.class) + .addSuperinterface(ParameterizedTypeName.get(SoftServiceLoader.StaticServiceLoader.class, serviceType)); return factory; } @@ -250,16 +250,16 @@ private static String factoryNameFor(String serviceName) { } private void buildOptimization(CodeBlock.Builder body) { - ParameterizedTypeName serviceLoaderType = ParameterizedTypeName.get( - ClassName.get(SoftServiceLoader.StaticServiceLoader.class), WildcardTypeName.subtypeOf(Object.class)); - body.addStatement("$T staticServices = new $T()", - ParameterizedTypeName.get(ClassName.get(Map.class), ClassName.get(String.class), serviceLoaderType), - ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), serviceLoaderType)); - - for (Map.Entry entry : staticServiceClasses.entrySet()) { - body.addStatement("staticServices.put($S, new $T())", entry.getKey(), ClassName.bestGuess(entry.getValue().typeSpec().name)); - } - body.addStatement("return new $T(staticServices)", SoftServiceLoader.Optimizations.class); + ParameterizedTypeName serviceLoaderType = ParameterizedTypeName.get( + ClassName.get(SoftServiceLoader.StaticServiceLoader.class), WildcardTypeName.subtypeOf(Object.class)); + body.addStatement("$T staticServices = new $T()", + ParameterizedTypeName.get(ClassName.get(Map.class), ClassName.get(String.class), serviceLoaderType), + ParameterizedTypeName.get(ClassName.get(HashMap.class), ClassName.get(String.class), serviceLoaderType)); + + for (Map.Entry entry : staticServiceClasses.entrySet()) { + body.addStatement("staticServices.put($S, new $T())", entry.getKey(), ClassName.bestGuess(entry.getValue().typeSpec().name)); + } + body.addStatement("return new $T(staticServices)", SoftServiceLoader.Optimizations.class); } /** diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/CachedEnvironmentSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/CachedEnvironmentSourceGenerator.java index 7be19e8b..f1f9a34a 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/CachedEnvironmentSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/CachedEnvironmentSourceGenerator.java @@ -15,8 +15,8 @@ */ package io.micronaut.aot.std.sourcegen; -import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.AOTContext; +import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.codegen.AbstractCodeGenerator; import io.micronaut.core.annotation.NonNull; import io.micronaut.core.optim.StaticOptimizations; @@ -26,8 +26,8 @@ * properties caching in Micronaut. */ @AOTModule( - id = CachedEnvironmentSourceGenerator.ID, - description = CachedEnvironmentSourceGenerator.DESCRIPTION + id = CachedEnvironmentSourceGenerator.ID, + description = CachedEnvironmentSourceGenerator.DESCRIPTION ) public class CachedEnvironmentSourceGenerator extends AbstractCodeGenerator { public static final String ID = "cached.environment"; @@ -36,7 +36,7 @@ public class CachedEnvironmentSourceGenerator extends AbstractCodeGenerator { @Override public void generate(@NonNull AOTContext context) { context.registerStaticInitializer(staticMethod("enableEnvironmentCaching", body -> - body.addStatement("$T.cacheEnvironment()", StaticOptimizations.class))); + body.addStatement("$T.cacheEnvironment()", StaticOptimizations.class))); } } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ConstantPropertySourcesSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ConstantPropertySourcesSourceGenerator.java index 6d6ff200..ca045926 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ConstantPropertySourcesSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ConstantPropertySourcesSourceGenerator.java @@ -30,7 +30,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.stream.Collectors; /** * Generates a "constant" property source, that is to say a @@ -55,7 +54,7 @@ public void generate(@NonNull AOTContext context) { List substitutes = maybeSubstitutes.map(s -> s.findSubstitutesFor("io.micronaut.context.env.PropertySourceLoader")).orElse(Collections.emptyList()) .stream() .map(javaFile -> javaFile.packageName + "." + javaFile.typeSpec.name) - .collect(Collectors.toList()); + .toList(); context.registerStaticOptimization("AotConstantPropertySources", ConstantPropertySources.class, initializer -> { EnvironmentProperties env = EnvironmentProperties.empty(); diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/DeduceEnvironmentSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/DeduceEnvironmentSourceGenerator.java index 2b511395..24a0a71a 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/DeduceEnvironmentSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/DeduceEnvironmentSourceGenerator.java @@ -41,8 +41,8 @@ * it will be done at build time instead of run time. */ @AOTModule( - id = DeduceEnvironmentSourceGenerator.ID, - description = DeduceEnvironmentSourceGenerator.DESCRIPTION + id = DeduceEnvironmentSourceGenerator.ID, + description = DeduceEnvironmentSourceGenerator.DESCRIPTION ) public class DeduceEnvironmentSourceGenerator extends AbstractCodeGenerator { public static final String ID = "deduce.environment"; @@ -54,13 +54,12 @@ public void generate(AOTContext context) { ApplicationContextAnalyzer analyzer = context.getAnalyzer(); Set environmentNames = analyzer.getEnvironmentNames(); BeanContextConfiguration contextConfiguration = analyzer.getApplicationContext().getContextConfiguration(); - if (contextConfiguration instanceof ApplicationContextConfiguration) { - ApplicationContextConfiguration applicationContextConfiguration = (ApplicationContextConfiguration) contextConfiguration; + if (contextConfiguration instanceof ApplicationContextConfiguration applicationContextConfiguration) { boolean deduceEnvironments = applicationContextConfiguration.getDeduceEnvironments().orElse(true); if (deduceEnvironments) { Collection packages = analyzer.getApplicationContext().getEnvironment().getPackages(); context.registerGeneratedSourceFile( - context.javaFile(buildApplicationContextConfigurer(environmentNames, packages)) + context.javaFile(buildApplicationContextConfigurer(environmentNames, packages)) ); context.registerServiceImplementation(ApplicationContextConfigurer.class, DEDUCED_ENVIRONMENT_CONFIGURER); } @@ -69,9 +68,9 @@ public void generate(AOTContext context) { private TypeSpec buildApplicationContextConfigurer(Set environmentNames, Collection packages) { MethodSpec.Builder bodyBuilder = MethodSpec.methodBuilder("configure") - .addModifiers(PUBLIC) - .addAnnotation(Override.class) - .addParameter(ApplicationContextBuilder.class, "builder"); + .addModifiers(PUBLIC) + .addAnnotation(Override.class) + .addParameter(ApplicationContextBuilder.class, "builder"); bodyBuilder.addStatement("builder.deduceEnvironment(false)"); if (!environmentNames.isEmpty()) { bodyBuilder.addStatement("builder.defaultEnvironments($L)", toQuotedStringList(environmentNames)); @@ -80,17 +79,17 @@ private TypeSpec buildApplicationContextConfigurer(Set environmentNames, bodyBuilder.addStatement("builder.packages($L)", toQuotedStringList(packages)); } return TypeSpec.classBuilder(DEDUCED_ENVIRONMENT_CONFIGURER) - .addSuperinterface(ApplicationContextConfigurer.class) + .addSuperinterface(ApplicationContextConfigurer.class) + .addModifiers(PUBLIC) + .addMethod(bodyBuilder.build()) + .addMethod(MethodSpec.methodBuilder("getOrder") .addModifiers(PUBLIC) - .addMethod(bodyBuilder.build()) - .addMethod(MethodSpec.methodBuilder("getOrder") - .addModifiers(PUBLIC) - .addAnnotation(Override.class) - .returns(int.class) - .addStatement("return LOWEST_PRECEDENCE") - .build() - ) - .build(); + .addAnnotation(Override.class) + .returns(int.class) + .addStatement("return LOWEST_PRECEDENCE") + .build() + ) + .build(); } private static String toQuotedStringList(Collection elements) { diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/EnvironmentPropertiesSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/EnvironmentPropertiesSourceGenerator.java index 9709351b..4141e87e 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/EnvironmentPropertiesSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/EnvironmentPropertiesSourceGenerator.java @@ -15,14 +15,10 @@ */ package io.micronaut.aot.std.sourcegen; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.lang.model.element.Modifier; - +import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.MethodSpec; +import com.squareup.javapoet.ParameterizedTypeName; +import com.squareup.javapoet.TypeSpec; import io.micronaut.aot.core.AOTContext; import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.codegen.AbstractCodeGenerator; @@ -31,10 +27,12 @@ import io.micronaut.core.optim.StaticOptimizations; import io.micronaut.core.util.EnvironmentProperties; -import com.squareup.javapoet.ClassName; -import com.squareup.javapoet.MethodSpec; -import com.squareup.javapoet.ParameterizedTypeName; -import com.squareup.javapoet.TypeSpec; +import javax.lang.model.element.Modifier; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import static javax.lang.model.element.Modifier.PRIVATE; diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/GraalVMOptimizationFeatureSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/GraalVMOptimizationFeatureSourceGenerator.java index 27f499d9..e2d8e492 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/GraalVMOptimizationFeatureSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/GraalVMOptimizationFeatureSourceGenerator.java @@ -15,13 +15,13 @@ */ package io.micronaut.aot.std.sourcegen; +import io.micronaut.aot.core.AOTContext; import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.Option; import io.micronaut.aot.core.Runtime; -import io.micronaut.aot.core.AOTContext; -import io.micronaut.aot.core.config.MetadataUtils; import io.micronaut.aot.core.codegen.AbstractCodeGenerator; import io.micronaut.aot.core.codegen.ApplicationContextConfigurerGenerator; +import io.micronaut.aot.core.config.MetadataUtils; import io.micronaut.core.annotation.NonNull; import java.io.FileWriter; @@ -59,15 +59,14 @@ public class GraalVMOptimizationFeatureSourceGenerator extends AbstractCodeGener @Override public void generate(@NonNull AOTContext context) { List serviceTypes = context.getConfiguration().stringList(OPTION.key()); - String path = - "META-INF/native-image/" + context.getPackageName() + "/native-image.properties"; + String path = "META-INF/native-image/" + context.getPackageName() + "/native-image.properties"; context.registerGeneratedResource(path, propertiesFile -> { try (PrintWriter wrt = new PrintWriter(new FileWriter(propertiesFile))) { wrt.print("Args="); wrt.println("--initialize-at-build-time=io.micronaut.context.ApplicationContextConfigurer$1" + NEXT_LINE); wrt.println(" --initialize-at-build-time=" + context.getPackageName() + "." + - ApplicationContextConfigurerGenerator.CUSTOMIZER_CLASS_NAME + - NEXT_LINE); + ApplicationContextConfigurerGenerator.CUSTOMIZER_CLASS_NAME + + NEXT_LINE); var buildTimeInit = context.getBuildTimeInitClasses() .stream() .map(clazz -> " --initialize-at-build-time=" + clazz) diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/JitStaticServiceLoaderSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/JitStaticServiceLoaderSourceGenerator.java index 7e431f1a..480fcd34 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/JitStaticServiceLoaderSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/JitStaticServiceLoaderSourceGenerator.java @@ -32,7 +32,6 @@ import java.util.Objects; import java.util.concurrent.ForkJoinPool; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import static javax.lang.model.element.Modifier.FINAL; @@ -45,32 +44,32 @@ * at execution in JIT mode. */ @AOTModule( - id = JitStaticServiceLoaderSourceGenerator.ID, - description = AbstractStaticServiceLoaderSourceGenerator.DESCRIPTION, - options = { - @Option( - key = "service.types", - description = "The list of service types to be scanned (comma separated)", - sampleValue = AbstractStaticServiceLoaderSourceGenerator.DEFAULT_SERVICE_TYPES - ), - @Option( - key = "serviceloading.rejected.impls", - description = "A list of implementation types which shouldn't be included in the final application (comma separated)", - sampleValue = "com.Misc,org.Bar" - ), - @Option( - key = "serviceloading.force.include.impls", - description = "A list of implementation types to include even if they don't match bean requirements (comma separated)", - sampleValue = "com.Misc,org.Bar" - ), - @Option( - key = Environments.POSSIBLE_ENVIRONMENTS_NAMES, - description = Environments.POSSIBLE_ENVIRONMENTS_DESCRIPTION, - sampleValue = Environments.POSSIBLE_ENVIRONMENTS_SAMPLE - ) - }, - enabledOn = Runtime.JIT, - subgenerators = { YamlPropertySourceGenerator.class } + id = JitStaticServiceLoaderSourceGenerator.ID, + description = AbstractStaticServiceLoaderSourceGenerator.DESCRIPTION, + options = { + @Option( + key = "service.types", + description = "The list of service types to be scanned (comma separated)", + sampleValue = AbstractStaticServiceLoaderSourceGenerator.DEFAULT_SERVICE_TYPES + ), + @Option( + key = "serviceloading.rejected.impls", + description = "A list of implementation types which shouldn't be included in the final application (comma separated)", + sampleValue = "com.Misc,org.Bar" + ), + @Option( + key = "serviceloading.force.include.impls", + description = "A list of implementation types to include even if they don't match bean requirements (comma separated)", + sampleValue = "com.Misc,org.Bar" + ), + @Option( + key = Environments.POSSIBLE_ENVIRONMENTS_NAMES, + description = Environments.POSSIBLE_ENVIRONMENTS_DESCRIPTION, + sampleValue = Environments.POSSIBLE_ENVIRONMENTS_SAMPLE + ) + }, + enabledOn = Runtime.JIT, + subgenerators = {YamlPropertySourceGenerator.class} ) public class JitStaticServiceLoaderSourceGenerator extends AbstractStaticServiceLoaderSourceGenerator { public static final String ID = "serviceloading.jit"; @@ -80,14 +79,14 @@ protected final void generateFindAllMethod(Stream> serviceClasses, Class serviceType, TypeSpec.Builder factory) { List initializers = serviceClasses - .map(Class::getName) - .sorted() - .collect(Collectors.toList()); + .map(Class::getName) + .sorted() + .toList(); ParameterizedTypeName staticDefinitionType = ParameterizedTypeName.get(SoftServiceLoader.StaticDefinition.class, serviceType); ParameterizedTypeName serviceTypeClassType = ParameterizedTypeName.get(Class.class, serviceType); CodeBlock.Builder fieldInit = CodeBlock.builder() - .beginControlFlow("new String[]"); + .beginControlFlow("new String[]"); for (int i = 0; i < initializers.size(); i++) { String initializer = initializers.get(i); fieldInit.add("$S", initializer); @@ -98,42 +97,43 @@ protected final void generateFindAllMethod(Stream> serviceClasses, fieldInit.endControlFlow(); factory.addField(FieldSpec.builder(String[].class, "SERVICE_TYPES") - .addModifiers(PRIVATE, STATIC, FINAL) - .initializer(fieldInit.build()) - .build()); + .addModifiers(PRIVATE, STATIC, FINAL) + .initializer(fieldInit.build()) + .build()); CodeBlock.Builder init = CodeBlock.builder() - .addStatement("$T cl = $T.class.getClassLoader()", ClassLoader.class, serviceType) - .addStatement("$T pool = $T.commonPool()", ForkJoinPool.class, ForkJoinPool.class); + .addStatement("$T cl = $T.class.getClassLoader()", ClassLoader.class, serviceType) + .addStatement("$T pool = $T.commonPool()", ForkJoinPool.class, ForkJoinPool.class); for (String initializer : initializers) { init.addStatement("pool.submit(() -> loadClass(cl, $S))", initializer); } factory.addStaticBlock(init.build()); factory.addMethod(MethodSpec.methodBuilder("loadClass") - .addModifiers(PRIVATE, STATIC) - .returns(serviceTypeClassType) - .addParameter(ClassLoader.class, "cl") - .addParameter(String.class, "name") - .beginControlFlow("try") - .addStatement("return ($T) cl.loadClass(name)", serviceTypeClassType) - .endControlFlow() - .beginControlFlow("catch (Exception e)") - .addStatement("return null") - .endControlFlow() - .build()); + .addModifiers(PRIVATE, STATIC) + .returns(serviceTypeClassType) + .addParameter(ClassLoader.class, "cl") + .addParameter(String.class, "name") + .beginControlFlow("try") + .addStatement("return ($T) cl.loadClass(name)", serviceTypeClassType) + .endControlFlow() + .beginControlFlow("catch (Exception e)") + .addStatement("return null") + .endControlFlow() + .build()); MethodSpec.Builder method = MethodSpec.methodBuilder("findAll") - .addModifiers(PUBLIC) - .addParameter(ParameterizedTypeName.get(Predicate.class, String.class), "predicate") - .returns(ParameterizedTypeName.get(ClassName.get(Stream.class), staticDefinitionType)); + .addModifiers(PUBLIC) + .addParameter(ParameterizedTypeName.get(Predicate.class, String.class), "predicate") + .returns(ParameterizedTypeName.get(ClassName.get(Stream.class), staticDefinitionType)); method.addStatement("$T cl = $T.class.getClassLoader()", ClassLoader.class, serviceType); - method.addStatement("return $T.stream(SERVICE_TYPES)\n" + - ".parallel()\n" + - ".filter(predicate::test)\n" + - ".map(s -> loadClass(cl, s))\n" + - ".filter($T::nonNull)\n" + - ".map(c -> $T.of(c.getName(), c))", - Arrays.class, Objects.class, SoftServiceLoader.StaticDefinition.class); + method.addStatement(""" + return $T.stream(SERVICE_TYPES) + .parallel() + .filter(predicate::test) + .map(s -> loadClass(cl, s)) + .filter($T::nonNull) + .map(c -> $T.of(c.getName(), c))""", + Arrays.class, Objects.class, SoftServiceLoader.StaticDefinition.class); factory.addMethod(method.build()); } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/KnownMissingTypesSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/KnownMissingTypesSourceGenerator.java index 59daec9b..1a9c5626 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/KnownMissingTypesSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/KnownMissingTypesSourceGenerator.java @@ -35,15 +35,15 @@ * Missing classes will be recorded and injected at runtime as optimizations. */ @AOTModule( - id = KnownMissingTypesSourceGenerator.ID, - description = KnownMissingTypesSourceGenerator.DESCRIPTION, - options = { - @Option( - key = "known.missing.types.list", - description = "A list of types that the AOT analyzer needs to check for existence (comma separated)", - sampleValue = "io.reactivex.Observable,reactor.core.publisher.Flux,kotlinx.coroutines.flow.Flow,io.reactivex.rxjava3.core.Flowable,io.reactivex.rxjava3.core.Observable,io.reactivex.Single,reactor.core.publisher.Mono,io.reactivex.Maybe,io.reactivex.rxjava3.core.Single,io.reactivex.rxjava3.core.Maybe,io.reactivex.Completable,io.reactivex.rxjava3.core.Completable,io.methvin.watchservice.MacOSXListeningWatchService,io.micronaut.core.async.publisher.CompletableFuturePublisher,io.micronaut.core.async.publisher.Publishers.JustPublisher,io.micronaut.core.async.subscriber.Completable" - ) - } + id = KnownMissingTypesSourceGenerator.ID, + description = KnownMissingTypesSourceGenerator.DESCRIPTION, + options = { + @Option( + key = "known.missing.types.list", + description = "A list of types that the AOT analyzer needs to check for existence (comma separated)", + sampleValue = "io.reactivex.Observable,reactor.core.publisher.Flux,kotlinx.coroutines.flow.Flow,io.reactivex.rxjava3.core.Flowable,io.reactivex.rxjava3.core.Observable,io.reactivex.Single,reactor.core.publisher.Mono,io.reactivex.Maybe,io.reactivex.rxjava3.core.Single,io.reactivex.rxjava3.core.Maybe,io.reactivex.Completable,io.reactivex.rxjava3.core.Completable,io.methvin.watchservice.MacOSXListeningWatchService,io.micronaut.core.async.publisher.CompletableFuturePublisher,io.micronaut.core.async.publisher.Publishers.JustPublisher,io.micronaut.core.async.subscriber.Completable" + ) + } ) public class KnownMissingTypesSourceGenerator extends AbstractCodeGenerator { public static final String ID = "known.missing.types"; @@ -51,7 +51,7 @@ public class KnownMissingTypesSourceGenerator extends AbstractCodeGenerator { public static final String DESCRIPTION = "Checks of existence of some types at build time instead of runtime"; private List findMissingClasses(List classNames) { - List knownMissingClasses = new ArrayList<>(); + var knownMissingClasses = new ArrayList(); ClassLoader cl = this.getClass().getClassLoader(); for (String name : classNames) { try { @@ -67,11 +67,11 @@ private List findMissingClasses(List classNames) { public void generate(@NonNull AOTContext context) { context.registerStaticOptimization("KnownMissingTypesOptimizationLoader", ClassUtils.Optimizations.class, body -> { List classNames = context.getConfiguration().stringList(OPTION.key()); - body.addStatement("$T knownMissingTypes = new $T()", ParameterizedTypeName.get(Set.class, String.class), ParameterizedTypeName.get(HashSet.class, String.class)); - for (String knownMissingClass : findMissingClasses(classNames)) { - body.addStatement("knownMissingTypes.add($S)", knownMissingClass); - } - body.addStatement("return new $T(knownMissingTypes)", ClassUtils.Optimizations.class); + body.addStatement("$T knownMissingTypes = new $T()", ParameterizedTypeName.get(Set.class, String.class), ParameterizedTypeName.get(HashSet.class, String.class)); + for (String knownMissingClass : findMissingClasses(classNames)) { + body.addStatement("knownMissingTypes.add($S)", knownMissingClass); + } + body.addStatement("return new $T(knownMissingTypes)", ClassUtils.Optimizations.class); }); } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/Logback14GeneratorHelper.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/Logback14GeneratorHelper.java index 078313ab..eca38d2d 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/Logback14GeneratorHelper.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/Logback14GeneratorHelper.java @@ -47,6 +47,7 @@ import com.squareup.javapoet.CodeBlock; import com.squareup.javapoet.MethodSpec; import io.micronaut.aot.core.AOTContext; +import io.micronaut.core.util.StringUtils; import org.xml.sax.InputSource; import javax.lang.model.element.Modifier; @@ -71,17 +72,17 @@ class Logback14GeneratorHelper { private static final List TUPLE_LIST = createTuplesList(); private static List createTuplesList() { - List tupleList = new ArrayList<>(9); - tupleList.add(new ParentTagTagClassTuple("appender", "encoder", PatternLayoutEncoder.class)); - tupleList.add(new ParentTagTagClassTuple("appender", "layout", PatternLayout.class)); - tupleList.add(new ParentTagTagClassTuple("receiver", "ssl", SSLConfiguration.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "parameters", SSLParametersConfiguration.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "keyStore", KeyStoreFactoryBean.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "trustStore", KeyManagerFactoryFactoryBean.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "keyManagerFactory", SSLParametersConfiguration.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "trustManagerFactory", TrustManagerFactoryFactoryBean.class)); - tupleList.add(new ParentTagTagClassTuple("ssl", "secureRandom", SecureRandomFactoryBean.class)); - return Collections.unmodifiableList(tupleList); + return List.of( + new ParentTagTagClassTuple("appender", "encoder", PatternLayoutEncoder.class), + new ParentTagTagClassTuple("appender", "layout", PatternLayout.class), + new ParentTagTagClassTuple("receiver", "ssl", SSLConfiguration.class), + new ParentTagTagClassTuple("ssl", "parameters", SSLParametersConfiguration.class), + new ParentTagTagClassTuple("ssl", "keyStore", KeyStoreFactoryBean.class), + new ParentTagTagClassTuple("ssl", "trustStore", KeyManagerFactoryFactoryBean.class), + new ParentTagTagClassTuple("ssl", "keyManagerFactory", SSLParametersConfiguration.class), + new ParentTagTagClassTuple("ssl", "trustManagerFactory", TrustManagerFactoryFactoryBean.class), + new ParentTagTagClassTuple("ssl", "secureRandom", SecureRandomFactoryBean.class) + ); } private static void injectDefaultComponentClasses(Model aModel, Model parent) { @@ -105,7 +106,7 @@ private static String unifiedTag(Model aModel) { } } - private static void applyInjectionRules(Model aModel, Model parent) { + private static void applyInjectionRules(Model aModel, Model parent) { if (parent == null) { return; } @@ -113,11 +114,10 @@ private static void applyInjectionRules(Model aModel, Model parent) { String parentTag = unifiedTag(parent); String modelTag = unifiedTag(aModel); - if (aModel instanceof ImplicitModel) { - ImplicitModel implicitModel = (ImplicitModel) aModel; + if (aModel instanceof ImplicitModel implicitModel) { String className = implicitModel.getClassName(); - if (className == null || className.isEmpty()) { + if (StringUtils.isEmpty(className)) { for (ParentTagTagClassTuple ruleTuple : TUPLE_LIST) { if (ruleTuple.parentTag.equals(parentTag) && ruleTuple.tag.equals(modelTag)) { implicitModel.setClassName(ruleTuple.aClass.getName()); @@ -129,8 +129,8 @@ private static void applyInjectionRules(Model aModel, Model parent) { } static MethodSpec configureMethod(String fileName, AOTContext aotContext) { - JoranConfigurator joranConfigurator = new JoranConfigurator(); - LoggerContext context = new LoggerContext(); + var joranConfigurator = new JoranConfigurator(); + var context = new LoggerContext(); joranConfigurator.setContext(context); Model model; try { @@ -138,7 +138,7 @@ static MethodSpec configureMethod(String fileName, AOTContext aotContext) { if (logbackFile == null) { throw new IllegalStateException("Could not find " + fileName + " file on application classpath"); } - InputSource inputSource = new InputSource(logbackFile.openStream()); + var inputSource = new InputSource(logbackFile.openStream()); SaxEventRecorder recorder = joranConfigurator.populateSaxEventRecorder(inputSource); model = joranConfigurator.buildModelFromSaxEventList(recorder.getSaxEventList()); injectDefaultComponentClasses(model, null); @@ -147,8 +147,8 @@ static MethodSpec configureMethod(String fileName, AOTContext aotContext) { } CodeBlock.Builder codeBuilder = CodeBlock.builder(); - BeanDescriptionCache beanDescriptionCache = new BeanDescriptionCache(context); - ModelVisitor visitor = new ModelVisitor() { + var beanDescriptionCache = new BeanDescriptionCache(context); + var visitor = new ModelVisitor() { private final Map> loggerToAppenders = new HashMap<>(); private final Map appenderRefToAppenderVarName = new HashMap<>(); private final Map modelToVarName = new HashMap<>(); @@ -165,10 +165,10 @@ private String varNameOf(Model model) { private String toVarName(Model model) { String name; - if (model instanceof NamedComponentModel) { - name = ((NamedComponentModel) model).getName(); - } else if (model instanceof LoggerModel) { - name = ((LoggerModel) model).getName(); + if (model instanceof NamedComponentModel namedComponentModel) { + name = namedComponentModel.getName(); + } else if (model instanceof LoggerModel loggerModel) { + name = loggerModel.getName(); } else { name = model.getTag(); } @@ -177,8 +177,8 @@ private String toVarName(Model model) { @Override public void postVisit(Model model, Model parent) { - if (model instanceof ComponentModel) { - String className = ((ComponentModel) model).getClassName(); + if (model instanceof ComponentModel componentModel) { + String className = componentModel.getClassName(); if (className != null) { try { Class clazz = Class.forName(className); @@ -277,10 +277,10 @@ public void postVisitLoggerContextListener(LoggerContextListenerModel model, Mod private void collectAppenders(Model model, String loggerVarName) { Set appenders = model.getSubModels().stream() - .filter(AppenderRefModel.class::isInstance) - .map(AppenderRefModel.class::cast) - .map(AppenderRefModel::getRef) - .collect(Collectors.toSet()); + .filter(AppenderRefModel.class::isInstance) + .map(AppenderRefModel.class::cast) + .map(AppenderRefModel::getRef) + .collect(Collectors.toSet()); loggerToAppenders.put(loggerVarName, appenders); } @@ -363,11 +363,11 @@ private Object toPrimitiveValue(ImplicitModel model, Class parameterType) { visitor.visit(model); codeBuilder.addStatement(CodeBlock.of("return $T.DO_NOT_INVOKE_NEXT_IF_ANY", Configurator.ExecutionStatus.class)); return MethodSpec.methodBuilder("configure") - .addModifiers(Modifier.PUBLIC) - .returns(Configurator.ExecutionStatus.class) - .addParameter(LoggerContext.class, "loggerContext") - .addCode(codeBuilder.build()) - .build(); + .addModifiers(Modifier.PUBLIC) + .returns(Configurator.ExecutionStatus.class) + .addParameter(LoggerContext.class, "loggerContext") + .addCode(codeBuilder.build()) + .build(); } interface ModelVisitor { @@ -383,44 +383,44 @@ default void visit(Model model, Model parent) { } default void preVisit(Model model, Model parent) { - if (model instanceof RootLoggerModel) { - visitRootLogger((RootLoggerModel) model, parent); + if (model instanceof RootLoggerModel rootLoggerModel) { + visitRootLogger(rootLoggerModel, parent); } - if (model instanceof AppenderModel) { - visitAppender((AppenderModel) model, parent); + if (model instanceof AppenderModel appenderModel) { + visitAppender(appenderModel, parent); } - if (model instanceof ImplicitModel) { - visitImplicit((ImplicitModel) model, parent); + if (model instanceof ImplicitModel implicitModel) { + visitImplicit(implicitModel, parent); } - if (model instanceof LoggerModel) { - visitLogger((LoggerModel) model, parent); + if (model instanceof LoggerModel loggerModel) { + visitLogger(loggerModel, parent); } - if (model instanceof ConfigurationModel) { - visitConfiguration((ConfigurationModel) model, parent); + if (model instanceof ConfigurationModel configurationModel) { + visitConfiguration(configurationModel, parent); } - if (model instanceof LoggerContextListenerModel) { - visitLoggerContextListener((LoggerContextListenerModel) model, parent); + if (model instanceof LoggerContextListenerModel loggerContextListenerModel) { + visitLoggerContextListener(loggerContextListenerModel, parent); } } default void postVisit(Model model, Model parent) { - if (model instanceof RootLoggerModel) { - postVisitRootLogger((RootLoggerModel) model, parent); + if (model instanceof RootLoggerModel rootLoggerModel) { + postVisitRootLogger(rootLoggerModel, parent); } - if (model instanceof AppenderModel) { - postVisitAppender((AppenderModel) model, parent); + if (model instanceof AppenderModel appenderModel) { + postVisitAppender(appenderModel, parent); } - if (model instanceof ImplicitModel) { - postVisitImplicit((ImplicitModel) model, parent); + if (model instanceof ImplicitModel implicitModel) { + postVisitImplicit(implicitModel, parent); } - if (model instanceof LoggerModel) { - postVisitLogger((LoggerModel) model, parent); + if (model instanceof LoggerModel loggerModel) { + postVisitLogger(loggerModel, parent); } - if (model instanceof ConfigurationModel) { - postVisitConfiguration((ConfigurationModel) model, parent); + if (model instanceof ConfigurationModel configurationModel) { + postVisitConfiguration(configurationModel, parent); } - if (model instanceof LoggerContextListenerModel) { - postVisitLoggerContextListener((LoggerContextListenerModel) model, parent); + if (model instanceof LoggerContextListenerModel loggerContextListenerModel) { + postVisitLoggerContextListener(loggerContextListenerModel, parent); } } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/LogbackConfigurationSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/LogbackConfigurationSourceGenerator.java index 972734a2..8dac08fb 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/LogbackConfigurationSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/LogbackConfigurationSourceGenerator.java @@ -57,8 +57,8 @@ protected JavaFile generate() { .addSuperinterface(Configurator.class) .addField(contextField()) .addMethod(configureMethod(getLogbackFileName(), getContext())) - .addMethod(setcontextMethod()) - .addMethod(getcontextMethod()) + .addMethod(setContextMethod()) + .addMethod(getContextMethod()) .addMethod(addStatusMethod()) .addMethod(addLogMethod("Info")) .addMethod(addLog2Method("Info")) @@ -109,7 +109,7 @@ private static MethodSpec addLog2Method(String name) { .build(); } - private static MethodSpec getcontextMethod() { + private static MethodSpec getContextMethod() { return MethodSpec.methodBuilder("getContext") .addModifiers(Modifier.PUBLIC) .returns(Context.class) @@ -117,7 +117,7 @@ private static MethodSpec getcontextMethod() { .build(); } - private static MethodSpec setcontextMethod() { + private static MethodSpec setContextMethod() { return MethodSpec.methodBuilder("setContext") .addModifiers(Modifier.PUBLIC) .addParameter(Context.class, "context") diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/MapPropertySourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/MapPropertySourceGenerator.java index e6276c8b..8094526f 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/MapPropertySourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/MapPropertySourceGenerator.java @@ -38,14 +38,14 @@ * set of values at build time. */ @AOTModule( - id = MapPropertySourceGenerator.BASE_ID, - options = { - @Option( - key = BASE_ORDER_OPTION, - description = "The order of the generated property source", - sampleValue = "1000" - ) - } + id = MapPropertySourceGenerator.BASE_ID, + options = { + @Option( + key = BASE_ORDER_OPTION, + description = "The order of the generated property source", + sampleValue = "1000" + ) + } ) public class MapPropertySourceGenerator extends AbstractSingleClassFileGenerator { public static final String BASE_ID = "map.property"; @@ -55,8 +55,8 @@ public class MapPropertySourceGenerator extends AbstractSingleClassFileGenerator private final Map values; public MapPropertySourceGenerator( - String resourceName, - Map values) { + String resourceName, + Map values) { this.resourceName = resourceName; this.values = values; } @@ -67,21 +67,21 @@ protected JavaFile generate() { String typeName = computeTypeName(); String orderKey = BASE_ORDER_OPTION + "." + resourceName; int order = getContext().getConfiguration() - .optionalValue(orderKey, value -> - value.map(Integer::parseInt).orElse(Ordered.HIGHEST_PRECEDENCE)); + .optionalValue(orderKey, value -> + value.map(Integer::parseInt).orElse(Ordered.HIGHEST_PRECEDENCE)); TypeSpec.Builder typeBuilder = TypeSpec.classBuilder(typeName) - .addModifiers(PUBLIC) - .superclass(MapPropertySource.class); - MapGenerator generator = new MapGenerator(); + .addModifiers(PUBLIC) + .superclass(MapPropertySource.class); + var generator = new MapGenerator(); typeBuilder.addMethod(MethodSpec.constructorBuilder() - .addStatement("super($S, $L)", resourceName, generator.generateMap(typeBuilder, values)) - .build()) - .addMethod(MethodSpec.methodBuilder("getOrder") - .addModifiers(PUBLIC) - .returns(int.class) - .addStatement("return $L", order) - .build()) - .addAnnotation(Generated.class); + .addStatement("super($S, $L)", resourceName, generator.generateMap(typeBuilder, values)) + .build()) + .addMethod(MethodSpec.methodBuilder("getOrder") + .addModifiers(PUBLIC) + .returns(int.class) + .addStatement("return $L", order) + .build()) + .addAnnotation(Generated.class); return javaFile(typeBuilder.build()); } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NativeStaticServiceLoaderSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NativeStaticServiceLoaderSourceGenerator.java index 9a5983c7..ddb66a57 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NativeStaticServiceLoaderSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NativeStaticServiceLoaderSourceGenerator.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; -import java.util.stream.Collectors; import java.util.stream.Stream; import static javax.lang.model.element.Modifier.PUBLIC; @@ -44,32 +43,32 @@ * executing in native images, where classloading is basically free. */ @AOTModule( - id = NativeStaticServiceLoaderSourceGenerator.ID, - description = AbstractStaticServiceLoaderSourceGenerator.DESCRIPTION, - options = { - @Option( - key = "service.types", - description = "The list of service types to be scanned (comma separated)", - sampleValue = AbstractStaticServiceLoaderSourceGenerator.DEFAULT_SERVICE_TYPES - ), - @Option( - key = "serviceloading.rejected.impls", - description = "A list of implementation types which shouldn't be included in the final application (comma separated)", - sampleValue = "com.Misc,org.Bar" - ), - @Option( - key = "serviceloading.force.include.impls", - description = "A list of implementation types to include even if they don't match bean requirements (comma separated)", - sampleValue = "com.Misc,org.Bar" - ), - @Option( - key = Environments.POSSIBLE_ENVIRONMENTS_NAMES, - description = Environments.POSSIBLE_ENVIRONMENTS_DESCRIPTION, - sampleValue = Environments.POSSIBLE_ENVIRONMENTS_SAMPLE - ) - }, - enabledOn = Runtime.NATIVE, - subgenerators = {YamlPropertySourceGenerator.class} + id = NativeStaticServiceLoaderSourceGenerator.ID, + description = AbstractStaticServiceLoaderSourceGenerator.DESCRIPTION, + options = { + @Option( + key = "service.types", + description = "The list of service types to be scanned (comma separated)", + sampleValue = AbstractStaticServiceLoaderSourceGenerator.DEFAULT_SERVICE_TYPES + ), + @Option( + key = "serviceloading.rejected.impls", + description = "A list of implementation types which shouldn't be included in the final application (comma separated)", + sampleValue = "com.Misc,org.Bar" + ), + @Option( + key = "serviceloading.force.include.impls", + description = "A list of implementation types to include even if they don't match bean requirements (comma separated)", + sampleValue = "com.Misc,org.Bar" + ), + @Option( + key = Environments.POSSIBLE_ENVIRONMENTS_NAMES, + description = Environments.POSSIBLE_ENVIRONMENTS_DESCRIPTION, + sampleValue = Environments.POSSIBLE_ENVIRONMENTS_SAMPLE + ) + }, + enabledOn = Runtime.NATIVE, + subgenerators = {YamlPropertySourceGenerator.class} ) public class NativeStaticServiceLoaderSourceGenerator extends AbstractStaticServiceLoaderSourceGenerator { public static final String ID = "serviceloading.native"; @@ -88,28 +87,28 @@ class Service { } } List initializers = serviceClasses.map(clazz -> { - for (Method method : clazz.getDeclaredMethods()) { - if ("provider".equals(method.getName()) && Modifier.isStatic(method.getModifiers())) { - return new Service(clazz.getName(), CodeBlock.of("$T::provider", clazz)); - } + for (Method method : clazz.getDeclaredMethods()) { + if ("provider".equals(method.getName()) && Modifier.isStatic(method.getModifiers())) { + return new Service(clazz.getName(), CodeBlock.of("$T::provider", clazz)); } - for (Constructor constructor : clazz.getDeclaredConstructors()) { - if (constructor.getParameterCount() == 0 && Modifier.isPublic(constructor.getModifiers())) { - return new Service(clazz.getName(), CodeBlock.of("$T::new", clazz)); - } + } + for (Constructor constructor : clazz.getDeclaredConstructors()) { + if (constructor.getParameterCount() == 0 && Modifier.isPublic(constructor.getModifiers())) { + return new Service(clazz.getName(), CodeBlock.of("$T::new", clazz)); } - return null; - }) - .filter(Objects::nonNull) - .sorted(Comparator.comparing(s -> s.name)) - .collect(Collectors.toList()); + } + return null; + }) + .filter(Objects::nonNull) + .sorted(Comparator.comparing(s -> s.name)) + .toList(); ParameterizedTypeName staticDefinitionType = ParameterizedTypeName.get(SoftServiceLoader.StaticDefinition.class, serviceType); MethodSpec.Builder method = MethodSpec.methodBuilder("findAll") - .addModifiers(PUBLIC) - .addParameter(ParameterizedTypeName.get(Predicate.class, String.class), "predicate") - .returns(ParameterizedTypeName.get(ClassName.get(Stream.class), staticDefinitionType)); - if (initializers.size() == 0) { + .addModifiers(PUBLIC) + .addParameter(ParameterizedTypeName.get(Predicate.class, String.class), "predicate") + .returns(ParameterizedTypeName.get(ClassName.get(Stream.class), staticDefinitionType)); + if (initializers.isEmpty()) { method.addStatement("return $T.empty()", Stream.class); } else { method.addStatement("$T list = new $T<>()", ParameterizedTypeName.get(ClassName.get(List.class), staticDefinitionType), ArrayList.class); diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NettyPropertiesSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NettyPropertiesSourceGenerator.java index 7bff9727..1099e2ec 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NettyPropertiesSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/NettyPropertiesSourceGenerator.java @@ -38,20 +38,20 @@ * A code generator which is responsible for setting up Netty properties. */ @AOTModule( - id = NettyPropertiesSourceGenerator.ID, - description = NettyPropertiesSourceGenerator.DESCRIPTION, - options = { - @Option( - key = NettyPropertiesSourceGenerator.MACHINE_ID, - description = NettyPropertiesSourceGenerator.MACHINE_ID_DESCRIPTION, - sampleValue = "random" - ), - @Option( - key = NettyPropertiesSourceGenerator.PROCESS_ID, - description = NettyPropertiesSourceGenerator.PROCESS_ID_DESCRIPTION, - sampleValue = "random" - ) - } + id = NettyPropertiesSourceGenerator.ID, + description = NettyPropertiesSourceGenerator.DESCRIPTION, + options = { + @Option( + key = NettyPropertiesSourceGenerator.MACHINE_ID, + description = NettyPropertiesSourceGenerator.MACHINE_ID_DESCRIPTION, + sampleValue = "random" + ), + @Option( + key = NettyPropertiesSourceGenerator.PROCESS_ID, + description = NettyPropertiesSourceGenerator.PROCESS_ID_DESCRIPTION, + sampleValue = "random" + ) + } ) public class NettyPropertiesSourceGenerator extends AbstractCodeGenerator { public static final String GENERATED_CLASS = "NettyPropertiesAOTContextConfigurer"; @@ -76,39 +76,39 @@ public void generate(@NonNull AOTContext context) { private TypeSpec buildConfigurer(AOTContext context) { TypeSpec.Builder classBuilder = TypeSpec.classBuilder(GENERATED_CLASS) - .addSuperinterface(ApplicationContextConfigurer.class) - .addModifiers(PUBLIC); + .addSuperinterface(ApplicationContextConfigurer.class) + .addModifiers(PUBLIC); MethodSpec.Builder configure = MethodSpec.methodBuilder("configure") - .addModifiers(PUBLIC) - .addAnnotation(Override.class) - .addParameter(ApplicationContextBuilder.class, "builder"); + .addModifiers(PUBLIC) + .addAnnotation(Override.class) + .addParameter(ApplicationContextBuilder.class, "builder"); ifOptimizationEnabled(machineIdOptionOf(context), machineId -> - defineSystemProperty(classBuilder, configure, "io.netty.machineId", machineId, () -> MethodSpec.methodBuilder("randomMacAddress") - .addModifiers(PRIVATE, STATIC) - .returns(String.class) - .addCode(CodeBlock.builder() - .addStatement("$T rnd = new $T()", Random.class, Random.class) - .addStatement("$T sb = new $T()", StringBuilder.class, StringBuilder.class) - .beginControlFlow("for (int i = 0; i < 6; i++)") - .addStatement("sb.append(String.format(\"%02x\", rnd.nextInt(256)))") - .beginControlFlow("if (i < 5)") - .addStatement("sb.append(\":\")") - .endControlFlow() - .endControlFlow() - .addStatement("return sb.toString()") - .build() - ).build()) + defineSystemProperty(classBuilder, configure, "io.netty.machineId", machineId, () -> MethodSpec.methodBuilder("randomMacAddress") + .addModifiers(PRIVATE, STATIC) + .returns(String.class) + .addCode(CodeBlock.builder() + .addStatement("$T rnd = new $T()", Random.class, Random.class) + .addStatement("$T sb = new $T()", StringBuilder.class, StringBuilder.class) + .beginControlFlow("for (int i = 0; i < 6; i++)") + .addStatement("sb.append(String.format(\"%02x\", rnd.nextInt(256)))") + .beginControlFlow("if (i < 5)") + .addStatement("sb.append(\":\")") + .endControlFlow() + .endControlFlow() + .addStatement("return sb.toString()") + .build() + ).build()) ); ifOptimizationEnabled(pidOf(context), pid -> - defineSystemProperty(classBuilder, configure, "io.netty.processId", pid, () -> MethodSpec.methodBuilder("randomPid") - .addModifiers(PRIVATE, STATIC) - .returns(String.class) - .addStatement("return String.valueOf(new Random().nextInt(65536))") - .build()) + defineSystemProperty(classBuilder, configure, "io.netty.processId", pid, () -> MethodSpec.methodBuilder("randomPid") + .addModifiers(PRIVATE, STATIC) + .returns(String.class) + .addStatement("return String.valueOf(new Random().nextInt(65536))") + .build()) ); return classBuilder.addMethod(configure.build()) - .build(); + .build(); } private static void ifOptimizationEnabled(String option, Consumer consumer) { diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ParentTagTagClassTuple.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ParentTagTagClassTuple.java index 492d5b89..7c88310b 100755 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ParentTagTagClassTuple.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/ParentTagTagClassTuple.java @@ -16,11 +16,9 @@ package io.micronaut.aot.std.sourcegen; /** - * * Represents default class name rules. * * @author Ceki Gücü - * */ public class ParentTagTagClassTuple { diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/PublishersSourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/PublishersSourceGenerator.java index 9ac09e80..26a94b3b 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/PublishersSourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/PublishersSourceGenerator.java @@ -27,15 +27,14 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; /** * An optimizer which is responsible for determining what reactive * types are found at build time. */ @AOTModule( - id = PublishersSourceGenerator.ID, - description = PublishersSourceGenerator.DESCRIPTION + id = PublishersSourceGenerator.ID, + description = PublishersSourceGenerator.DESCRIPTION ) public class PublishersSourceGenerator extends AbstractCodeGenerator { public static final String ID = "scan.reactive.types"; @@ -48,11 +47,11 @@ public void generate(@NonNull AOTContext context) { List knownSingleTypes = typeNamesOf(Publishers.getKnownSingleTypes()); List knownCompletableTypes = typeNamesOf(Publishers.getKnownCompletableTypes()); body.addStatement( - "return new $T($L, $L, $L)", - PublishersOptimizations.class, - asClassList(knownReactiveTypes), - asClassList(knownSingleTypes), - asClassList(knownCompletableTypes) + "return new $T($L, $L, $L)", + PublishersOptimizations.class, + asClassList(knownReactiveTypes), + asClassList(knownSingleTypes), + asClassList(knownCompletableTypes) ); }); @@ -60,7 +59,7 @@ public void generate(@NonNull AOTContext context) { private static CodeBlock asClassList(List types) { CodeBlock.Builder knownReactiveBlock = CodeBlock.builder() - .add("$T.asList(", Arrays.class); + .add("$T.asList(", Arrays.class); for (int i = 0; i < types.size(); i++) { String knownReactiveType = types.get(i); knownReactiveBlock.add("$T.class", ClassName.bestGuess(knownReactiveType.replace('$', '.'))); @@ -73,7 +72,9 @@ private static CodeBlock asClassList(List types) { } private static List typeNamesOf(Collection> classes) { - return classes.stream().map(Class::getName).collect(Collectors.toList()); + return classes.stream() + .map(Class::getName) + .toList(); } } diff --git a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/YamlPropertySourceGenerator.java b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/YamlPropertySourceGenerator.java index afa6f04a..5ea9a859 100644 --- a/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/YamlPropertySourceGenerator.java +++ b/aot-std-optimizers/src/main/java/io/micronaut/aot/std/sourcegen/YamlPropertySourceGenerator.java @@ -15,8 +15,8 @@ */ package io.micronaut.aot.std.sourcegen; -import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.AOTContext; +import io.micronaut.aot.core.AOTModule; import io.micronaut.aot.core.codegen.AbstractCodeGenerator; import io.micronaut.context.env.MapPropertySource; import io.micronaut.context.env.PropertySource; @@ -34,11 +34,10 @@ * A source generator which will generate a static {@link io.micronaut.context.env.PropertySource} * from a given YAML configuration file, in order to substitute the dynamic loader * with a static configuration. - * */ @AOTModule( - id = YamlPropertySourceGenerator.ID, - description = YamlPropertySourceGenerator.DESCRIPTION + id = YamlPropertySourceGenerator.ID, + description = YamlPropertySourceGenerator.DESCRIPTION ) public class YamlPropertySourceGenerator extends AbstractCodeGenerator { public static final String ID = "yaml.to.java.config"; @@ -53,7 +52,7 @@ public YamlPropertySourceGenerator(Collection resources) { @Override public void generate(@NonNull AOTContext context) { - YamlPropertySourceLoader loader = new YamlPropertySourceLoader(); + var loader = new YamlPropertySourceLoader(); for (String resource : resources) { createMapProperty(loader, context, resource); } @@ -66,12 +65,11 @@ private void createMapProperty(YamlPropertySourceLoader loader, AOTContext conte context.registerExcludedResource(resource + ".yml"); context.registerExcludedResource(resource + ".yaml"); PropertySource ps = optionalSource.get(); - if (ps instanceof MapPropertySource) { - MapPropertySource mps = (MapPropertySource) ps; + if (ps instanceof MapPropertySource mps) { Map values = mps.asMap(); - MapPropertySourceGenerator generator = new MapPropertySourceGenerator( - resource, - values); + var generator = new MapPropertySourceGenerator( + resource, + values); generator.generate(context); } else { throw new UnsupportedOperationException("Unknown property source type:" + ps.getClass()); diff --git a/build-logic/src/main/java/io/micronaut/build/internal/VersionInfo.java b/build-logic/src/main/java/io/micronaut/build/internal/VersionInfo.java index 50515243..68487914 100644 --- a/build-logic/src/main/java/io/micronaut/build/internal/VersionInfo.java +++ b/build-logic/src/main/java/io/micronaut/build/internal/VersionInfo.java @@ -39,9 +39,9 @@ public abstract class VersionInfo extends DefaultTask { @TaskAction void generateInfo() { File parentDir = getOutputDirectory().getAsFile().get(); - File file = new File(parentDir, "version.txt"); + var file = new File(parentDir, "version.txt"); if (parentDir.isDirectory() || parentDir.mkdirs()) { - try (PrintWriter prn = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) { + try (var prn = new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8))) { prn.println(getVersion().get()); } catch (FileNotFoundException e) { e.printStackTrace(); diff --git a/gradle.properties b/gradle.properties index 96907da6..a726fe25 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ projectVersion=2.5.1-SNAPSHOT projectGroup=io.micronaut.aot -groovyVersion=4.0.13 +groovyVersion=4.0.22 spockVersion=2.3-groovy-4.0 title=Micronaut AOT @@ -9,8 +9,6 @@ projectUrl=https://micronaut.io githubSlug=micronaut-projects/micronaut-aot developers=Graeme Rocher - - org.gradle.caching=true org.gradle.parallel=true org.gradle.jvmargs=-Xmx1024m