diff --git a/pom.xml b/pom.xml index 0da6045a..80913a12 100644 --- a/pom.xml +++ b/pom.xml @@ -194,9 +194,9 @@ under the License. plexus-xml - com.google.code.findbugs - jsr305 - 3.0.2 + org.jspecify + jspecify + 1.0.0 compile diff --git a/src/main/java/org/apache/maven/buildcache/CacheContext.java b/src/main/java/org/apache/maven/buildcache/CacheContext.java index 613f75a0..e25b8ac3 100644 --- a/src/main/java/org/apache/maven/buildcache/CacheContext.java +++ b/src/main/java/org/apache/maven/buildcache/CacheContext.java @@ -21,6 +21,7 @@ import org.apache.maven.buildcache.xml.build.ProjectsInputInfo; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.NonNull; import static java.util.Objects.requireNonNull; @@ -39,14 +40,17 @@ public CacheContext(MavenProject project, ProjectsInputInfo inputInfo, MavenSess this.session = requireNonNull(session); } + @NonNull public MavenProject getProject() { return project; } + @NonNull public ProjectsInputInfo getInputInfo() { return inputInfo; } + @NonNull public MavenSession getSession() { return session; } diff --git a/src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java b/src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java index 4c573282..c68a05af 100644 --- a/src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java +++ b/src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java @@ -18,7 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; @@ -94,6 +93,7 @@ import org.apache.maven.project.MavenProjectHelper; import org.codehaus.plexus.util.ReflectionUtils; import org.eclipse.aether.RepositorySystem; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -186,7 +186,7 @@ public CacheControllerImpl( } @Override - @Nonnull + @NonNull public CacheResult findCachedBuild( MavenSession session, MavenProject project, List mojoExecutions, boolean skipCache) { final LifecyclePhasesHelper lifecyclePhasesHelper = providerLifecyclePhasesHelper.get(); diff --git a/src/main/java/org/apache/maven/buildcache/CacheRepository.java b/src/main/java/org/apache/maven/buildcache/CacheRepository.java index 6a9a2934..d9408c59 100644 --- a/src/main/java/org/apache/maven/buildcache/CacheRepository.java +++ b/src/main/java/org/apache/maven/buildcache/CacheRepository.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import java.io.IOException; import java.util.Optional; @@ -27,13 +25,14 @@ import org.apache.maven.buildcache.xml.Build; import org.apache.maven.buildcache.xml.report.CacheReport; import org.apache.maven.execution.MavenSession; +import org.jspecify.annotations.NonNull; /** * Cache repository. */ public interface CacheRepository { - @Nonnull + @NonNull Optional findBuild(CacheContext context) throws IOException; void saveBuildInfo(CacheResult cacheResult, Build build) throws IOException; diff --git a/src/main/java/org/apache/maven/buildcache/CacheResult.java b/src/main/java/org/apache/maven/buildcache/CacheResult.java index 6c1b5b2f..3f4da427 100644 --- a/src/main/java/org/apache/maven/buildcache/CacheResult.java +++ b/src/main/java/org/apache/maven/buildcache/CacheResult.java @@ -20,6 +20,8 @@ import org.apache.maven.buildcache.xml.Build; import org.apache.maven.buildcache.xml.CacheSource; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import static java.util.Objects.requireNonNull; @@ -32,7 +34,7 @@ public class CacheResult { private final Build build; private final CacheContext context; - private CacheResult(RestoreStatus status, Build build, CacheContext context) { + private CacheResult(RestoreStatus status, @Nullable Build build, @Nullable CacheContext context) { this.status = requireNonNull(status); this.build = build; this.context = context; @@ -88,14 +90,17 @@ public boolean isSuccess() { return status == RestoreStatus.SUCCESS; } + @Nullable public Build getBuildInfo() { return build; } + @Nullable public CacheSource getSource() { return build != null ? build.getSource() : null; } + @Nullable public CacheContext getContext() { return context; } @@ -104,6 +109,7 @@ public boolean isPartialSuccess() { return status == RestoreStatus.PARTIAL; } + @NonNull public RestoreStatus getStatus() { return status; } diff --git a/src/main/java/org/apache/maven/buildcache/CacheUtils.java b/src/main/java/org/apache/maven/buildcache/CacheUtils.java index df3bb495..5476215f 100644 --- a/src/main/java/org/apache/maven/buildcache/CacheUtils.java +++ b/src/main/java/org/apache/maven/buildcache/CacheUtils.java @@ -51,6 +51,7 @@ import org.apache.maven.model.Dependency; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import static org.apache.maven.artifact.Artifact.LATEST_VERSION; @@ -69,10 +70,11 @@ public static boolean isPom(Dependency dependency) { return dependency.getType().equals("pom"); } - public static boolean isSnapshot(String version) { + public static boolean isSnapshot(@Nullable String version) { return version != null && (version.endsWith(SNAPSHOT_VERSION) || version.endsWith(LATEST_VERSION)); } + @Nullable public static String normalizedName(Artifact artifact) { if (artifact.getFile() == null) { return null; @@ -241,7 +243,7 @@ public static void unzip(Path zip, Path out, boolean preservePermissions) throws } public static void debugPrintCollection( - Logger logger, Collection values, String heading, String elementCaption) { + Logger logger, @Nullable Collection values, @Nullable String heading, @Nullable String elementCaption) { if (logger.isDebugEnabled() && values != null && !values.isEmpty()) { final int size = values.size(); int i = 0; diff --git a/src/main/java/org/apache/maven/buildcache/DefaultPluginScanConfig.java b/src/main/java/org/apache/maven/buildcache/DefaultPluginScanConfig.java index e2663864..483b1934 100644 --- a/src/main/java/org/apache/maven/buildcache/DefaultPluginScanConfig.java +++ b/src/main/java/org/apache/maven/buildcache/DefaultPluginScanConfig.java @@ -18,9 +18,8 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import org.apache.maven.buildcache.xml.config.DirScanConfig; +import org.jspecify.annotations.NonNull; /** * DefaultPluginScanConfig @@ -38,12 +37,12 @@ public boolean accept(String propertyName) { } @Override - @Nonnull + @NonNull public PluginScanConfig mergeWith(PluginScanConfig overrideSource) { return overrideSource; } - @Nonnull + @NonNull @Override public ScanConfigProperties getTagScanProperties(String tagName) { return new ScanConfigProperties(true, "*"); diff --git a/src/main/java/org/apache/maven/buildcache/LifecyclePhasesHelper.java b/src/main/java/org/apache/maven/buildcache/LifecyclePhasesHelper.java index c37facc4..4c78117c 100644 --- a/src/main/java/org/apache/maven/buildcache/LifecyclePhasesHelper.java +++ b/src/main/java/org/apache/maven/buildcache/LifecyclePhasesHelper.java @@ -18,7 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.inject.Named; @@ -40,6 +39,7 @@ import org.apache.maven.lifecycle.Lifecycle; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,7 +103,7 @@ public void forkedProjectFailed(ExecutionEvent event) { forkedProjectToOrigin.remove(event.getProject(), event.getMojoExecution()); } - @Nonnull + @NonNull public String resolveHighestLifecyclePhase(MavenProject project, List mojoExecutions) { return resolveMojoExecutionLifecyclePhase(project, CacheUtils.getLast(mojoExecutions)); } diff --git a/src/main/java/org/apache/maven/buildcache/LocalCacheRepository.java b/src/main/java/org/apache/maven/buildcache/LocalCacheRepository.java index 3117455c..52139d6e 100644 --- a/src/main/java/org/apache/maven/buildcache/LocalCacheRepository.java +++ b/src/main/java/org/apache/maven/buildcache/LocalCacheRepository.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import java.io.IOException; import java.nio.file.Path; import java.util.Optional; @@ -29,6 +27,7 @@ import org.apache.maven.buildcache.xml.build.Artifact; import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; +import org.jspecify.annotations.NonNull; /** * Local cache repository. @@ -41,9 +40,9 @@ public interface LocalCacheRepository extends CacheRepository { void clearCache(CacheContext context); - @Nonnull + @NonNull Optional findBestMatchingBuild(MavenSession session, Dependency dependency) throws IOException; - @Nonnull + @NonNull Optional findLocalBuild(CacheContext context) throws IOException; } diff --git a/src/main/java/org/apache/maven/buildcache/LocalCacheRepositoryImpl.java b/src/main/java/org/apache/maven/buildcache/LocalCacheRepositoryImpl.java index dee0cf2d..f9f01c58 100644 --- a/src/main/java/org/apache/maven/buildcache/LocalCacheRepositoryImpl.java +++ b/src/main/java/org/apache/maven/buildcache/LocalCacheRepositoryImpl.java @@ -18,7 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; import javax.inject.Inject; import javax.inject.Named; @@ -57,6 +56,7 @@ import org.apache.maven.execution.MavenSession; import org.apache.maven.model.Dependency; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -100,7 +100,7 @@ public LocalCacheRepositoryImpl( this.cacheConfig = cacheConfig; } - @Nonnull + @NonNull @Override public Optional findLocalBuild(CacheContext context) throws IOException { Path localBuildInfoPath = localBuildPath(context, BUILDINFO_XML, false); @@ -119,7 +119,7 @@ public Optional findLocalBuild(CacheContext context) throws IOException { return Optional.empty(); } - @Nonnull + @NonNull @Override public Optional findBuild(CacheContext context) throws IOException { Path buildInfoPath = remoteBuildPath(context, BUILDINFO_XML); @@ -218,13 +218,13 @@ public void clearCache(CacheContext context) { } } - @Nonnull + @NonNull @Override public Optional findBestMatchingBuild(MavenSession session, Dependency dependency) { return bestBuildCache.computeIfAbsent(Pair.of(session, dependency), this::findBestMatchingBuildImpl); } - @Nonnull + @NonNull private Optional findBestMatchingBuildImpl(Pair dependencySession) { try { final MavenSession session = dependencySession.getLeft(); diff --git a/src/main/java/org/apache/maven/buildcache/PluginScanConfig.java b/src/main/java/org/apache/maven/buildcache/PluginScanConfig.java index 80e94ab3..8c0d301a 100644 --- a/src/main/java/org/apache/maven/buildcache/PluginScanConfig.java +++ b/src/main/java/org/apache/maven/buildcache/PluginScanConfig.java @@ -18,9 +18,9 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import org.apache.maven.buildcache.xml.config.DirScanConfig; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * PluginScanConfig @@ -33,8 +33,9 @@ public interface PluginScanConfig { PluginScanConfig mergeWith(PluginScanConfig overrideSource); - @Nonnull + @NonNull ScanConfigProperties getTagScanProperties(String tagName); + @Nullable DirScanConfig dto(); } diff --git a/src/main/java/org/apache/maven/buildcache/PluginScanConfigImpl.java b/src/main/java/org/apache/maven/buildcache/PluginScanConfigImpl.java index 04206ff8..c0f0b5d1 100644 --- a/src/main/java/org/apache/maven/buildcache/PluginScanConfigImpl.java +++ b/src/main/java/org/apache/maven/buildcache/PluginScanConfigImpl.java @@ -18,14 +18,14 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import java.util.List; import org.apache.commons.lang3.Strings; import org.apache.maven.buildcache.xml.config.DirScanConfig; import org.apache.maven.buildcache.xml.config.TagExclude; import org.apache.maven.buildcache.xml.config.TagScanConfig; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * PluginScanConfigImpl @@ -34,17 +34,20 @@ public class PluginScanConfigImpl implements PluginScanConfig { private final DirScanConfig dto; - public PluginScanConfigImpl(DirScanConfig scanConfig) { + public PluginScanConfigImpl(@Nullable DirScanConfig scanConfig) { this.dto = scanConfig; } @Override public boolean isSkip() { - return Strings.CS.equals(dto.getMode(), "skip"); + return dto != null && Strings.CS.equals(dto.getMode(), "skip"); } @Override public boolean accept(String tagName) { + if (dto == null) { + return false; + } // include or exclude is a choice element, could be only obe property set //noinspection ConstantConditions @@ -65,7 +68,7 @@ private boolean contains(List excludes, String tagName) { return false; } - @Nonnull + @NonNull @Override public PluginScanConfig mergeWith(final PluginScanConfig overrideConfig) { if (dto == null) { @@ -97,17 +100,19 @@ public PluginScanConfig mergeWith(final PluginScanConfig overrideConfig) { return new PluginScanConfigImpl(merged); } - @Nonnull + @NonNull public ScanConfigProperties getTagScanProperties(String tagName) { ScanConfigProperties scanProperties = findTagScanProperties(tagName); return scanProperties != null ? scanProperties : defaultScanConfig(); } + @Nullable @Override public DirScanConfig dto() { return dto; } + @Nullable private ScanConfigProperties findTagScanProperties(String tagName) { ScanConfigProperties scanConfigProperties = findConfigByName(tagName, dto.getIncludes()); if (scanConfigProperties == null) { @@ -116,6 +121,7 @@ private ScanConfigProperties findTagScanProperties(String tagName) { return scanConfigProperties; } + @Nullable private ScanConfigProperties findConfigByName(String tagName, List configs) { if (configs == null) { return null; diff --git a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepository.java b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepository.java index b2fafc50..e727c673 100644 --- a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepository.java +++ b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepository.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; - import java.io.IOException; import java.nio.file.Path; import java.util.Optional; @@ -27,6 +25,8 @@ import org.apache.maven.buildcache.xml.Build; import org.apache.maven.buildcache.xml.build.Artifact; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * Remote cache repository. @@ -43,9 +43,9 @@ public interface RemoteCacheRepository extends CacheRepository { */ boolean getArtifactContent(CacheContext context, Artifact artifact, Path target) throws IOException; - @Nonnull + @Nullable String getResourceUrl(CacheContext context, String filename); - @Nonnull + @NonNull Optional findBaselineBuild(MavenProject project); } diff --git a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java index 8d884cd7..408e567a 100644 --- a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java +++ b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryImpl.java @@ -18,7 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; import javax.inject.Inject; import javax.inject.Named; @@ -55,6 +54,8 @@ import org.eclipse.aether.spi.connector.transport.PutTask; import org.eclipse.aether.spi.connector.transport.Transporter; import org.eclipse.aether.spi.connector.transport.TransporterProvider; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -105,7 +106,7 @@ public void close() throws IOException { } } - @Nonnull + @NonNull @Override public Optional findBuild(CacheContext context) throws IOException { final String resourceUrl = getResourceUrl(context, BUILDINFO_XML); @@ -147,8 +148,8 @@ public void saveArtifactFile(CacheResult cacheResult, org.apache.maven.artifact. * * @return null or content */ - @Nonnull - public Optional getResourceContent(String url) { + @NonNull + public Optional getResourceContent(@Nullable String url) { String fullUrl = getFullUrl(url); try { LOGGER.info("Downloading {}", fullUrl); @@ -201,7 +202,7 @@ private void logNotFound(String fullUrl, Exception e) { } } - public boolean getResourceContent(String url, Path target) { + public boolean getResourceContent(@Nullable String url, Path target) { try { LOGGER.info("Downloading {}", getFullUrl(url)); GetTask task = new GetTask(new URI(url)).setDataFile(target.toFile()); @@ -213,7 +214,7 @@ public boolean getResourceContent(String url, Path target) { } } - @Nonnull + @Nullable @Override public String getResourceUrl(CacheContext context, String filename) { return getResourceUrl( @@ -228,7 +229,7 @@ private String getResourceUrl(String filename, String groupId, String artifactId + filename; } - private void putToRemoteCache(byte[] bytes, String url) throws IOException { + private void putToRemoteCache(byte[] bytes, @Nullable String url) throws IOException { Path tmp = Files.createTempFile("mbce-", ".tmp"); try { Files.write(tmp, bytes); @@ -243,7 +244,7 @@ private void putToRemoteCache(byte[] bytes, String url) throws IOException { } } - private void putToRemoteCache(File file, String url) throws IOException { + private void putToRemoteCache(File file, @Nullable String url) throws IOException { try { PutTask put = new PutTask(new URI(url)); put.setDataFile(file); @@ -256,7 +257,7 @@ private void putToRemoteCache(File file, String url) throws IOException { private final AtomicReference cacheReportSupplier = new AtomicReference<>(); - @Nonnull + @NonNull @Override public Optional findBaselineBuild(MavenProject project) { Optional> cachedProjectsHolder = findCacheInfo().map(CacheReport::getProjects); @@ -313,7 +314,7 @@ private Optional findCacheInfo() { return report; } - private String getFullUrl(String url) { + private String getFullUrl(@Nullable String url) { return cacheConfig.getUrl() + "/" + url; } } diff --git a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryNoOp.java b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryNoOp.java index e66d0e52..7d52ac9e 100644 --- a/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryNoOp.java +++ b/src/main/java/org/apache/maven/buildcache/RemoteCacheRepositoryNoOp.java @@ -18,7 +18,6 @@ */ package org.apache.maven.buildcache; -import javax.annotation.Nonnull; import javax.inject.Named; import java.io.IOException; @@ -31,12 +30,14 @@ import org.apache.maven.buildcache.xml.report.CacheReport; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; @SessionScoped @Named("noop") public class RemoteCacheRepositoryNoOp implements RemoteCacheRepository { - @Nonnull + @NonNull @Override public Optional findBuild(CacheContext context) throws IOException { return Optional.empty(); @@ -58,12 +59,13 @@ public boolean getArtifactContent( return false; } + @Nullable @Override public String getResourceUrl(CacheContext context, String filename) { return null; } - @Nonnull + @NonNull @Override public Optional findBaselineBuild(MavenProject project) { return Optional.empty(); diff --git a/src/main/java/org/apache/maven/buildcache/ScanConfigProperties.java b/src/main/java/org/apache/maven/buildcache/ScanConfigProperties.java index d7d07a13..578180a8 100644 --- a/src/main/java/org/apache/maven/buildcache/ScanConfigProperties.java +++ b/src/main/java/org/apache/maven/buildcache/ScanConfigProperties.java @@ -18,6 +18,8 @@ */ package org.apache.maven.buildcache; +import org.jspecify.annotations.Nullable; + /** * ScanConfigProperties */ @@ -26,7 +28,7 @@ public class ScanConfigProperties { private final boolean recursive; private final String glob; - public ScanConfigProperties(boolean recursive, String glob) { + public ScanConfigProperties(boolean recursive, @Nullable String glob) { this.recursive = recursive; this.glob = glob; } @@ -35,6 +37,7 @@ public boolean isRecursive() { return recursive; } + @Nullable public String getGlob() { return glob; } diff --git a/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java b/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java index 4f05eb36..1512b0bf 100644 --- a/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java +++ b/src/main/java/org/apache/maven/buildcache/checksum/MavenProjectInput.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache.checksum; -import javax.annotation.Nonnull; - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -90,6 +88,7 @@ import org.eclipse.aether.resolution.ArtifactRequest; import org.eclipse.aether.resolution.ArtifactResolutionException; import org.eclipse.aether.resolution.ArtifactResult; +import org.jspecify.annotations.NonNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -819,7 +818,7 @@ private SortedMap getMutableDependenciesHashes(String keyPrefix, return result; } - @Nonnull + @NonNull private DigestItem resolveArtifact(final Dependency dependency) throws IOException, ArtifactResolutionException, InvalidVersionSpecificationException { diff --git a/src/main/java/org/apache/maven/buildcache/checksum/WalkKey.java b/src/main/java/org/apache/maven/buildcache/checksum/WalkKey.java index 5dc94635..5f57492a 100644 --- a/src/main/java/org/apache/maven/buildcache/checksum/WalkKey.java +++ b/src/main/java/org/apache/maven/buildcache/checksum/WalkKey.java @@ -20,6 +20,8 @@ import java.nio.file.Path; +import org.jspecify.annotations.Nullable; + /** * WalkKey */ @@ -36,7 +38,7 @@ public WalkKey(Path normalized, String glob, boolean recursive) { } @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (this == o) { return true; } diff --git a/src/main/java/org/apache/maven/buildcache/xml/CacheConfig.java b/src/main/java/org/apache/maven/buildcache/xml/CacheConfig.java index 452dcfb7..b74b2903 100644 --- a/src/main/java/org/apache/maven/buildcache/xml/CacheConfig.java +++ b/src/main/java/org/apache/maven/buildcache/xml/CacheConfig.java @@ -18,9 +18,6 @@ */ package org.apache.maven.buildcache.xml; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - import java.util.List; import java.util.regex.Pattern; @@ -35,27 +32,29 @@ import org.apache.maven.model.Plugin; import org.apache.maven.model.PluginExecution; import org.apache.maven.plugin.MojoExecution; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; /** * A java interface to the information configured in the maven-build-cache-config.xml file */ public interface CacheConfig { - @Nonnull + @NonNull CacheState initialize(); - @Nonnull + @NonNull List getTrackedProperties(MojoExecution mojoExecution); boolean isLogAllProperties(MojoExecution mojoExecution); - @Nonnull + @NonNull List getLoggedProperties(MojoExecution mojoExecution); - @Nonnull + @NonNull List getNologProperties(MojoExecution mojoExecution); - @Nonnull + @NonNull List getEffectivePomExcludeProperties(Plugin plugin); boolean isPluginDependenciesExcluded(Plugin plugin); @@ -67,25 +66,26 @@ public interface CacheConfig { String getDefaultGlob(); - @Nonnull + @NonNull List getGlobalIncludePaths(); - @Nonnull + @NonNull List getGlobalExcludePaths(); - @Nonnull + @NonNull PluginScanConfig getPluginDirScanConfig(Plugin plugin); - @Nonnull + @NonNull PluginScanConfig getExecutionDirScanConfig(Plugin plugin, PluginExecution exec); - @Nonnull + @NonNull HashFactory getHashFactory(); boolean isForcedExecution(MojoExecution execution); String getId(); + @Nullable String getUrl(); String getTransport(); @@ -104,6 +104,7 @@ public interface CacheConfig { int getMaxLocalBuildsCached(); + @Nullable String getLocalRepositoryLocation(); List getAttachedOutputs(); @@ -116,11 +117,12 @@ public interface CacheConfig { boolean canIgnore(MojoExecution mojoExecution); - @Nonnull + @NonNull List getExcludePatterns(); boolean isBaselineDiffEnabled(); + @Nullable String getBaselineCacheUrl(); /** @@ -143,6 +145,7 @@ public interface CacheConfig { */ boolean isRestoreOnDiskArtifacts(); + @Nullable String getAlwaysRunPlugins(); /** diff --git a/src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java b/src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java index 7d7b91ef..daed66be 100644 --- a/src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java +++ b/src/main/java/org/apache/maven/buildcache/xml/CacheConfigImpl.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache.xml; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Named; import javax.inject.Provider; @@ -68,6 +66,8 @@ import org.apache.maven.model.PluginExecution; import org.apache.maven.plugin.MojoExecution; import org.apache.maven.rtinfo.RuntimeInformation; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -132,7 +132,7 @@ public CacheConfigImpl(XmlService xmlService, Provider providerSes this.rtInfo = rtInfo; } - @Nonnull + @NonNull @Override public CacheState initialize() { if (state == null) { @@ -225,7 +225,7 @@ private void fillWithDefaults(CacheConfig cacheConfig) { } } - @Nonnull + @NonNull @Override public List getTrackedProperties(MojoExecution mojoExecution) { checkInitializedState(); @@ -248,6 +248,7 @@ public boolean isLogAllProperties(MojoExecution mojoExecution) { && cacheConfig.getExecutionControl().getReconcile().isLogAllProperties(); } + @Nullable private GoalReconciliation findReconciliationConfig(MojoExecution mojoExecution) { if (cacheConfig.getExecutionControl() == null) { return null; @@ -272,7 +273,7 @@ private GoalReconciliation findReconciliationConfig(MojoExecution mojoExecution) return null; } - @Nonnull + @NonNull @Override public List getLoggedProperties(MojoExecution mojoExecution) { checkInitializedState(); @@ -285,7 +286,7 @@ public List getLoggedProperties(MojoExecution mojoExecution) { } } - @Nonnull + @NonNull @Override public List getNologProperties(MojoExecution mojoExecution) { checkInitializedState(); @@ -297,7 +298,7 @@ public List getNologProperties(MojoExecution mojoExecution) { } } - @Nonnull + @NonNull @Override public List getEffectivePomExcludeProperties(Plugin plugin) { checkInitializedState(); @@ -327,6 +328,7 @@ public MultiModule getMultiModule() { return cacheConfig.getConfiguration().getMultiModule(); } + @Nullable private PluginConfigurationScan findPluginScanConfig(Plugin plugin) { if (cacheConfig.getInput() == null) { return null; @@ -348,7 +350,7 @@ private boolean isPluginMatch(Plugin plugin, CoordinatesBase pluginConfig) { || Strings.CS.equals(pluginConfig.getGroupId(), plugin.getGroupId())); } - @Nonnull + @NonNull @Override public PluginScanConfig getPluginDirScanConfig(Plugin plugin) { checkInitializedState(); @@ -360,7 +362,7 @@ public PluginScanConfig getPluginDirScanConfig(Plugin plugin) { return new PluginScanConfigImpl(pluginConfig.getDirScan()); } - @Nonnull + @NonNull @Override public PluginScanConfig getExecutionDirScanConfig(Plugin plugin, PluginExecution exec) { checkInitializedState(); @@ -377,6 +379,7 @@ public PluginScanConfig getExecutionDirScanConfig(Plugin plugin, PluginExecution return new DefaultPluginScanConfig(); } + @Nullable private ExecutionConfigurationScan findExecutionScanConfig( PluginExecution execution, List scanConfigs) { for (ExecutionConfigurationScan executionScanConfig : scanConfigs) { @@ -399,21 +402,21 @@ public String getDefaultGlob() { return StringUtils.trim(cacheConfig.getInput().getGlobal().getGlob()); } - @Nonnull + @NonNull @Override public List getGlobalIncludePaths() { checkInitializedState(); return cacheConfig.getInput().getGlobal().getIncludes(); } - @Nonnull + @NonNull @Override public List getGlobalExcludePaths() { checkInitializedState(); return cacheConfig.getInput().getGlobal().getExcludes(); } - @Nonnull + @NonNull @Override public HashFactory getHashFactory() { checkInitializedState(); @@ -507,6 +510,7 @@ public boolean isBaselineDiffEnabled() { return getProperty(BASELINE_BUILD_URL_PROPERTY_NAME, null) != null; } + @Nullable @Override public String getBaselineCacheUrl() { return getProperty(BASELINE_BUILD_URL_PROPERTY_NAME, null); @@ -527,6 +531,7 @@ public boolean isRestoreOnDiskArtifacts() { return getProperty(RESTORE_ON_DISK_ARTIFACTS_PROPERTY_NAME, true); } + @Nullable @Override public String getAlwaysRunPlugins() { return getProperty(ALWAYS_RUN_PLUGINS, null); @@ -553,6 +558,7 @@ public String getId() { return getProperty(REMOTE_SERVER_ID_PROPERTY_NAME, getRemote().getId()); } + @Nullable @Override public String getUrl() { checkInitializedState(); @@ -571,6 +577,7 @@ public int getMaxLocalBuildsCached() { return getLocal().getMaxBuildsCached(); } + @Nullable @Override public String getLocalRepositoryLocation() { checkInitializedState(); @@ -613,7 +620,7 @@ public boolean calculateProjectVersionChecksum() { } } - @Nonnull + @NonNull @Override public List getExcludePatterns() { checkInitializedState(); @@ -649,7 +656,8 @@ private void checkInitializedState() { } } - private String getProperty(String key, String defaultValue) { + @Nullable + private String getProperty(String key, @Nullable String defaultValue) { MavenSession session = providerSession.get(); String value = session.getUserProperties().getProperty(key); if (value == null) { diff --git a/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java b/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java index 3c8b3a7c..171fd0a0 100644 --- a/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java +++ b/src/main/java/org/apache/maven/buildcache/xml/DtoUtils.java @@ -18,8 +18,6 @@ */ package org.apache.maven.buildcache.xml; -import javax.annotation.Nonnull; - import java.util.List; import org.apache.commons.lang3.ArrayUtils; @@ -31,6 +29,8 @@ import org.apache.maven.buildcache.xml.build.PropertyValue; import org.apache.maven.buildcache.xml.config.TrackedProperty; import org.apache.maven.model.Dependency; +import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -109,7 +109,11 @@ public static Dependency createDependency(Artifact artifact) { } public static void addProperty( - CompletedExecution execution, String propertyName, Object value, String baseDirPath, boolean tracked) { + CompletedExecution execution, + String propertyName, + @Nullable Object value, + String baseDirPath, + boolean tracked) { final PropertyValue valueType = new PropertyValue(); valueType.setName(propertyName); if (value != null && value.getClass().isArray()) { @@ -129,7 +133,7 @@ public static void addProperty( * @return true if all tracked properties are listed in the cache record */ public static boolean containsAllProperties( - @Nonnull CompletedExecution cachedExecution, List trackedProperties) { + @NonNull CompletedExecution cachedExecution, @Nullable List trackedProperties) { if (trackedProperties == null || trackedProperties.isEmpty()) { return true; } diff --git a/src/test/java/org/apache/maven/buildcache/util/LogFileUtils.java b/src/test/java/org/apache/maven/buildcache/util/LogFileUtils.java index 6a819480..7d570bb3 100644 --- a/src/test/java/org/apache/maven/buildcache/util/LogFileUtils.java +++ b/src/test/java/org/apache/maven/buildcache/util/LogFileUtils.java @@ -25,6 +25,7 @@ import org.apache.maven.it.VerificationException; import org.apache.maven.it.Verifier; +import org.jspecify.annotations.Nullable; /** * Utils to inspect the generated log file @@ -42,6 +43,7 @@ private LogFileUtils() { * @return the first matching string or null * @throws VerificationException */ + @Nullable public static String findFirstLineContainingTextsInLogs(final Verifier verifier, final String... texts) throws VerificationException { List lines = verifier.loadFile(verifier.getBasedir(), verifier.getLogFileName(), false);