[ https://issues.apache.org/jira/browse/MRESOLVER-8?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christian Schulte updated MRESOLVER-8: -------------------------------------- Summary: ScopeDependencySelector incorrectly de-selects direct dependencies. (was: Mode selection (transitive vs. direct) implemented inconsistently in classes 'ScopeDependencySelector' and 'OptionalDependencySelector'.) > ScopeDependencySelector incorrectly de-selects direct dependencies. > ------------------------------------------------------------------- > > Key: MRESOLVER-8 > URL: https://issues.apache.org/jira/browse/MRESOLVER-8 > Project: Maven Resolver > Issue Type: Bug > Reporter: Christian Schulte > Assignee: Christian Schulte > Priority: Critical > Fix For: Maven Artifact Resolver 1.2.0 > > > The classes 'ScopeDependencySelector' and 'OptionalDependencySelector' > inconsistently detected the mode of operation (direct or transitive). Whereas > the 'ScopeDependencySelector' honours the kind of resolution having been > requested (dependency vs. POM), the 'OptionalDependencySelector' does not > honour this difference. As both classes implement the 'DependencySelector', > they should select the mode of operation (direct vs. transitive) consistently. > This is what things looked liked before the fix: > {panel:title=ScopeDependencySelector} > {code} > public DependencySelector deriveChildSelector( DependencyCollectionContext > context ) > { > if ( this.transitive || context.getDependency() == null ) > { > return this; > } > return new ScopeDependencySelector( true, included, excluded ); > } > {code} > {panel} > {panel:title=OptionalDependencySelector} > {code} > public DependencySelector deriveChildSelector( DependencyCollectionContext > context ) > { > if ( depth >= 2 ) > { > return this; > } > return new OptionalDependencySelector( depth + 1 ); > } > {code} > {panel} > This is what both classes look like after the fix. No difference in mode > selection any more. > {panel:title=ScopeDependencySelector} > {code} > public DependencySelector deriveChildSelector( DependencyCollectionContext > context ) > { > ScopeDependencySelector child = this; > if ( context.getDependency() != null && !child.transitive ) > { > child = new ScopeDependencySelector( true, this.included, > this.excluded ); > } > if ( context.getDependency() == null && child.transitive ) > { > child = new ScopeDependencySelector( false, this.included, > this.excluded ); > } > return child; > } > {code} > {panel} > {panel:title=OptionalDependencySelector} > {code} > public DependencySelector deriveChildSelector( DependencyCollectionContext > context ) > { > OptionalDependencySelector child = this; > if ( context.getDependency() != null && !child.transitive ) > { > child = new OptionalDependencySelector( true ); > } > if ( context.getDependency() == null && child.transitive ) > { > child = new OptionalDependencySelector( false ); > } > return child; > } > {code} > {panel} -- This message was sent by Atlassian JIRA (v6.3.4#6332)