Overview
As can be seen below, org.junit.jupiter.params.support.ParameterInfo causes cycles between the jupiter.params.aggregator and jupiter.params.support packages in junit-jupiter-params.
Cycle detected: Slice jupiter.params.aggregator ->
Slice jupiter.params.support ->
Slice jupiter.params.aggregator
1. Dependencies of Slice jupiter.params.aggregator
- Method <org.junit.jupiter.params.aggregator.ArgumentsAggregator.aggregateArguments(org.junit.jupiter.params.aggregator.ArgumentsAccessor, org.junit.jupiter.params.support.FieldContext)> has parameter of type <org.junit.jupiter.params.support.FieldContext> in (ArgumentsAggregator.java:0)
- Method <org.junit.jupiter.params.aggregator.SimpleArgumentsAggregator.aggregateArguments(org.junit.jupiter.params.aggregator.ArgumentsAccessor, org.junit.jupiter.params.support.FieldContext)> has parameter of type <org.junit.jupiter.params.support.FieldContext> in (SimpleArgumentsAggregator.java:0)
- Method <org.junit.jupiter.params.aggregator.SimpleArgumentsAggregator.aggregateArguments(org.junit.jupiter.params.aggregator.ArgumentsAccessor, org.junit.jupiter.params.support.FieldContext)> calls method <org.junit.jupiter.params.support.FieldContext.getField()> in (SimpleArgumentsAggregator.java:44)
- Method <org.junit.jupiter.params.aggregator.SimpleArgumentsAggregator.aggregateArguments(org.junit.jupiter.params.aggregator.ArgumentsAccessor, org.junit.jupiter.params.support.FieldContext)> calls method <org.junit.jupiter.params.support.FieldContext.getParameterIndex()> in (SimpleArgumentsAggregator.java:44)
2. Dependencies of Slice jupiter.params.support
- Method <org.junit.jupiter.params.support.ParameterInfo.getArguments()> has return type <org.junit.jupiter.params.aggregator.ArgumentsAccessor> in (ParameterInfo.java:0)
Since the junit-jupiter-params artifact is part of the public API for JUnit Jupiter, we have traditionally not allowed package cycles within that artifact.
Thus, in order to reduce package cycles and improve the quality of the code base, we should relocate ParameterInfo to the org.junit.jupiter.params package and deprecate the existing class.
Specifically, I am proposing the following.
- Introduce
org.junit.jupiter.params.ParameterInfo as a copy of org.junit.jupiter.params.support.ParameterInfo.
- Declare
org.junit.jupiter.params.ParameterInfo as a sealed type permitting only org.junit.jupiter.params.support.ParameterInfo as a subtype.
- Have
org.junit.jupiter.params.support.ParameterInfo extend org.junit.jupiter.params.ParameterInfo.
- Deprecate
org.junit.jupiter.params.support.ParameterInfo for removal.
- Update all APIs that reference
org.junit.jupiter.params.support.ParameterInfo to reference org.junit.jupiter.params.ParameterInfo instead.
Since org.junit.jupiter.params.support.ParameterInfo is a relatively new API (introduced in 5.13), we assume that it is not actively used by many projects yet. In light of that, we are considering making these breaking changes for JUnit 6.0.
However, we hope that affected users will only need to change their imports from org.junit.jupiter.params.support.ParameterInfo to org.junit.jupiter.params.ParameterInfo to address any issues.
Related Issues
Overview
As can be seen below,
org.junit.jupiter.params.support.ParameterInfocauses cycles between thejupiter.params.aggregatorandjupiter.params.supportpackages injunit-jupiter-params.Since the
junit-jupiter-paramsartifact is part of the public API for JUnit Jupiter, we have traditionally not allowed package cycles within that artifact.Thus, in order to reduce package cycles and improve the quality of the code base, we should relocate
ParameterInfoto theorg.junit.jupiter.paramspackage and deprecate the existing class.Specifically, I am proposing the following.
org.junit.jupiter.params.ParameterInfoas a copy oforg.junit.jupiter.params.support.ParameterInfo.org.junit.jupiter.params.ParameterInfoas a sealed type permitting onlyorg.junit.jupiter.params.support.ParameterInfoas a subtype.org.junit.jupiter.params.support.ParameterInfoextendorg.junit.jupiter.params.ParameterInfo.org.junit.jupiter.params.support.ParameterInfofor removal.org.junit.jupiter.params.support.ParameterInfoto referenceorg.junit.jupiter.params.ParameterInfoinstead.Since
org.junit.jupiter.params.support.ParameterInfois a relatively new API (introduced in 5.13), we assume that it is not actively used by many projects yet. In light of that, we are considering making these breaking changes for JUnit 6.0.However, we hope that affected users will only need to change their imports from
org.junit.jupiter.params.support.ParameterInfotoorg.junit.jupiter.params.ParameterInfoto address any issues.Related Issues
Resourcetocommons.iopackage and deprecate existing interface #4885MediaTypetojupiter.apipackage and deprecate existing class #4886