diff --git a/gradle/verification-keyring.keys b/gradle/verification-keyring.keys index 55373b4..27cde9f 100644 --- a/gradle/verification-keyring.keys +++ b/gradle/verification-keyring.keys @@ -1274,46 +1274,48 @@ LBaslDFjyxMECWr3v7TuEmEmNcD+KwNyACFNuBjEBWeuJZYwCkAkVy8AyitrTMh8 =Evfn -----END PGP PUBLIC KEY BLOCK----- -id 1D9866E375A1435ACE0BE0ADE3461D2D16725F94 +id BF3A87D91B70BE32CAD64A2645D0CAA6D26B0F7D uid Open Source -----BEGIN PGP PUBLIC KEY BLOCK----- -xsFNBGKGKVgBEADXgUTpCCKTmM6wl10V5B4SJhAfF2ycw2FfVPPBXhtj2buTFq9r -sejQ5ZQfg5VnMpZIZBTxXLZk4u5wJkqQqcmvYHc1Y0Dec4PiWDH7Yk0sX8OSo154 -uoehtvsaa5yJx+NqXaepuKWqpDu7XbUH/am6kYH+JtqLUo9hcSxzRDX+GOT+yYkN -SNbv+0oed5FD1tCRMZLmce7JoztIO+YRdFxjHbECHbX76PROWMXg7twmWdXGRe4u -z6Cjq8Flo1aa9jkiuH/bKm0VeiozrQwu7hVR15mfEU3B+Tvb8j8iVUBJm46nfudE -t12ikwdWNZGY7x/PJ+nFo4HPRbnThTxaqS0jykUkdWVzKZPtvK9J2EHzO1Ht8xKU -piPButSoAuoW07gFcjsrK52Jw40Nb6+frECNxdEuPeUbJ7o6kftuEdQRV0O18oVx -B+hbDmyItXjpMQzYMXXK/MWJhRGecdU6M1v4aKU2pytRiaAuftfSbz/Vqd6DnPHM -zENtxsF7s7x/o53Sux1lbM8tjdOxpv2KSEloej0SDXF1VB5A9qaMhMXRxZXILSA/ -XeP3CEQDrt57FiZaXafSKjBJW7df1mAU6z140LXFoYScHj5y1tc7xXzZu1j6Yggw -Zp6WfS+mQoa8TW48Rne3S/kGpzEljFW9ZzKh8hAbR8zlJEtJbUk6GuQKsQARAQAB -tCVPcGVuIFNvdXJjZSA8b3BlbnNvdXJjZUBwYWxhbnRpci5jb20+zsFNBGKGKVgB -EAC1hV6/bq6zcIONya2kEF9ED54I6JZ+J4go4NwWunyDnCYoe2lUcgFkYKa/l6v1 -fX1yh0zumzffH0F91TAwqOqcW/a6FKxSIniiYkA0WNTkEaYaWOHo8nudn5CYjt72 -wY41J4IOr+n7bCKQkKxNr+/gMlDi6i3+DCMra5/12l+wwBchknQUaz5Mi/r+/TDc -a+FWZqQIgIGbIMkPQCw5mHbpjRnOKM3G6jVY5bAqg+dWz/ABluYClypTK7tnbGYa -FlM9BVpknLwbixS9WyCEkU3TtOYB8yaMeK+NAtqVAXl7IKrokx9/4+/E3KYaAoEk -zTZY2gsm6cVelpbiB7PwumO1jNRcdEddf1pGzdb4BbDp119HXKZtmaDLbfddyboB -Eur3g76N+IoGrIeNH8yG5h/iJZGPyu76aWMk50PTpMY6IG+oFHdtm/YsH8R4XTJ6 -IKktPeuVq0mS3gVU+PjLIZWQ4DU8Gt4PAyzsBJ+zlxxfo7WbPkXIITFVRvFlMXVg -f3eH+nW79Evt71WufrESEg38m6cg8LyY7Xp9rK7ynV9t7OQ5P19Qhq8ornYIdosC -9zCS2X4chaiXV2un1hxKO5H9+d39EIguM4l2uv/aTYfgrzT45CoXNjyrGtR3LAoN -nh1bD6fhfifty+mjgMSlKIdMXSFfW4n61RCIN6a+CB/fKQARAQABwsF2BBgBCgAg -FiEEsu98BnWvkgjVpqIGGZx2CA+KGL4FAmKGKVgCGwwACgkQGZx2CA+KGL7f3w/+ -MxEH3/rhiPQK1EyBkhF6moGEq5IhzpjnEbqKw8QVBqg9zCKWAaMGGNVJXfpXhgBv -Oo4nLDxW3W0nTP7Og/dXepnfC17gDYrTYWMyyXPiKAgOIbWFJ+LGAjYaVOIf9juk -HMon0YYc6JcmFf+mQDXOJ9UYoYOEpKQVC3+cFIWgFofRfNrmgj7gN/vdAUVudJcX -Otyhcy+krnFP+DQzSwqvNomPZtIi8xHBQ8PfpbYqGOZBLe4ONPEKuzoO/YxzUhpR -4w7K6VnAad6702+ef59P++ol+y2PZ2Kz4A33VV4SgR3NDlqYfcH01mOvGSxxUG4f -/kWu1qiWBYWaJLcfYuDq7fg/FNw0/E+LgpUNfOdDdpqBck3ZxIkgXL/5IGBvyZ8s -3ZjvSAKvu54IUYWU948KjaAdIqrBuUUo5GUB3Eo9vk8fgIOnoEqUsx5inXoVz7sz -VHKEXeUTGIt8EgJ5doUxwnv52AZU8PLfFJLYbNB9Amp/pq4rtwSozUhEog3rv/vI -sGDqAhtjHiMlmGTEKx2VZeB1lzejRVeCGLiWGtIwsO9F6bqAZ9RTQuOngvbvGXUn -KWeRiAiXthjafbL5MFAlQNVdKAAX2Cr7o4894cuqZneL8+sXlj5fqwTtGcup15LA -nXPLp9bA3LBZwLif3+1Jvej20plpz9FtkgzaV6isTJg= -=rjU5 +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 +Q+QSti9Qi4JDuwzJy3IV/5dmHoPgvVs1EXvJ +=XaeA -----END PGP PUBLIC KEY BLOCK----- id BDB5FA4FE719D787FB3D3197F6D4A1D411E9D1AE diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 0873a50..b7880e7 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -121,7 +121,7 @@ - + diff --git a/settings.gradle.kts b/settings.gradle.kts index 20fba8c..8273c39 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,3 @@ -plugins { id("org.gradlex.internal-build-conventions") version "0.8" } +plugins { id("org.gradlex.internal-build-conventions") version "0.9" } rootProject.name = "extra-java-module-info" diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/AutomaticModuleName.java b/src/main/java/org/gradlex/javamodule/moduleinfo/AutomaticModuleName.java index c4b1844..c830928 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/AutomaticModuleName.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/AutomaticModuleName.java @@ -1,6 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.gradlex.javamodule.moduleinfo; +import org.jspecify.annotations.NullMarked; + +@NullMarked public class AutomaticModuleName extends ModuleSpec { AutomaticModuleName(String identifier, String moduleName) { diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPlugin.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPlugin.java index fd460cf..982ad76 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPlugin.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPlugin.java @@ -42,10 +42,12 @@ import org.gradle.api.tasks.SourceSetContainer; import org.gradle.util.GradleVersion; import org.gradlex.javamodule.moduleinfo.tasks.ModuleDescriptorRecommendation; +import org.jspecify.annotations.NullMarked; /** * Entry point of the plugin. */ +@NullMarked public abstract class ExtraJavaModuleInfoPlugin implements Plugin { private static final GradleVersion MINIMUM_SUPPORTED_VERSION = GradleVersion.version("6.8"); diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPluginExtension.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPluginExtension.java index 19f2e1f..b12b6a8 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPluginExtension.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoPluginExtension.java @@ -14,15 +14,16 @@ import org.gradle.api.provider.Property; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.SourceSet; +import org.jspecify.annotations.NullMarked; /** * A data class to collect all the module information we want to add. * Here the class is used as extension that can be configured in the build script * and as input to the ExtraModuleInfoTransform that add the information to Jars. */ -@SuppressWarnings("unused") +@NullMarked public abstract class ExtraJavaModuleInfoPluginExtension { - static Attribute JAVA_MODULE_ATTRIBUTE = Attribute.of("javaModule", Boolean.class); + static final Attribute JAVA_MODULE_ATTRIBUTE = Attribute.of("javaModule", Boolean.class); @Inject protected abstract ObjectFactory getObjects(); diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java index 24c7d69..80e9e99 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ExtraJavaModuleInfoTransform.java @@ -54,6 +54,7 @@ import org.gradle.api.tasks.Classpath; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; +import org.jspecify.annotations.NullMarked; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; @@ -65,6 +66,7 @@ * The transformation fails the build if a Jar does not contain information and no extra information * was defined for it. This way we make sure that all Jars are turned into modules. */ +@NullMarked @CacheableTransform public abstract class ExtraJavaModuleInfoTransform implements TransformAction { diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/FilePathToModuleCoordinates.java b/src/main/java/org/gradlex/javamodule/moduleinfo/FilePathToModuleCoordinates.java index ad32073..c541803 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/FilePathToModuleCoordinates.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/FilePathToModuleCoordinates.java @@ -5,12 +5,14 @@ import java.util.stream.Collectors; import java.util.stream.StreamSupport; import javax.annotation.Nullable; +import org.jspecify.annotations.NullMarked; /** * Attempts to parse 'group', 'name', 'version' coordinates from a paths like: * .gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.36/6c62681a2f655b49963a5983b8b0950a6120ae14/slf4j-api-1.7.36.jar * .m2/repository/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar */ +@NullMarked final class FilePathToModuleCoordinates { @Nullable diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/IdValidator.java b/src/main/java/org/gradlex/javamodule/moduleinfo/IdValidator.java index de00389..94aa761 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/IdValidator.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/IdValidator.java @@ -1,6 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.gradlex.javamodule.moduleinfo; +import org.jspecify.annotations.NullMarked; + +@NullMarked class IdValidator { private static final String COORDINATES_PATTERN = "^[a-zA-Z0-9._-]+:[a-zA-Z0-9._-]+(\\|[a-zA-Z0-9._-]+)?$"; private static final String FILE_NAME_PATTERN = "^[a-zA-Z0-9._-]+\\.(jar|zip)$"; diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/KnownModule.java b/src/main/java/org/gradlex/javamodule/moduleinfo/KnownModule.java index 987621b..bbc7477 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/KnownModule.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/KnownModule.java @@ -1,6 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.gradlex.javamodule.moduleinfo; +import org.jspecify.annotations.NullMarked; + +@NullMarked public class KnownModule extends ModuleSpec { KnownModule(String identifier, String moduleName) { diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleInfo.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleInfo.java index cad50b0..b4e0792 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleInfo.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleInfo.java @@ -7,12 +7,13 @@ import java.util.Map; import java.util.Set; import org.gradle.api.model.ObjectFactory; +import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; /** * Data class to hold the information that should be added as module-info.class to an existing Jar file. */ -@SuppressWarnings("unused") +@NullMarked public class ModuleInfo extends ModuleSpec { @Nullable diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleNameUtil.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleNameUtil.java index 006201f..7d0213e 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleNameUtil.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleNameUtil.java @@ -6,10 +6,12 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.jspecify.annotations.NullMarked; /** * Implementation based on 'jdk.internal.module.ModulePath#deriveModuleDescriptor' and related methods. */ +@NullMarked class ModuleNameUtil { private static final Pattern DASH_VERSION = Pattern.compile("-(\\d+(\\.|$))"); diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleSpec.java b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleSpec.java index f3ad43d..e90abb2 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleSpec.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/ModuleSpec.java @@ -9,12 +9,13 @@ import java.util.List; import org.gradle.api.artifacts.MinimalExternalModuleDependency; import org.gradle.api.provider.Provider; +import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; /** * Details that real Modules and Automatic-Module-Names share. */ -@SuppressWarnings("unused") +@NullMarked public abstract class ModuleSpec implements Serializable { private final String identifier; diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/PublishedMetadata.java b/src/main/java/org/gradlex/javamodule/moduleinfo/PublishedMetadata.java index 135dd6a..2c73703 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/PublishedMetadata.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/PublishedMetadata.java @@ -29,8 +29,10 @@ import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.SourceSetContainer; import org.gradle.util.GradleVersion; +import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; +@NullMarked public class PublishedMetadata implements Serializable { private static final Attribute CATEGORY_ATTRIBUTE_UNTYPED = Attribute.of(CATEGORY_ATTRIBUTE.getName(), String.class); diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/package-info.java b/src/main/java/org/gradlex/javamodule/moduleinfo/package-info.java deleted file mode 100644 index 50598d4..0000000 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -@NullMarked -package org.gradlex.javamodule.moduleinfo; - -import org.jspecify.annotations.NullMarked; diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/ModuleDescriptorRecommendation.java b/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/ModuleDescriptorRecommendation.java index bafb4db..245f1f7 100644 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/ModuleDescriptorRecommendation.java +++ b/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/ModuleDescriptorRecommendation.java @@ -39,7 +39,9 @@ import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFiles; import org.gradle.api.tasks.TaskAction; +import org.jspecify.annotations.NullMarked; +@NullMarked public abstract class ModuleDescriptorRecommendation extends DefaultTask { private static final class Artifact { @@ -256,7 +258,6 @@ private static void extractArtifactsAndTheirDependencies( private static final Pattern EXPORTS_PATTERN = Pattern.compile("^ {4}exports (.*);$"); private static final Pattern PROVIDES_PATTERN = Pattern.compile("^ {4}provides (.*) with$"); - @SuppressWarnings("Since15") private void storeJdepsToolParsedMetadata( Java8SafeToolProvider jdeps, Path outputPath, Artifact targetArtifact, Collection jars) throws IOException { diff --git a/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/package-info.java b/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/package-info.java deleted file mode 100644 index 6b008a6..0000000 --- a/src/main/java/org/gradlex/javamodule/moduleinfo/tasks/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -@NullMarked -package org.gradlex.javamodule.moduleinfo.tasks; - -import org.jspecify.annotations.NullMarked;