This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/master by this push: new 29e239000b Add some love to the API (#1310) 29e239000b is described below commit 29e239000b28de94b052d2d5cb15812daee2c5a3 Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Fri Nov 17 16:52:15 2023 +0100 Add some love to the API (#1310) --- api/maven-api-core/pom.xml | 2 +- .../src/main/java/org/apache/maven/api/Artifact.java | 1 + .../org/apache/maven/api/ArtifactCoordinate.java | 1 + .../main/java/org/apache/maven/api/Exclusion.java | 2 +- .../src/main/java/org/apache/maven/api/Node.java | 6 +++++- .../main/java/org/apache/maven/api/plugin/Log.java | 3 +++ .../maven/api/plugin/annotations/Component.java | 3 +++ .../apache/maven/api/plugin/annotations/Execute.java | 5 +++++ .../apache/maven/api/plugin/annotations/Mojo.java | 7 +++++++ .../maven/api/plugin/annotations/Parameter.java | 5 +++++ .../apache/maven/api/services/ArtifactInstaller.java | 3 ++- .../java/org/apache/maven/api/services/Prompter.java | 20 ++++++++++++++------ .../apache/maven/api/services/xml/XmlFactory.java | 2 ++ .../maven/api/services/xml/XmlReaderRequest.java | 8 ++++++++ .../maven/api/services/xml/XmlWriterRequest.java | 6 ++++++ api/maven-api-meta/pom.xml | 4 ++-- api/maven-api-model/pom.xml | 2 +- api/maven-api-settings/pom.xml | 2 +- api/maven-api-xml/pom.xml | 4 ++-- .../main/java/org/apache/maven/api/xml/XmlNode.java | 2 ++ .../java/org/apache/maven/api/xml/package-info.java | 5 +++++ 21 files changed, 77 insertions(+), 16 deletions(-) diff --git a/api/maven-api-core/pom.xml b/api/maven-api-core/pom.xml index 20f50385f0..ac94ace4ac 100644 --- a/api/maven-api-core/pom.xml +++ b/api/maven-api-core/pom.xml @@ -28,7 +28,7 @@ <artifactId>maven-api-core</artifactId> <name>Maven 4 API :: Core</name> - <description>Maven 4 API - Maven Core APIs.</description> + <description>Maven 4 API - Maven Core API</description> <dependencies> <dependency> diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java index 5cb9279b9d..b2d68f1faf 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Artifact.java @@ -37,6 +37,7 @@ public interface Artifact { * * @return the unique identifier */ + @Nonnull default String key() { return getGroupId() + ':' diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java index 6de0b67f26..553e60fad3 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/ArtifactCoordinate.java @@ -75,6 +75,7 @@ public interface ArtifactCoordinate { /** * Unique id identifying this artifact */ + @Nonnull default String getId() { return getGroupId() + ":" + getArtifactId() diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java index 9a413017af..3c578c0962 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Exclusion.java @@ -22,7 +22,7 @@ import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nullable; /** - * A dependency exlusion. + * A dependency exclusion. * * @since 4.0.0 * @see DependencyCoordinate#getExclusions() diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/Node.java b/api/maven-api-core/src/main/java/org/apache/maven/api/Node.java index 0b18298aaf..0d0e7037a9 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/Node.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/Node.java @@ -26,6 +26,7 @@ import java.util.stream.Stream; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.api.annotations.Provider; /** * Represents a dependency node within a Maven project's dependency collector. @@ -35,6 +36,7 @@ import org.apache.maven.api.annotations.Nonnull; */ @Experimental @Immutable +@Provider public interface Node { /** @@ -78,13 +80,15 @@ public interface Node { * @param filter the filter to apply * @return a new filtered graph */ - Node filter(Predicate<Node> filter); + @Nonnull + Node filter(@Nonnull Predicate<Node> filter); /** * Returns a string representation of this dependency node. * * @return the string representation */ + @Nonnull String asString(); /** diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/Log.java b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/Log.java index 9e19d5f2d0..2e28129d04 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/Log.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/Log.java @@ -20,6 +20,8 @@ package org.apache.maven.api.plugin; import java.util.function.Supplier; +import org.apache.maven.api.annotations.Provider; + /** * This interface supplies the API for providing feedback to the user from the <code>Mojo</code>, using standard * <code>Maven</code> channels.<br> @@ -30,6 +32,7 @@ import java.util.function.Supplier; * * @since 4.0.0 */ +@Provider public interface Log { /** * @return true if the <b>debug</b> error level is enabled diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Component.java b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Component.java index ab8cbf250a..305d3cc392 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Component.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Component.java @@ -26,6 +26,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; /** * Used to configure injection of Plexus components by @@ -44,11 +45,13 @@ public @interface Component { * role of the component to inject. * @return the role */ + @Nonnull Class<?> role() default Object.class; /** * hint of the component to inject. * @return the hint */ + @Nonnull String hint() default ""; } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Execute.java b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Execute.java index c133a127c8..1cfdfc6c77 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Execute.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Execute.java @@ -26,6 +26,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; /** * Used if your Mojo needs to fork a <a href="/ref/3.0.4/maven-core/lifecycles.html">lifecycle</a>. @@ -44,6 +45,7 @@ public @interface Execute { * Only one of {@link #customPhase()} and {@link #phase()} must be set. * @return the phase */ + @Nonnull LifecyclePhase phase() default LifecyclePhase.NONE; /** @@ -52,6 +54,7 @@ public @interface Execute { * Only one of {@link #customPhase()} and {@link #phase()} must be set. * @return the custom phase id */ + @Nonnull String customPhase() default ""; /** @@ -59,6 +62,7 @@ public @interface Execute { * another goal of the same plugin. * @return the goal */ + @Nonnull String goal() default ""; /** @@ -68,5 +72,6 @@ public @interface Execute { * @see <a href="https://maven.apache.org/maven-plugin-api/lifecycle-mappings.html">Lifecycle Mappings</a> * @return the lifecycle id */ + @Nonnull String lifecycle() default ""; } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Mojo.java b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Mojo.java index b32404e2a6..de5f7b016a 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Mojo.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Mojo.java @@ -27,6 +27,7 @@ import java.lang.annotation.Target; import org.apache.maven.api.ResolutionScope; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; /** * This annotation will mark your class as a Mojo (ie. goal in a Maven plugin). @@ -43,30 +44,35 @@ public @interface Mojo { * goal name (required). * @return the goal name */ + @Nonnull String name(); /** * default phase to bind your mojo. * @return the default phase */ + @Nonnull LifecyclePhase defaultPhase() default LifecyclePhase.NONE; /** * the required dependency resolution scope. * @return the required dependency resolution scope */ + @Nonnull ResolutionScope requiresDependencyResolution() default ResolutionScope.NONE; /** * the required dependency collection scope. * @return the required dependency collection scope */ + @Nonnull ResolutionScope requiresDependencyCollection() default ResolutionScope.NONE; /** * your Mojo instantiation strategy. (Only <code>per-lookup</code> and <code>singleton</code> are supported) * @return the instantiation strategy */ + @Nonnull InstantiationStrategy instantiationStrategy() default InstantiationStrategy.PER_LOOKUP; /** @@ -91,5 +97,6 @@ public @interface Mojo { * configurator bean name. * @return the configurator bean name */ + @Nonnull String configurator() default ""; } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Parameter.java b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Parameter.java index 5c2dc51f44..415f6a507d 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Parameter.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/plugin/annotations/Parameter.java @@ -26,6 +26,7 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; /** * Used to configure your Mojo parameters to be injected by @@ -48,12 +49,14 @@ public @interface Parameter { * name of the bean property used to get/set the field: by default, field name is used. * @return the name of the bean property */ + @Nonnull String name() default ""; /** * alias supported to get parameter value. * @return the alias */ + @Nonnull String alias() default ""; /** @@ -61,6 +64,7 @@ public @interface Parameter { * properties. * @return property name */ + @Nonnull String property() default ""; /** @@ -70,6 +74,7 @@ public @interface Parameter { * PluginParameterExpressionEvaluator</a>. * @return the default value */ + @Nonnull String defaultValue() default ""; /** diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstaller.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstaller.java index 41598baa22..00500ab7eb 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstaller.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstaller.java @@ -25,6 +25,7 @@ import org.apache.maven.api.Artifact; import org.apache.maven.api.Service; import org.apache.maven.api.Session; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; /** * Installs {@link Artifact}s to the local repository. @@ -39,7 +40,7 @@ public interface ArtifactInstaller extends Service { * @throws ArtifactInstallerException in case of an error * @throws IllegalArgumentException in case {@code request} is {@code null} */ - void install(ArtifactInstallerRequest request); + void install(@Nonnull ArtifactInstallerRequest request); /** * @param session the repository session diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/Prompter.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/Prompter.java index 0878961a23..29f2a75fc7 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/Prompter.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/Prompter.java @@ -22,6 +22,8 @@ import java.util.List; import org.apache.maven.api.Service; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.api.annotations.Nullable; /** * Service used to interact with the end user. @@ -37,7 +39,8 @@ public interface Prompter extends Service { * @return the string entered by the user * @throws PrompterException if an exception occurs */ - default String prompt(String message) throws PrompterException { + @Nonnull + default String prompt(@Nullable String message) throws PrompterException { return prompt(message, null, null); } @@ -49,7 +52,8 @@ public interface Prompter extends Service { * @return the string entered by the user * @throws PrompterException if an exception occurs */ - default String prompt(String message, String defaultReply) throws PrompterException { + @Nonnull + default String prompt(@Nullable String message, @Nullable String defaultReply) throws PrompterException { return prompt(message, null, defaultReply); } @@ -61,7 +65,8 @@ public interface Prompter extends Service { * @return the string entered by the user * @throws PrompterException if an exception occurs */ - default String prompt(String message, List<String> possibleValues) throws PrompterException { + @Nonnull + default String prompt(@Nullable String message, @Nullable List<String> possibleValues) throws PrompterException { return prompt(message, possibleValues, null); } @@ -74,7 +79,9 @@ public interface Prompter extends Service { * @return the string entered by the user * @throws PrompterException if an exception occurs */ - String prompt(String message, List<String> possibleValues, String defaultReply) throws PrompterException; + @Nonnull + String prompt(@Nullable String message, @Nullable List<String> possibleValues, @Nullable String defaultReply) + throws PrompterException; /** * Prompts the user for a password. @@ -83,7 +90,8 @@ public interface Prompter extends Service { * @return the password entered by the user * @throws PrompterException if an exception occurs */ - String promptForPassword(String message) throws PrompterException; + @Nonnull + String promptForPassword(@Nullable String message) throws PrompterException; /** * Displays a message to the user. @@ -91,5 +99,5 @@ public interface Prompter extends Service { * @param message the message to display * @throws PrompterException if an exception occurs */ - void showMessage(String message) throws PrompterException; + void showMessage(@Nullable String message) throws PrompterException; } diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlFactory.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlFactory.java index 3fbd2fdcb0..6fae7f943a 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlFactory.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlFactory.java @@ -97,6 +97,7 @@ public interface XmlFactory<T> extends Service { * @throws XmlReaderException if an error occurs during the parsing * @see #toXmlString(Object) */ + @Nonnull default T fromXmlString(@Nonnull String xml) throws XmlReaderException { return read(new StringReader(xml)); } @@ -109,6 +110,7 @@ public interface XmlFactory<T> extends Service { * @throws XmlWriterException if an error occurs during the transformation * @see #fromXmlString(String) */ + @Nonnull default String toXmlString(@Nonnull T content) throws XmlWriterException { StringWriter sw = new StringWriter(); write(content, sw); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlReaderRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlReaderRequest.java index 69f3cdeaea..3087e3a0b9 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlReaderRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlReaderRequest.java @@ -27,6 +27,7 @@ import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Immutable; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.NotThreadSafe; +import org.apache.maven.api.annotations.Nullable; /** * An XML reader request. @@ -37,20 +38,27 @@ import org.apache.maven.api.annotations.NotThreadSafe; @Immutable public interface XmlReaderRequest { + @Nullable Path getPath(); + @Nullable URL getURL(); + @Nullable InputStream getInputStream(); + @Nullable Reader getReader(); + @Nullable Transformer getTransformer(); boolean isStrict(); + @Nullable String getModelId(); + @Nullable String getLocation(); boolean isAddDefaultEntities(); diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java index e60ec76cc1..f9a305dc3f 100644 --- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java +++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java @@ -23,6 +23,8 @@ import java.io.Writer; import java.nio.file.Path; import org.apache.maven.api.annotations.Experimental; +import org.apache.maven.api.annotations.Nonnull; +import org.apache.maven.api.annotations.Nullable; /** * An XML writer request. @@ -33,12 +35,16 @@ import org.apache.maven.api.annotations.Experimental; @Experimental public interface XmlWriterRequest<T> { + @Nullable Path getPath(); + @Nullable OutputStream getOutputStream(); + @Nullable Writer getWriter(); + @Nonnull T getContent(); static <T> XmlWriterRequestBuilder<T> builder() { diff --git a/api/maven-api-meta/pom.xml b/api/maven-api-meta/pom.xml index 688422645c..820af57c95 100644 --- a/api/maven-api-meta/pom.xml +++ b/api/maven-api-meta/pom.xml @@ -27,7 +27,7 @@ </parent> <artifactId>maven-api-meta</artifactId> - <name>Maven 4 API Meta annotations</name> - <description>Java annotations for Maven 4 Immutable API.</description> + <name>Maven 4 API :: Meta annotations</name> + <description>Maven 4 API - Java meta annotations.</description> </project> diff --git a/api/maven-api-model/pom.xml b/api/maven-api-model/pom.xml index 58a2640688..559c83962d 100644 --- a/api/maven-api-model/pom.xml +++ b/api/maven-api-model/pom.xml @@ -29,7 +29,7 @@ under the License. <artifactId>maven-api-model</artifactId> <name>Maven 4 API :: Model</name> - <description>Maven 4 API - Immutable Model for Maven POM (Project Object Model)</description> + <description>Maven 4 API - Immutable Model for Maven POM (Project Object Model).</description> <dependencies> <dependency> diff --git a/api/maven-api-settings/pom.xml b/api/maven-api-settings/pom.xml index 4878366485..145724a61c 100644 --- a/api/maven-api-settings/pom.xml +++ b/api/maven-api-settings/pom.xml @@ -29,7 +29,7 @@ under the License. <artifactId>maven-api-settings</artifactId> <name>Maven 4 API :: Settings</name> - <description>Maven 4 API - Immutable Settings model</description> + <description>Maven 4 API - Immutable Settings model.</description> <dependencies> <dependency> diff --git a/api/maven-api-xml/pom.xml b/api/maven-api-xml/pom.xml index a9fd26280b..f950d4990c 100644 --- a/api/maven-api-xml/pom.xml +++ b/api/maven-api-xml/pom.xml @@ -27,8 +27,8 @@ </parent> <artifactId>maven-api-xml</artifactId> - <name>Maven 4 API XML</name> - <description>Maven 4 API immutable XML helper.</description> + <name>Maven 4 API :: XML</name> + <description>Maven 4 API - Immutable XML.</description> <dependencies> <dependency> diff --git a/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/XmlNode.java b/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/XmlNode.java index e0e3d4b1fa..df6335ee8d 100644 --- a/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/XmlNode.java +++ b/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/XmlNode.java @@ -30,6 +30,8 @@ import org.apache.maven.api.annotations.ThreadSafe; /** * An immutable xml node. * + * TODO: v4: add support for namespaces + * * @since 4.0.0 */ @Experimental diff --git a/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/package-info.java b/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/package-info.java new file mode 100644 index 0000000000..db25d3a153 --- /dev/null +++ b/api/maven-api-xml/src/main/java/org/apache/maven/api/xml/package-info.java @@ -0,0 +1,5 @@ +// CHECKSTYLE_OFF: RegexpHeader +/** + * Maven immutable XML api. + */ +package org.apache.maven.api.xml;