[java-mvn-enforcer] 02/02: Start cleaning up non-null ness

Rod Widdowson rdw at steadingsoftware.com
Tue Aug 22 09:20:37 UTC 2023


This is an automated email from the git hooks/post-receive script.

rdw pushed a commit to branch main
in repository java-mvn-enforcer.

View the commit online:
http://git.shibboleth.net/view/?p=java-mvn-enforcer.git;a=commit;h=994d342e1c5fea19ae7744b3499d763afb3de8f9

commit 994d342e1c5fea19ae7744b3499d763afb3de8f9
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Wed Jun 28 16:43:34 2023 +0100

    Start cleaning up non-null ness
---
 .../mvn/enforcer/impl/DependencyChecker.java       |  2 +-
 .../mvn/enforcer/impl/EnforcerLogger.java          |  6 ++-
 .../shibboleth/mvn/enforcer/impl/GPGKeyRing.java   |  7 ++-
 .../shibboleth/mvn/enforcer/impl/JarEnforcer.java  | 42 ++++++++++-------
 .../shibboleth/mvn/enforcer/impl/M2SigChecker.java | 11 +++--
 .../shibboleth/mvn/enforcer/impl/MavenLoader.java  |  4 +-
 .../shibboleth/mvn/enforcer/impl/ParsedPom.java    | 55 ++++++++++++++--------
 .../shibboleth/mvn/enforcer/impl/PomArtifact.java  | 16 +++----
 .../mvn/enforcer/impl/ProjectPomContext.java       | 37 ++++++++++-----
 .../cli/impl/ListKeysCommandLineArguments.java     |  3 +-
 10 files changed, 113 insertions(+), 70 deletions(-)

diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
index b8fdb43..83d7667 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/DependencyChecker.java
@@ -285,7 +285,7 @@ public class DependencyChecker {
             for (final Pair<DependencyPomArtifact,DependencyPomArtifact> poms : parentPom.getDuplicates()) {
                 final DependencyPomArtifact f = poms.getFirst();
                 final DependencyPomArtifact s = poms.getSecond();
-
+                assert f!=null && s !=null;
                 report.format("%-30s: %10s (from %s) and %s (from %s)\n", f.getMapKey(),
                               f.getVersion(), f.getSourcePomFilename(),
                               s.getVersion(), s.getSourcePomFilename());
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/EnforcerLogger.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/EnforcerLogger.java
index 146c245..cd3a23c 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/EnforcerLogger.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/EnforcerLogger.java
@@ -19,9 +19,11 @@
 
 import java.util.regex.Pattern;
 
+import javax.annotation.Nonnull;
+import org.slf4j.LoggerFactory;
+
 import org.apache.maven.plugin.logging.Log;
 import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.slf4j.Marker;
 
 
@@ -391,7 +393,7 @@ public final class EnforcerLogger implements Logger {
      * @param clazz what to log
      * @return a logger
      */
-    public static Logger getLogger(final Class<?> clazz) {
+    @Nonnull public static Logger getLogger(final Class<?> clazz) {
         if (encapsulatedLogger != null) {
             return encapsulatedLogger;
         }
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/GPGKeyRing.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/GPGKeyRing.java
index 76c94cc..ebda222 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/GPGKeyRing.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/GPGKeyRing.java
@@ -32,7 +32,6 @@ import java.util.Iterator;
 import java.util.Set;
 
 import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
 import javax.annotation.concurrent.NotThreadSafe;
 
 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
@@ -60,7 +59,7 @@ import org.slf4j.Logger;
     @Nonnull private final Logger log = EnforcerLogger.getLogger(GPGKeyRing.class);
     
     /** The key store backup. */
-    @Nullable private Path backup;
+    //@Nullable private Path backup;
 
     /** KeyRing. */
     @Nonnull private final PGPPublicKeyRingCollection keyRings;
@@ -129,7 +128,7 @@ import org.slf4j.Logger;
      * {@link PGPPublicKeyRingCollection#PGPPublicKeyRingCollection(InputStream,
      *   org.bouncycastle.openpgp.operator.KeyFingerPrintCalculator)}
      */
-    private static PGPPublicKeyRingCollection loadRingFromAsc(final InputStream in) throws IOException {
+    @Nonnull private static PGPPublicKeyRingCollection loadRingFromAsc(@Nonnull final InputStream in) throws IOException {
         try (final InputStream decoded = PGPUtil.getDecoderStream(in)) {
             final ArrayList<PGPPublicKeyRing> listr = new ArrayList<>();
 
@@ -182,7 +181,7 @@ import org.slf4j.Logger;
      * @return the Signature.
      * @throws IOException if there is a problem reading the file of it it doesn't represent a signature
      */
-    protected static Signature signatureOf(final InputStream stream) throws IOException {
+    protected static Signature signatureOf(@Nonnull final InputStream stream) throws IOException {
         return new Signature(stream);
     }
 
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
index 1843284..4db5cee 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/JarEnforcer.java
@@ -33,6 +33,7 @@ import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
@@ -65,17 +66,17 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      */
     
     /** Relative path of the parent pom.*/
-    private String parentPomDir=".";
+    @Nonnull private String parentPomDir=".";
     /** Space separated list of tgz files. */
-    private String tgzFiles="";
+    @Nonnull private String tgzFiles="";
     /** Space separated list of tgz files. */
-    private String zipFiles="";
+    @Nonnull private String zipFiles="";
     /** Where to get external data. Group */
-    private String dataGroupId = "";
+    @Nonnull private String dataGroupId = "";
     /** Where to get external data. ArtifactName*/
-    private String dataArtifactId = "";
+    @Nonnull private String dataArtifactId = "";
     /** Where to get external data. Version*/
-    private String dataVersion = "";
+    @Nonnull private String dataVersion = "";
     /** The key rings for the data .*/
     private String dataKeyRing;
     /** Will we check that all jars we distribute jars have valid signatures? */
@@ -106,10 +107,10 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
     private boolean multipleJarVersionsFatal = true;
 
     /** The list of things which get added to real versions. */
-    private String versionExtensions = "-SNAPSHOT -GA -jre -empty-to-avoid-conflict-with-guava";
+    @Nonnull private String versionExtensions = "-SNAPSHOT -GA -jre -empty-to-avoid-conflict-with-guava";
 
     /** The list of classifiers we know about*/
-    private String classifiers = "";
+    @Nonnull private String classifiers = "";
 
     /** Our artifact resolver. */
     private ArtifactResolver artifactResolver;
@@ -166,7 +167,7 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      * {@inheritDoc}
      */
     @Override
-    public void execute(final EnforcerRuleHelper helper) throws EnforcerRuleException {
+    public void execute(@Nonnull final EnforcerRuleHelper helper) throws EnforcerRuleException {
         EnforcerLogger.setMavenLogger(helper.getLog());
         log = EnforcerLogger.getLogger(JarEnforcer.class);
 
@@ -245,7 +246,7 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      * @return A class loader built from the downloaded artifact
      * @throws Exception upon an error
      */
-    private ClassLoader getGPGDataClassLoader() throws Exception {
+    @Nonnull private ClassLoader getGPGDataClassLoader() throws Exception {
 
         final File pom = downloadArtifact(dataGroupId, dataArtifactId, dataVersion, "", "pom");
         if (pom == null || !pom.exists()) {
@@ -288,10 +289,15 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      * @return if this worked (or was suppressed)
      * @throws Exception  is resolution fails
      */
-    private boolean performM2Check(final ProjectPomContext pomContext) throws Exception {
+    private boolean performM2Check(@Nonnull final ProjectPomContext pomContext) throws Exception {
         boolean m2Result = true;
         if (checkM2) {
-            final Path resolvedPom = downloadArtifact(dataGroupId, dataArtifactId, dataVersion, "", "jar").toPath();
+            final File resolvePomFile = downloadArtifact(dataGroupId, dataArtifactId, dataVersion, "", "jar");
+            if (resolvePomFile == null) {
+                log.error("Could not ressolve maven-enforcer-data");
+                return false;
+            }
+            final Path resolvedPom = resolvePomFile.toPath();
             // Resolved pom path is <pathTpM2Repo>/group1/group2/..../artifact/version/pomfilename
             log.debug("Resolved Pom = {}", resolvedPom);
             Path root = resolvedPom.getParent().getParent().getParent(); // strip version, artifact
@@ -324,8 +330,8 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      * @throws IOException if a file was not found or archive handling failed
      * @throws EnforcerRuleException if we were doing an invalid SNAPSHOT/nonSNAPSHOT test
      */
-    private boolean performSignatureCheck(final ProjectPomContext pomContext,
-                                          final List<Path> tgzPaths, final List<Path> zipPaths) throws IOException, EnforcerRuleException {
+    private boolean performSignatureCheck(@Nonnull final ProjectPomContext pomContext,
+            @Nonnull final List<Path> tgzPaths, @Nonnull final List<Path> zipPaths) throws IOException, EnforcerRuleException {
         boolean signatureResult = true;
         if (checkSignatures) {
             if (isGPGDataASnapshot() && !pomContext.isSnapShot()) {
@@ -365,8 +371,8 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
      * @return if this worked (or was suppressed)
      * @throws IOException if a file was not found or archive handling failed
      */
-    private boolean performDependencyCheck(final ProjectPomContext pomContext,
-                                           final List<Path> tgzPaths, final List<Path> zipPaths) throws IOException {
+    private boolean performDependencyCheck(@Nonnull final ProjectPomContext pomContext,
+            @Nonnull final List<Path> tgzPaths, @Nonnull final List<Path> zipPaths) throws IOException {
         boolean depdendencyResult = true;
         if (checkDependencies) {
             try (final PrintWriter report =
@@ -418,7 +424,7 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
     }
 
     @Override
-    public boolean isResultValid(final EnforcerRule a) {
+    public boolean isResultValid(@Nonnull final EnforcerRule a) {
         return false;
     }
 
@@ -453,7 +459,7 @@ public class JarEnforcer implements EnforcerRule, MavenLoader{
     }
 
     /** {@inheritDoc} */
-    public Path downloadArtifact(final PomArtifact artifact, final String type) throws Exception {
+    @Nullable public Path downloadArtifact(final PomArtifact artifact, final String type) throws Exception {
         final File file = downloadArtifact(artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion(), artifact.getClassifier(), type);
         if (file == null) {
             return null;
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/M2SigChecker.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/M2SigChecker.java
index 2ad5e4a..ad41c21 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/M2SigChecker.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/M2SigChecker.java
@@ -125,13 +125,14 @@ public class M2SigChecker extends BaseSigChecker {
                 return null;
             }
             final String artifactId = artifactDir.getFileName().toString();
+            assert artifactId!=null;
             final Path groupDir = artifactDir.getParent();
             if (groupDir  == null) {
                 return null;
             }
             final String version = versionDir.getFileName().toString();
             final String fileName = path.getFileName().toString();
-            final String classifier;
+            @Nonnull final String classifier;
             if (version.endsWith("SNAPSHOT")) {
                 // The version garnish isn't real version garnish:
                 //   org/opensaml/opensaml-core/4.2.0-SNAPSHOT/opensaml-core-4.2.0-20220109.011317-203
@@ -140,12 +141,14 @@ public class M2SigChecker extends BaseSigChecker {
             } else if (fileName.length() > artifactId.length() + 1 + version.length() + 4) {
                 // Need to be able to handle classifier
                 //   org/sonatype/sisu/sisu-guice/2.1.7/sisu-guice-2.1.7-noapp.jar
-                classifier = fileName.substring(
+                String s = fileName.substring(
                         artifactId.length()     // "sisu-guice"
                         + 1                     // "-"
                         + version.length()      // "2.1.7"
                         + 1,                    // "-"
                         fileName.length() - 4); // ".jar"
+                assert s != null;
+                classifier =s;
             } else {
                 // usual version:
                 //   org/hsqldb/hrsqldb/2.5.1/hsqldb-2.5.1.jar
@@ -159,7 +162,9 @@ public class M2SigChecker extends BaseSigChecker {
             if (buf.length() > 0) {
                 buf.deleteCharAt(buf.length()-1);
             }
-            return new PomArtifact(buf.toString(), artifactId, version, classifier);
+            final String group = buf.toString();
+            assert group != null;
+            return new PomArtifact(group, artifactId, version, classifier);
         }
     }
 
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/MavenLoader.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/MavenLoader.java
index bbf35d0..16c41ce 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/MavenLoader.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/MavenLoader.java
@@ -19,6 +19,8 @@ package net.shibboleth.mvn.enforcer.impl;
 
 import java.nio.file.Path;
 
+import javax.annotation.Nullable;
+
 /**
  * Abstraction of a way to get hold of a maven artifact.
  */
@@ -30,5 +32,5 @@ public interface MavenLoader {
      * @return the address of the artifact
      * @throws Exception on an error
      */
-    Path downloadArtifact(PomArtifact artifact, String type) throws Exception;
+    @Nullable Path downloadArtifact(PomArtifact artifact, String type) throws Exception;
 }
\ No newline at end of file
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/ParsedPom.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/ParsedPom.java
index 5cd1ec9..705d37a 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/ParsedPom.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/ParsedPom.java
@@ -51,31 +51,33 @@ import net.shibboleth.utilities.java.support.xml.XMLParserException;
 public class ParsedPom {
     
     /** Log. */
-    private final Logger log;
+    @Nonnull private final Logger log;
     
     /** Compile dependencies - what we care about. */
-    private final Map<String, DependencyPomArtifact> compileDependencies = new HashMap<>();
+    @Nonnull private final Map<String, DependencyPomArtifact> compileDependencies = new HashMap<>();
     
     /** BOM dependencies. */
-    private final Map<String, DependencyPomArtifact> bomDependencies = new HashMap<>();
+    @Nonnull private final Map<String, DependencyPomArtifact> bomDependencies = new HashMap<>();
 
     /** Rum time dependencies. */
-    private final Map<String, DependencyPomArtifact> runtimeDependencies = new HashMap<>();
+    @Nonnull private final Map<String, DependencyPomArtifact> runtimeDependencies = new HashMap<>();
 
     /** Duplicate dependencies. */
-    private final List<Pair<DependencyPomArtifact,DependencyPomArtifact>> duplicates = new ArrayList<>();
+    @Nonnull private final List<Pair<DependencyPomArtifact,DependencyPomArtifact>> duplicates = new ArrayList<>();
 
     /** Generated artifacts. */
-    private final Set<DependencyPomArtifact> generated = new HashSet<>();
+    @Nonnull private final Set<DependencyPomArtifact> generated = new HashSet<>();
 
     /** Inherits dependencies. */
-    private final Map<String, DependencyPomArtifact> managedDependencies;
+    @Nonnull private final Map<String, DependencyPomArtifact> managedDependencies;
     
     /** Which the POM.*/
     @Nonnull private final String sourcePomInfo;
     
     /** Properties. */
-    private final Properties properties = new Properties();
+    @Nonnull private final Properties properties = new Properties();
+    
+    @Nonnull static final String UNSPECIFIED_GROUP = "unspecified-group";
     
     /** Parent Pom .*/
     private DependencyPomArtifact parent;
@@ -130,8 +132,14 @@ public class ParsedPom {
             return;
         } else if (parentPomProperties.isEmpty()) {
             if (parent != null) {
-                final ParsedPom parsedParent = new ParsedPom(parsers, pomLoader, 
-                        pomLoader.downloadArtifact(parent, "pom"), parent.toString(), theLog, new Properties(), Collections.emptyMap());
+                final Path parentPomPath = pomLoader.downloadArtifact(parent, "pom");
+                if (parentPomPath == null) {
+                    throw new XMLParserException("Could not resolve parent pom");
+                }
+                final String parentAsString = parent.toString();
+                assert parentAsString!=null;
+                final ParsedPom parsedParent = new ParsedPom(parsers, pomLoader, parentPomPath,
+                        parentAsString, theLog, new Properties(), Collections.emptyMap());
                 final Properties props = parsedParent.getProperties();
                 for (final Object p:props.keySet()) {
                     String pName = (String) p;
@@ -161,7 +169,13 @@ public class ParsedPom {
             }
         }
         for (final DependencyPomArtifact bom : bomDependencies.values()) {
-            final ParsedPom parsedBom = new ParsedPom(parsers, pomLoader, pomLoader.downloadArtifact(bom, "pom"), bom.toString(), 
+            final Path bomAsPath = pomLoader.downloadArtifact(bom, "pom");
+            if (bomAsPath == null) {
+                throw new XMLParserException("Could not resolve bom");
+            }
+            final String bomAsString = bom.toString();
+            assert bomAsString!=null;
+            final ParsedPom parsedBom = new ParsedPom(parsers, pomLoader, bomAsPath, bomAsString, 
                     log, new Properties(), Collections.emptyMap());
             for (DependencyPomArtifact dep : parsedBom.getManagedDependencies().values()) {
                 addWithCheck(dep, managedDependencies);
@@ -177,6 +191,7 @@ public class ParsedPom {
         for (final Element modules: ElementSupport.getChildElementsByTagName(el, "modules")) {
             for (final Element module: ElementSupport.getChildElementsByTagName(modules, "module")) {
                 final Path modulePath = pom.getParent().resolve(module.getTextContent()).resolve("pom.xml");
+                assert modulePath!=null;
                 if (Files.exists(modulePath)) {
                     final ParsedPom modulePom = new ParsedPom(parsers, pomLoader, modulePath,
                             module.getTextContent(), log, properties, managedDependencies);
@@ -222,7 +237,9 @@ public class ParsedPom {
             remainingContents = remainingContents.substring(endIndex+1);
         }
         contents.append(remainingContents);
-        return contents.toString();
+        final String result = contents.toString();
+        assert result != null;
+        return result;
     }
 
     /** Parse the dependency part of the pom.
@@ -317,6 +334,7 @@ public class ParsedPom {
     /** Returns the Compile Dependencies.
      * @return Returns the Compile Dependencies.
      */
+    @SuppressWarnings("null")
     @Nonnull public Collection<DependencyPomArtifact> getCompileDependencies() {
         return compileDependencies.values();
     }
@@ -324,6 +342,7 @@ public class ParsedPom {
     /** Returns the Runtime Dependencies.
      * @return Returns the Runtime Dependencies.
      */
+    @SuppressWarnings("null")
     @Nonnull public Collection<DependencyPomArtifact> getRuntimeDependencies() {
         return runtimeDependencies.values();
     }
@@ -395,17 +414,15 @@ public class ParsedPom {
          * @param parentArtifact to inherit from
          */
         public DependencyPomArtifact(final Element item, final @Nullable DependencyPomArtifact parentArtifact) {
-            super(null, null, null);
+            super("", "", "");
             final List<Element> grps  = ElementSupport.getChildElementsByTagName(item, "groupId");
             if (grps.size() > 0) {
                 groupId = getElementContent(grps.get(0));
             } else if (parentArtifact != null) {
                 groupId = parentArtifact.getGroupId();
             } else {
-                if (grps.size() == 0) {
-                    log.error("{}: <groupId> should exist in dependency", sourcePomInfo);
-                }
-                groupId = null;
+                log.error("{}: <groupId> should exist in dependency", sourcePomInfo);
+                groupId = UNSPECIFIED_GROUP;
             }
             
             final List<Element> arts  = ElementSupport.getChildElementsByTagName(item, "artifactId");
@@ -466,7 +483,7 @@ public class ParsedPom {
          * @param ver the <version>
          * @param clssfr the <classifier>
          */
-        private DependencyPomArtifact(final String group, final String id, final String ver, final String clssfr) {
+        private DependencyPomArtifact(@Nonnull final String group, @Nonnull final String id, @Nonnull final String ver, @Nonnull final String clssfr) {
             super(group, id, ver, clssfr);
         }
 
@@ -488,7 +505,7 @@ public class ParsedPom {
          * @param ver the version
          * @return an amended artifact.
          */
-        public final DependencyPomArtifact withVersion(String ver) {
+        public final DependencyPomArtifact withVersion(@Nonnull String ver) {
             return new DependencyPomArtifact(groupId, artifactId, ver, classifier);
         }
 
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/PomArtifact.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/PomArtifact.java
index 498fa71..5aa171b 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/PomArtifact.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/PomArtifact.java
@@ -44,7 +44,7 @@ public class PomArtifact implements Comparable<PomArtifact> {
      * @param group the <groupId>
      * @param ver the <version>
      */
-    public PomArtifact(final String  group, final String id, final String ver) {
+    public PomArtifact(@Nonnull final String group, @Nonnull final String id, @Nonnull final String ver) {
         this(group, id, ver, "");
     }
 
@@ -56,7 +56,7 @@ public class PomArtifact implements Comparable<PomArtifact> {
      * @param ver the <version>
      * @param clssfr the <classifier>
      */
-    public PomArtifact(final String  group, final String id, final String ver, final String clssfr) {
+    public PomArtifact(@Nonnull final String group, @Nonnull final String id, @Nonnull final String ver, @Nonnull final String clssfr) {
         artifactId = id;
         groupId = group;
         version = ver;
@@ -67,35 +67,35 @@ public class PomArtifact implements Comparable<PomArtifact> {
     /**
      * @return Returns the groupId.
      */
-    public final String getGroupId() {
+    @Nonnull public final String getGroupId() {
         return groupId;
     }
     
     /**
      * @return Returns the artifactId.
      */
-    public final String getArtifactId() {
+    @Nonnull public final String getArtifactId() {
         return artifactId;
     }
 
     /**
      * @return Returns the version.
      */
-    public final String getVersion() {
+    @Nonnull public final String getVersion() {
         return version;
     }
 
     /**
      * @return Returns the classifier.
      */
-    public final String getClassifier() {
+    @Nonnull public final String getClassifier() {
         return classifier;
     }
     
     /** Get the key we use in out maps.
      * @return the key - derives from groupId and EntityId 
      */
-    public final String getMapKey() {
+    @Nonnull public final String getMapKey() {
         return getGroupId()+"+"+getArtifactId();
     }
     
@@ -122,7 +122,7 @@ public class PomArtifact implements Comparable<PomArtifact> {
     }
     
     /** {@inheritDoc} */
-    public final String toString() {
+    @Nonnull public final String toString() {
         return artifactId + "-" + classifier + version;
     }
 
diff --git a/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java b/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
index 14947f0..f324696 100644
--- a/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
+++ b/src/main/java/net/shibboleth/mvn/enforcer/impl/ProjectPomContext.java
@@ -33,6 +33,7 @@ import java.util.Map.Entry;
 import java.util.Properties;
 
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
 
@@ -46,19 +47,19 @@ import net.shibboleth.utilities.java.support.xml.ParserPool;
 public final class ProjectPomContext implements AutoCloseable {
 
     /** Where the keyrings live when on the classpath. */
-    public final static String CLASSPATH_ROOT = "net/shibboleth/mvn/enforcer/data/";
+    @Nonnull public final static String CLASSPATH_ROOT = "net/shibboleth/mvn/enforcer/data/";
 
     /** Our log. */
-    private final Logger log;
+    @Nonnull private final Logger log;
 
     /** Parse for us to use. */
-    private final ParserPool parserPool;
+    @Nonnull private final ParserPool parserPool;
     
     /** Work space.  Deleted on exit. */
-    private final Path workingDir;
+    @Nonnull private final Path workingDir;
 
     /** Source of extra data (like signatures. */
-    private final ClassLoader enforcerLoader;
+    @Nonnull private final ClassLoader enforcerLoader;
 
     /** The parsed idp-parent pom. */
     private ParsedPom parentPom;
@@ -70,7 +71,7 @@ public final class ProjectPomContext implements AutoCloseable {
     private boolean isSnapShot;
 
     /** The injected thing that collects maven artifacts.  */
-    private final MavenLoader mavenLoader;
+    @Nonnull private final MavenLoader mavenLoader;
     
     /** The ArtifactId to GroupId mapping. */
     private final Map<String, String> artifactToGroup = new HashMap<>();
@@ -98,7 +99,9 @@ public final class ProjectPomContext implements AutoCloseable {
             @Nonnull final List<String> clsfrs) throws IOException {
         mavenLoader = Constraint.isNotNull(loader, "Loader must not be null");
         log = Constraint.isNotNull(logger, "Logger must not be null");
-        workingDir = Files.createTempDirectory("EnforcerCLI");
+        final Path wd = Files.createTempDirectory("EnforcerCLI");
+        assert wd != null;
+        workingDir = wd;
         enforcerLoader = Constraint.isNotNull(classLoader, "Class Loader must not be null");;
         parserPool = Constraint.isNotNull(pool, "Parse Pool must not be null");
         extensionGarnish = Constraint.isNotNull(extensions, "Extensions must not be null");
@@ -130,7 +133,7 @@ public final class ProjectPomContext implements AutoCloseable {
      * @param id the artifact id.
      * @return the group
      */
-    @Nonnull public String getGroup(final String id) {
+    @Nullable public String getGroup(final String id) {
         final String group = artifactToGroup.get(id);
         if (group == null) {
             log.error("Could not resolve group for {}", id);
@@ -157,7 +160,7 @@ public final class ProjectPomContext implements AutoCloseable {
      * @param pomPath Where the parent pom is.
      * @return true if all worked OK, false otherwise
      */
-    private boolean parsePom(final Path pomPath)  {
+    private boolean parsePom(@Nonnull final Path pomPath)  {
 
         try {
             parentPom = new ParsedPom(parserPool,
@@ -182,6 +185,10 @@ public final class ProjectPomContext implements AutoCloseable {
             log.error("Could not download {}:", parentPom.getParent(), e);
             return false;
         }
+        if (parentPath == null) {
+            log.error("Could not download {}:", parentPom.getParent());
+            return false;
+        }
         try {
             projectParent = new ParsedPom(parserPool, mavenLoader,
                                           parentPath, "parent pom.", log,
@@ -214,7 +221,7 @@ public final class ProjectPomContext implements AutoCloseable {
      * @param pomPath where to load the pom from 
      * @return true if all worked OK, false otherwise
      */
-    public boolean initialize(final Path pomPath)  {
+    public boolean initialize(@Nonnull final Path pomPath)  {
         return parsePom(pomPath) && setupGroupMapping();
     }
 
@@ -304,10 +311,12 @@ public final class ProjectPomContext implements AutoCloseable {
          } else {
              name = inName;
          }
-         String classifier = "";
+         @Nonnull String classifier = "";
          for (final String it: classifiers) {
              if (name.endsWith(it)) {
-                 classifier = it.substring(1);
+                 final String s=it.substring(1);
+                 assert s !=null;
+                 classifier = s;
                  name = name.substring(0, name.length() - it.length());
                  break;
              }
@@ -327,11 +336,13 @@ public final class ProjectPomContext implements AutoCloseable {
              last = base.lastIndexOf("-");
              base = name.substring(0, last);
          }
-         final String group = artifactToGroup.get(base);
+         String group = artifactToGroup.get(base);
          if (group == null) {
              log.error("Could not determine group for {} consider amending artifactMap.properties", inName);
+             group = ParsedPom.UNSPECIFIED_GROUP;
          }
          final String versionExtension = name.substring(last+1);
+         assert versionExtension!=null;
          log.debug("Splitting {}: found {}:{}", inName, base, versionExtension);
          return new PomArtifact(group, base, versionExtension, classifier);
      }
diff --git a/src/test/java/net/shibboleth/mvn/enforcer/cli/impl/ListKeysCommandLineArguments.java b/src/test/java/net/shibboleth/mvn/enforcer/cli/impl/ListKeysCommandLineArguments.java
index d991c83..d958249 100644
--- a/src/test/java/net/shibboleth/mvn/enforcer/cli/impl/ListKeysCommandLineArguments.java
+++ b/src/test/java/net/shibboleth/mvn/enforcer/cli/impl/ListKeysCommandLineArguments.java
@@ -19,6 +19,7 @@ package net.shibboleth.mvn.enforcer.cli.impl;
 import java.io.PrintStream;
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.slf4j.Logger;
@@ -60,7 +61,7 @@ public class ListKeysCommandLineArguments extends AbstractCommandLineArguments {
     }
     
     @Override
-    public synchronized Logger getLog() {
+    @Nonnull public synchronized Logger getLog() {
         if (log == null) {
             log = LoggerFactory.getLogger(ListKeysCommandLineArguments.class);
         }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list