Given that these new methods actually have implementations, could we see
about having at least a unit test of the new code - since it will not be
covered by any test.

If we have no test and no usage, then we could realistically replace the
implementations with `throw new UnsupportedOperationsException("Not
implemented yet");` which would defeat the claimed purpose on the JIRA of
making this code available to IDE integrators.

So I think to make "live" code available, we need at least a sanity check
of the new code with a unit test or two... nothing fancy.

On 12 March 2017 at 16:32, <hbout...@apache.org> wrote:

> [MNG-6182] ModelResolver interface enhancements.
>
>
> Project: http://git-wip-us.apache.org/repos/asf/maven/repo
> Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/ab800b0c
> Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/ab800b0c
> Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/ab800b0c
>
> Branch: refs/heads/MNG-6169
> Commit: ab800b0cfae4e3ca9453304e3b9727ba4a4b712b
> Parents: 114ef6c
> Author: Christian Schulte <schu...@apache.org>
> Authored: Sat Jan 30 19:17:34 2016 +0100
> Committer: Christian Schulte <schu...@apache.org>
> Committed: Wed Mar 8 18:24:18 2017 +0100
>
> ----------------------------------------------------------------------
>  .../maven/project/ProjectModelResolver.java     | 84 +++++++++++++++----
>  .../maven/model/resolution/ModelResolver.java   | 32 ++++++++
>  .../internal/DefaultModelResolver.java          | 85 ++++++++++++++++----
>  3 files changed, 167 insertions(+), 34 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/maven/blob/ab800b0c/
> maven-core/src/main/java/org/apache/maven/project/
> ProjectModelResolver.java
> ----------------------------------------------------------------------
> diff --git 
> a/maven-core/src/main/java/org/apache/maven/project/ProjectModelResolver.java
> b/maven-core/src/main/java/org/apache/maven/project/
> ProjectModelResolver.java
> index 7b93217..3a31d33 100644
> --- a/maven-core/src/main/java/org/apache/maven/project/
> ProjectModelResolver.java
> +++ b/maven-core/src/main/java/org/apache/maven/project/
> ProjectModelResolver.java
> @@ -28,7 +28,7 @@ import java.util.Set;
>
>  import com.google.common.base.Predicate;
>  import com.google.common.collect.Iterables;
> -
> +import org.apache.maven.model.Dependency;
>  import org.apache.maven.model.Parent;
>  import org.apache.maven.model.Repository;
>  import org.apache.maven.model.building.FileModelSource;
> @@ -203,24 +203,26 @@ public class ProjectModelResolver
>          return new FileModelSource( pomFile );
>      }
>
> -    public ModelSource resolveModel( Parent parent )
> +    @Override
> +    public ModelSource resolveModel( final Parent parent )
>          throws UnresolvableModelException
>      {
> -        Artifact artifact = new DefaultArtifact( parent.getGroupId(),
> parent.getArtifactId(), "", "pom",
> -                                                 parent.getVersion() );
> -
> -        VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> -        versionRangeRequest.setTrace( trace );
> -
>          try
>          {
> -            VersionRangeResult versionRangeResult =
> resolver.resolveVersionRange( session, versionRangeRequest );
> +            final Artifact artifact = new DefaultArtifact(
> parent.getGroupId(), parent.getArtifactId(), "", "pom",
> +
>  parent.getVersion() );
> +
> +            final VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> +            versionRangeRequest.setTrace( trace );
> +
> +            final VersionRangeResult versionRangeResult =
> resolver.resolveVersionRange( session, versionRangeRequest );
>
>              if ( versionRangeResult.getHighestVersion() == null )
>              {
> -                throw new UnresolvableModelException( "No versions
> matched the requested range '" + parent.getVersion()
> -                                                          + "'",
> parent.getGroupId(), parent.getArtifactId(),
> -                                                      parent.getVersion()
> );
> +                throw new UnresolvableModelException(
> +                    String.format( "No versions matched the requested
> parent version range '%s'",
> +                                   parent.getVersion() ),
> +                    parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
>
>              }
>
> @@ -229,21 +231,69 @@ public class ProjectModelResolver
>                       && 
> versionRangeResult.getVersionConstraint().getRange().getUpperBound()
> == null )
>              {
>                  // Message below is checked for in the MNG-2199 core IT.
> -                throw new UnresolvableModelException( "The requested
> version range '" + parent.getVersion()
> -                                                          + "' does not
> specify an upper bound", parent.getGroupId(),
> -
> parent.getArtifactId(), parent.getVersion() );
> +                throw new UnresolvableModelException(
> +                    String.format( "The requested parent version range
> '%s' does not specify an upper bound",
> +                                   parent.getVersion() ),
> +                    parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
>
>              }
>
>              parent.setVersion( 
> versionRangeResult.getHighestVersion().toString()
> );
> +
> +            return resolveModel( parent.getGroupId(),
> parent.getArtifactId(), parent.getVersion() );
>          }
> -        catch ( VersionRangeResolutionException e )
> +        catch ( final VersionRangeResolutionException e )
>          {
>              throw new UnresolvableModelException( e.getMessage(),
> parent.getGroupId(), parent.getArtifactId(),
>                                                    parent.getVersion(), e
> );
>
>          }
> +    }
>
> -        return resolveModel( parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
> +    @Override
> +    public ModelSource resolveModel( final Dependency dependency )
> +        throws UnresolvableModelException
> +    {
> +        try
> +        {
> +            final Artifact artifact = new DefaultArtifact(
> dependency.getGroupId(), dependency.getArtifactId(), "",
> +                                                           "pom",
> dependency.getVersion() );
> +
> +            final VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> +            versionRangeRequest.setTrace( trace );
> +
> +            final VersionRangeResult versionRangeResult =
> resolver.resolveVersionRange( session, versionRangeRequest );
> +
> +            if ( versionRangeResult.getHighestVersion() == null )
> +            {
> +                throw new UnresolvableModelException(
> +                    String.format( "No versions matched the requested
> dependency version range '%s'",
> +                                   dependency.getVersion() ),
> +                    dependency.getGroupId(), dependency.getArtifactId(),
> dependency.getVersion() );
> +
> +            }
> +
> +            if ( versionRangeResult.getVersionConstraint() != null
> +                     && versionRangeResult.getVersionConstraint().getRange()
> != null
> +                     && 
> versionRangeResult.getVersionConstraint().getRange().getUpperBound()
> == null )
> +            {
> +                // Message below is checked for in the MNG-4463 core IT.
> +                throw new UnresolvableModelException(
> +                    String.format( "The requested dependency version
> range '%s' does not specify an upper bound",
> +                                   dependency.getVersion() ),
> +                    dependency.getGroupId(), dependency.getArtifactId(),
> dependency.getVersion() );
> +
> +            }
> +
> +            dependency.setVersion( 
> versionRangeResult.getHighestVersion().toString()
> );
> +
> +            return resolveModel( dependency.getGroupId(),
> dependency.getArtifactId(), dependency.getVersion() );
> +        }
> +        catch ( VersionRangeResolutionException e )
> +        {
> +            throw new UnresolvableModelException( e.getMessage(),
> dependency.getGroupId(), dependency.getArtifactId(),
> +
> dependency.getVersion(), e );
> +
> +        }
>      }
>  }
>
> http://git-wip-us.apache.org/repos/asf/maven/blob/ab800b0c/
> maven-model-builder/src/main/java/org/apache/maven/model/
> resolution/ModelResolver.java
> ----------------------------------------------------------------------
> diff --git a/maven-model-builder/src/main/java/org/apache/maven/
> model/resolution/ModelResolver.java b/maven-model-builder/src/
> main/java/org/apache/maven/model/resolution/ModelResolver.java
> index c81a536..39695f7 100644
> --- a/maven-model-builder/src/main/java/org/apache/maven/model/resolution/
> ModelResolver.java
> +++ b/maven-model-builder/src/main/java/org/apache/maven/model/resolution/
> ModelResolver.java
> @@ -19,6 +19,7 @@ package org.apache.maven.model.resolution;
>   * under the License.
>   */
>
> +import org.apache.maven.model.Dependency;
>  import org.apache.maven.model.Parent;
>  import org.apache.maven.model.Repository;
>  import org.apache.maven.model.building.ModelSource;
> @@ -47,16 +48,47 @@ public interface ModelResolver
>
>      /**
>       * Tries to resolve the POM for the specified parent coordinates
> possibly updating {@code parent}.
> +     * <p>
> +     * Unlike the {@link #resolveModel(java.lang.String,
> java.lang.String, java.lang.String)} method, this method
> +     * supports version ranges and updates the given {@code parent}
> instance to match the returned {@code ModelSource}.
> +     * If {@code parent} declares a version range, the version
> corresponding to the returned {@code ModelSource} will
> +     * be set on the given {@code parent}.
> +     * </p>
>       *
>       * @param parent The parent coordinates to resolve, must not be
> {@code null}.
> +     *
>       * @return The source of the requested POM, never {@code null}.
> +     *
>       * @throws UnresolvableModelException If the POM could not be
> resolved from any configured repository.
>       * @since 3.2.2
> +     *
> +     * @see Parent#clone()
>       */
>      ModelSource resolveModel( Parent parent )
>          throws UnresolvableModelException;
>
>      /**
> +     * Tries to resolve the POM for the specified dependency coordinates
> possibly updating {@code dependency}.
> +     * <p>
> +     * Unlike the {@link #resolveModel(java.lang.String,
> java.lang.String, java.lang.String)} method, this method
> +     * supports version ranges and updates the given {@code dependency}
> instance to match the returned
> +     * {@code ModelSource}. If {@code dependency} declares a version
> range, the version corresponding to the returned
> +     * {@code ModelSource} will be set on the given {@code dependency}.
> +     * </p>
> +     *
> +     * @param dependency The dependency coordinates to resolve, must not
> be {@code null}.
> +     *
> +     * @return The source of the requested POM, never {@code null}.
> +     *
> +     * @throws UnresolvableModelException If the POM could not be
> resolved from any configured repository.
> +     * @since 3.5.0-alpha-2
> +     *
> +     * @see Dependency#clone()
> +     */
> +    ModelSource resolveModel( Dependency dependency )
> +        throws UnresolvableModelException;
> +
> +    /**
>       * Adds a repository to use for subsequent resolution requests. The
> order in which repositories are added matters,
>       * repositories that were added first should also be searched first.
> When multiple repositories with the same
>       * identifier are added, only the first repository being added will
> be used.
>
> http://git-wip-us.apache.org/repos/asf/maven/blob/ab800b0c/
> maven-resolver-provider/src/main/java/org/apache/maven/
> repository/internal/DefaultModelResolver.java
> ----------------------------------------------------------------------
> diff --git a/maven-resolver-provider/src/main/java/org/apache/maven/
> repository/internal/DefaultModelResolver.java
> b/maven-resolver-provider/src/main/java/org/apache/maven/
> repository/internal/DefaultModelResolver.java
> index 9ea91ff..3e82eb9 100644
> --- a/maven-resolver-provider/src/main/java/org/apache/maven/
> repository/internal/DefaultModelResolver.java
> +++ b/maven-resolver-provider/src/main/java/org/apache/maven/
> repository/internal/DefaultModelResolver.java
> @@ -28,6 +28,7 @@ import java.util.Set;
>
>  import com.google.common.base.Predicate;
>  import com.google.common.collect.Iterables;
> +import org.apache.maven.model.Dependency;
>  import org.apache.maven.model.Parent;
>  import org.apache.maven.model.Repository;
>  import org.apache.maven.model.building.FileModelSource;
> @@ -182,25 +183,27 @@ class DefaultModelResolver
>          return new FileModelSource( pomFile );
>      }
>
> -    public ModelSource resolveModel( Parent parent )
> +    @Override
> +    public ModelSource resolveModel( final Parent parent )
>          throws UnresolvableModelException
>      {
> -        Artifact artifact = new DefaultArtifact( parent.getGroupId(),
> parent.getArtifactId(), "", "pom",
> -                                                 parent.getVersion() );
> -
> -        VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> -        versionRangeRequest.setTrace( trace );
> -
>          try
>          {
> -            VersionRangeResult versionRangeResult =
> +            final Artifact artifact = new DefaultArtifact(
> parent.getGroupId(), parent.getArtifactId(), "", "pom",
> +
>  parent.getVersion() );
> +
> +            final VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> +            versionRangeRequest.setTrace( trace );
> +
> +            final VersionRangeResult versionRangeResult =
>                  versionRangeResolver.resolveVersionRange( session,
> versionRangeRequest );
>
>              if ( versionRangeResult.getHighestVersion() == null )
>              {
> -                throw new UnresolvableModelException( "No versions
> matched the requested range '" + parent.getVersion()
> -                                                          + "'",
> parent.getGroupId(), parent.getArtifactId(),
> -                                                      parent.getVersion()
> );
> +                throw new UnresolvableModelException(
> +                    String.format( "No versions matched the requested
> parent version range '%s'",
> +                                   parent.getVersion() ),
> +                    parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
>
>              }
>
> @@ -209,22 +212,70 @@ class DefaultModelResolver
>                       && 
> versionRangeResult.getVersionConstraint().getRange().getUpperBound()
> == null )
>              {
>                  // Message below is checked for in the MNG-2199 core IT.
> -                throw new UnresolvableModelException( "The requested
> version range '" + parent.getVersion()
> -                                                          + "' does not
> specify an upper bound", parent.getGroupId(),
> -
> parent.getArtifactId(), parent.getVersion() );
> +                throw new UnresolvableModelException(
> +                    String.format( "The requested parent version range
> '%s' does not specify an upper bound",
> +                                   parent.getVersion() ),
> +                    parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
>
>              }
>
>              parent.setVersion( 
> versionRangeResult.getHighestVersion().toString()
> );
> +
> +            return resolveModel( parent.getGroupId(),
> parent.getArtifactId(), parent.getVersion() );
>          }
> -        catch ( VersionRangeResolutionException e )
> +        catch ( final VersionRangeResolutionException e )
>          {
>              throw new UnresolvableModelException( e.getMessage(),
> parent.getGroupId(), parent.getArtifactId(),
>                                                    parent.getVersion(), e
> );
>
>          }
> -
> -        return resolveModel( parent.getGroupId(), parent.getArtifactId(),
> parent.getVersion() );
>      }
>
> +    @Override
> +    public ModelSource resolveModel( final Dependency dependency )
> +        throws UnresolvableModelException
> +    {
> +        try
> +        {
> +            final Artifact artifact = new DefaultArtifact(
> dependency.getGroupId(), dependency.getArtifactId(), "",
> +                                                           "pom",
> dependency.getVersion() );
> +
> +            final VersionRangeRequest versionRangeRequest = new
> VersionRangeRequest( artifact, repositories, context );
> +            versionRangeRequest.setTrace( trace );
> +
> +            final VersionRangeResult versionRangeResult =
> +                versionRangeResolver.resolveVersionRange( session,
> versionRangeRequest );
> +
> +            if ( versionRangeResult.getHighestVersion() == null )
> +            {
> +                throw new UnresolvableModelException(
> +                    String.format( "No versions matched the requested
> dependency version range '%s'",
> +                                   dependency.getVersion() ),
> +                    dependency.getGroupId(), dependency.getArtifactId(),
> dependency.getVersion() );
> +
> +            }
> +
> +            if ( versionRangeResult.getVersionConstraint() != null
> +                     && versionRangeResult.getVersionConstraint().getRange()
> != null
> +                     && 
> versionRangeResult.getVersionConstraint().getRange().getUpperBound()
> == null )
> +            {
> +                // Message below is checked for in the MNG-4463 core IT.
> +                throw new UnresolvableModelException(
> +                    String.format( "The requested dependency version
> range '%s' does not specify an upper bound",
> +                                   dependency.getVersion() ),
> +                    dependency.getGroupId(), dependency.getArtifactId(),
> dependency.getVersion() );
> +
> +            }
> +
> +            dependency.setVersion( 
> versionRangeResult.getHighestVersion().toString()
> );
> +
> +            return resolveModel( dependency.getGroupId(),
> dependency.getArtifactId(), dependency.getVersion() );
> +        }
> +        catch ( VersionRangeResolutionException e )
> +        {
> +            throw new UnresolvableModelException( e.getMessage(),
> dependency.getGroupId(), dependency.getArtifactId(),
> +
> dependency.getVersion(), e );
> +
> +        }
> +    }
>  }
>
>

Reply via email to