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);