This is an automated email from the ASF dual-hosted git repository.

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-analyser.git


The following commit(s) were added to refs/heads/master by this push:
     new 4f4b084  SLING-10795 : Enforce contract of 
ArtifactDescriptor.getArtifact
4f4b084 is described below

commit 4f4b08414e0bf3b2a8ac71ca5c8e0d1b277e9526
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Thu Sep 9 18:55:01 2021 +0200

    SLING-10795 : Enforce contract of ArtifactDescriptor.getArtifact
---
 .../java/org/apache/sling/feature/scanner/ArtifactDescriptor.java  | 7 +++++--
 .../java/org/apache/sling/feature/scanner/BundleDescriptor.java    | 1 +
 .../java/org/apache/sling/feature/scanner/ContainerDescriptor.java | 3 ++-
 src/main/java/org/apache/sling/feature/scanner/Descriptor.java     | 6 +++++-
 .../java/org/apache/sling/feature/scanner/FeatureDescriptor.java   | 1 +
 .../apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java  | 6 ++++--
 .../apache/sling/feature/scanner/impl/BundleDescriptorImpl.java    | 3 +++
 .../sling/feature/scanner/impl/ContentPackageDescriptor.java       | 1 +
 .../apache/sling/feature/scanner/impl/ContentPackageScanner.java   | 4 +++-
 9 files changed, 25 insertions(+), 7 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java 
b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
index 59bea55..18c7612 100644
--- a/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/ArtifactDescriptor.java
@@ -24,6 +24,8 @@ import org.apache.sling.feature.Artifact;
 /**
  * Information about an artifact.
  *
+ * At a minimumm the descriptor returns the artifact.
+ *
  * Note that this implementation is not synchronized. If multiple threads 
access
  * a descriptor concurrently, and at least one of the threads modifies the
  * descriptor structurally, it must be synchronized externally. However, once a
@@ -34,6 +36,7 @@ public abstract class ArtifactDescriptor extends Descriptor {
     /**
      * Constructor for a new descriptor
      * @param name The name
+     * @throws IllegalArgumentException if name is {@code null}
      */
     protected ArtifactDescriptor(final String name) {
         super(name);
@@ -41,14 +44,14 @@ public abstract class ArtifactDescriptor extends Descriptor 
{
 
     /**
      * If the artifact has a manifest, return it
-     * @return The manifest
+     * @return The manifest or {@code null}
      * @since 2.2.0
      */
     public abstract Manifest getManifest();
 
     /**
      * Get the artifact file
-     * @return The artifact file or <code>null</code> if not present.
+     * @return The artifact URL or {@code null} if not present.
      */
     public abstract URL getArtifactFile();
 
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java 
b/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
index a3eacea..aad85f4 100644
--- a/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/BundleDescriptor.java
@@ -33,6 +33,7 @@ public abstract class BundleDescriptor extends 
ArtifactDescriptor implements Com
     /**
      * Constructor for a new descriptor
      * @param name The name
+     * @throws IllegalArgumentException if name is {@code null}
      */
     protected BundleDescriptor(final String name) {
         super(name);
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/ContainerDescriptor.java 
b/src/main/java/org/apache/sling/feature/scanner/ContainerDescriptor.java
index c5836d8..efebd09 100644
--- a/src/main/java/org/apache/sling/feature/scanner/ContainerDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/ContainerDescriptor.java
@@ -37,8 +37,9 @@ public abstract class ContainerDescriptor extends Descriptor {
     /**
      * Constructor for a new descriptor
      * @param name The name
+     * @throws IllegalArgumentException if name is {@code null}
      */
-    protected ContainerDescriptor(String name) {
+    protected ContainerDescriptor(final String name) {
         super(name);
     }
 
diff --git a/src/main/java/org/apache/sling/feature/scanner/Descriptor.java 
b/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
index 121573a..ceb5066 100644
--- a/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/Descriptor.java
@@ -50,9 +50,13 @@ public abstract class Descriptor  {
     /**
      * Constructor for a new descriptor
      * @param name Name
+     * @throws IllegalArgumentException if name is {@code null}
      */
-    protected Descriptor(String name) {
+    protected Descriptor(final String name) {
         this.name = name;
+        if ( name == null ) {
+            throw new IllegalArgumentException("name must not be null");
+        }
     }
 
     /**
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java 
b/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
index cf05c30..654c952 100644
--- a/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
+++ b/src/main/java/org/apache/sling/feature/scanner/FeatureDescriptor.java
@@ -33,6 +33,7 @@ public abstract class FeatureDescriptor extends 
ContainerDescriptor {
     /**
      * Constructor for a feature descriptor
      * @param f The feature
+     * @throws NullPointerException If feature is {@code null}
      */
     protected FeatureDescriptor(final Feature f) {
         super(f.getId().toMvnId());
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
index b4a21f3..7ed745f 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/ArtifactDescriptorImpl.java
@@ -24,7 +24,7 @@ import org.apache.sling.feature.Artifact;
 import org.apache.sling.feature.scanner.ArtifactDescriptor;
 
 /**
- * Information about a bundle
+ * Information about an artifact.
  */
 public class ArtifactDescriptorImpl
     extends ArtifactDescriptor {
@@ -41,11 +41,12 @@ public class ArtifactDescriptorImpl
     /**
      * Constructor for an artifact descriptor
      * @param name Optional name
-     * @param artifact Optional artifact
+     * @param artifact The artifact, must be provided
      * @param url Optional url
      * @param hasManifest Whether that artifact must have a metafest
      * @param isManifestOptional Whether the manifest is optional
      * @throws IOException If processing fails
+     * @throws NullPointerException If artifact is {@code null}
      */
     public ArtifactDescriptorImpl(
             final String name,
@@ -55,6 +56,7 @@ public class ArtifactDescriptorImpl
             final boolean isManifestOptional) throws IOException  {
         super(name != null ? name : artifact.getId().toMvnId());
         this.artifact = artifact;
+        this.artifact.getId(); // throw NPE if artifact is null
         this.artifactFile = url;
         Manifest mf = null;
         if ( hasManifest ) {
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java 
b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
index 0543170..f91718d 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/BundleDescriptorImpl.java
@@ -108,6 +108,7 @@ public class BundleDescriptorImpl
      * @param url The URL
      * @param startLevel The start level
      * @throws IOException If the manifest can't be get
+     * @throws NullPointerException If artifact is {@code null}
      */
     public BundleDescriptorImpl(final Artifact artifact,
             final URL url,
@@ -122,6 +123,7 @@ public class BundleDescriptorImpl
      * @param manifest The manifest
      * @param startLevel The start level
      * @throws IOException If the manifest can't be get
+     * @throws NullPointerException If artifact is {@code null}
      */
     public BundleDescriptorImpl(final Artifact artifact,
                                 final ArtifactProvider provider,
@@ -138,6 +140,7 @@ public class BundleDescriptorImpl
      * @param manifest The manifest
      * @param startLevel The start level
      * @throws IOException If the manifest can't be get
+     * @throws NullPointerException If artifact is {@code null}
      */
     public BundleDescriptorImpl(final Artifact artifact,
                                 final URL url,
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
index e9bf935..eae5513 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageDescriptor.java
@@ -61,6 +61,7 @@ public class ContentPackageDescriptor extends 
ArtifactDescriptorImpl {
      * @param artifact The artifact
      * @param url The url to the binary
      * @throws IOException If processing fails
+     * @throws NullPointerException If artifact is {@code null}
      */
     public ContentPackageDescriptor(final String name,
             final Artifact artifact,
diff --git 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
index d3f99cd..268735d 100644
--- 
a/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
+++ 
b/src/main/java/org/apache/sling/feature/scanner/impl/ContentPackageScanner.java
@@ -209,7 +209,9 @@ public class ContentPackageScanner {
                 for (final File f : toProcess) {
                     extractContentPackage(cp, infos, f.toURI().toURL());
                     final int lastDot = f.getName().lastIndexOf(".");
-                    final ContentPackageDescriptor i = new 
ContentPackageDescriptor(f.getName().substring(0, lastDot), null, 
f.toURI().toURL());
+                    // create synthetic artifact with a synthetic id 
containing the file name
+                    final Artifact artifact = new 
Artifact(cp.getArtifact().getId().changeClassifier(f.getName()));
+                    final ContentPackageDescriptor i = new 
ContentPackageDescriptor(f.getName().substring(0, lastDot), artifact, 
f.toURI().toURL());
                     i.setContentPackageInfo(cp.getArtifact(), f.getName());
                     infos.add(i);
 

Reply via email to