Skip to content

Commit

Permalink
Undo overly aggressive addition of VersionScheme, use it only where n…
Browse files Browse the repository at this point in the history
…eeded

until builder refactored.

Also add some more ITs.
  • Loading branch information
cstamas committed Jul 3, 2024
1 parent fa3c1e5 commit 26f3cf7
Show file tree
Hide file tree
Showing 20 changed files with 130 additions and 130 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import java.util.function.Function;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.version.VersionScheme;

/**
* Mapper that maps artifact to artifact.
Expand Down Expand Up @@ -133,17 +132,17 @@ public Artifact apply(Artifact artifact) {
};
}

static ArtifactMapper build(VersionScheme versionScheme, Map<String, ?> properties, String spec) {
static ArtifactMapper build(Map<String, ?> properties, String spec) {
requireNonNull(properties, "properties");
requireNonNull(spec, "spec");
ArtifactMapperBuilder builder = new ArtifactMapperBuilder(versionScheme, properties);
ArtifactMapperBuilder builder = new ArtifactMapperBuilder(properties);
SpecParser.parse(spec).accept(builder);
return builder.build();
}

class ArtifactMapperBuilder extends SpecParser.Builder {
public ArtifactMapperBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
public ArtifactMapperBuilder(Map<String, ?> properties) {
super(properties);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import java.util.function.Predicate;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.version.VersionScheme;

/**
* Artifact matcher. Supports {@code "*"} pattern as "any", and {@code "xxx*"} as "starts with" and
Expand Down Expand Up @@ -110,17 +109,17 @@ public boolean test(Artifact artifact) {
};
}

static ArtifactMatcher build(VersionScheme versionScheme, Map<String, ?> properties, String spec) {
static ArtifactMatcher build(Map<String, ?> properties, String spec) {
requireNonNull(properties, "properties");
requireNonNull(spec, "spec");
ArtifactMatcherBuilder builder = new ArtifactMatcherBuilder(versionScheme, properties);
ArtifactMatcherBuilder builder = new ArtifactMatcherBuilder(properties);
SpecParser.parse(spec).accept(builder);
return builder.build();
}

class ArtifactMatcherBuilder extends SpecParser.Builder {
public ArtifactMatcherBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
public ArtifactMatcherBuilder(Map<String, ?> properties) {
super(properties);
}

@Override
Expand Down Expand Up @@ -156,7 +155,7 @@ protected void processOp(SpecParser.Node node) {
throw new IllegalArgumentException("op uniqueBy accepts only 1 argument");
}
ArtifactNameMapper.ArtifactNameMapperBuilder nameMapper =
new ArtifactNameMapper.ArtifactNameMapperBuilder(versionScheme, properties);
new ArtifactNameMapper.ArtifactNameMapperBuilder(properties);
node.getChildren().get(0).accept(nameMapper);
params.add(uniqueBy(nameMapper.build()));
node.getChildren().clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import java.util.Map;
import java.util.function.Function;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.version.VersionScheme;

/**
* Mapper that maps artifact onto a string (usually file system friendly).
Expand Down Expand Up @@ -301,17 +300,17 @@ static ArtifactNameMapper AE() {
};
}

static ArtifactNameMapper build(VersionScheme versionScheme, Map<String, ?> properties, String spec) {
static ArtifactNameMapper build(Map<String, ?> properties, String spec) {
requireNonNull(properties, "properties");
requireNonNull(spec, "spec");
ArtifactNameMapperBuilder builder = new ArtifactNameMapperBuilder(versionScheme, properties);
ArtifactNameMapperBuilder builder = new ArtifactNameMapperBuilder(properties);
SpecParser.parse(spec).accept(builder);
return builder.build();
}

class ArtifactNameMapperBuilder extends SpecParser.Builder {
public ArtifactNameMapperBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
public ArtifactNameMapperBuilder(Map<String, ?> properties) {
super(properties);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Map;
import java.util.function.Predicate;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.version.InvalidVersionSpecificationException;
import org.eclipse.aether.version.Version;
import org.eclipse.aether.version.VersionScheme;

Expand Down Expand Up @@ -185,8 +186,11 @@ static ArtifactVersionMatcher build(VersionScheme versionScheme, Map<String, ?>
}

class ArtifactVersionMatcherBuilder extends SpecParser.Builder {
private final VersionScheme versionScheme;

public ArtifactVersionMatcherBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
super(properties);
this.versionScheme = versionScheme;
}

@Override
Expand Down Expand Up @@ -239,6 +243,14 @@ protected void processOp(SpecParser.Node node) {
}
}

protected Version versionParam(String op) {
try {
return versionScheme.parseVersion(stringParam(op));
} catch (InvalidVersionSpecificationException e) {
throw new IllegalArgumentException("invalid version parameter for " + op, e);
}
}

public ArtifactVersionMatcher build() {
return build(ArtifactVersionMatcher.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,11 @@ static ArtifactVersionSelector build(VersionScheme versionScheme, Map<String, ?>
}

class ArtifactVersionSelectorBuilder extends SpecParser.Builder {
private final VersionScheme versionScheme;

public ArtifactVersionSelectorBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
super(properties);
this.versionScheme = requireNonNull(versionScheme);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import java.util.Map;
import java.util.function.Predicate;
import org.eclipse.aether.graph.Dependency;
import org.eclipse.aether.version.VersionScheme;

/**
* Dependency matcher.
Expand Down Expand Up @@ -102,17 +101,17 @@ public boolean test(Dependency dependency) {
};
}

static DependencyMatcher build(VersionScheme versionScheme, Map<String, ?> properties, String spec) {
static DependencyMatcher build(Map<String, ?> properties, String spec) {
requireNonNull(properties, "properties");
requireNonNull(spec, "spec");
DependencyMatcherBuilder builder = new DependencyMatcherBuilder(versionScheme, properties);
DependencyMatcherBuilder builder = new DependencyMatcherBuilder(properties);
SpecParser.parse(spec).accept(builder);
return builder.build();
}

class DependencyMatcherBuilder extends SpecParser.Builder {
public DependencyMatcherBuilder(VersionScheme versionScheme, Map<String, ?> properties) {
super(versionScheme, properties);
public DependencyMatcherBuilder(Map<String, ?> properties) {
super(properties);
}

@Override
Expand Down Expand Up @@ -144,7 +143,7 @@ protected void processOp(SpecParser.Node node) {
throw new IllegalArgumentException("op artifact accepts only 1 argument");
}
ArtifactMatcher.ArtifactMatcherBuilder matcher =
new ArtifactMatcher.ArtifactMatcherBuilder(versionScheme, properties);
new ArtifactMatcher.ArtifactMatcherBuilder(properties);
node.accept(matcher);
params.add(artifact(matcher.build()));
node.getChildren().clear();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,29 +32,27 @@
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.repository.LocalRepository;
import org.eclipse.aether.repository.LocalRepositoryManager;
import org.eclipse.aether.version.VersionScheme;

/**
* Various utility sink implementations.
*/
public final class ArtifactSinks {
private ArtifactSinks() {}

public static ArtifactSink build(
VersionScheme versionScheme, Map<String, ?> properties, ToolboxCommandoImpl tc, String spec) {
public static ArtifactSink build(Map<String, ?> properties, ToolboxCommandoImpl tc, String spec) {
requireNonNull(properties, "properties");
requireNonNull(tc, "tc");
requireNonNull(spec, "spec");
ArtifactSinkBuilder builder = new ArtifactSinkBuilder(versionScheme, properties, tc);
ArtifactSinkBuilder builder = new ArtifactSinkBuilder(properties, tc);
SpecParser.parse(spec).accept(builder);
return builder.build();
}

static class ArtifactSinkBuilder extends SpecParser.Builder {
private final ToolboxCommandoImpl tc;

public ArtifactSinkBuilder(VersionScheme versionScheme, Map<String, ?> properties, ToolboxCommandoImpl tc) {
super(versionScheme, properties);
public ArtifactSinkBuilder(Map<String, ?> properties, ToolboxCommandoImpl tc) {
super(properties);
this.tc = tc;
}

Expand Down Expand Up @@ -96,7 +94,7 @@ protected void processOp(SpecParser.Node node) {
Path p0;
if (node.getChildren().size() == 2) {
ArtifactNameMapper.ArtifactNameMapperBuilder mapperBuilder =
new ArtifactNameMapper.ArtifactNameMapperBuilder(versionScheme, properties);
new ArtifactNameMapper.ArtifactNameMapperBuilder(properties);
node.getChildren().get(1).accept(mapperBuilder);
p1 = mapperBuilder.build();
p0 = tc.getContext()
Expand Down Expand Up @@ -174,7 +172,7 @@ protected void processOp(SpecParser.Node node) {
params.add(UnpackSink.unpack(p0, ArtifactNameMapper.ACVE(), true));
} else if (node.getChildren().size() == 2) {
ArtifactNameMapper.ArtifactNameMapperBuilder mapperBuilder =
new ArtifactNameMapper.ArtifactNameMapperBuilder(versionScheme, properties);
new ArtifactNameMapper.ArtifactNameMapperBuilder(properties);
node.getChildren().get(1).accept(mapperBuilder);
ArtifactNameMapper p1 = mapperBuilder.build();
Path p0 = tc.getContext()
Expand All @@ -195,10 +193,10 @@ protected void processOp(SpecParser.Node node) {
throw new IllegalArgumentException("op matching accepts only 2 argument");
}
ArtifactMatcher.ArtifactMatcherBuilder matcherBuilder =
new ArtifactMatcher.ArtifactMatcherBuilder(versionScheme, properties);
new ArtifactMatcher.ArtifactMatcherBuilder(properties);
node.getChildren().get(0).accept(matcherBuilder);
ArtifactMatcher matcher = matcherBuilder.build();
ArtifactSinkBuilder sinkBuilder = new ArtifactSinkBuilder(versionScheme, properties, tc);
ArtifactSinkBuilder sinkBuilder = new ArtifactSinkBuilder(properties, tc);
node.getChildren().get(1).accept(sinkBuilder);
ArtifactSink delegate = sinkBuilder.build();
params.add(matchingArtifactSink(matcher, delegate));
Expand All @@ -210,10 +208,10 @@ protected void processOp(SpecParser.Node node) {
throw new IllegalArgumentException("op mapping accepts only 2 argument");
}
ArtifactMapper.ArtifactMapperBuilder mapperBuilder =
new ArtifactMapper.ArtifactMapperBuilder(versionScheme, properties);
new ArtifactMapper.ArtifactMapperBuilder(properties);
node.getChildren().get(0).accept(mapperBuilder);
ArtifactMapper mapper = mapperBuilder.build();
ArtifactSinkBuilder sinkBuilder = new ArtifactSinkBuilder(versionScheme, properties, tc);
ArtifactSinkBuilder sinkBuilder = new ArtifactSinkBuilder(properties, tc);
node.getChildren().get(1).accept(sinkBuilder);
ArtifactSink delegate = sinkBuilder.build();
params.add(mappingArtifactSink(mapper, delegate));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.eclipse.aether.version.InvalidVersionSpecificationException;
import org.eclipse.aether.version.Version;
import org.eclipse.aether.version.VersionScheme;

/**
* Simple spec parser. Parses input string, and produces a tree of {@link Op} and {@link Literal}s. Root must
Expand Down Expand Up @@ -58,11 +55,9 @@ public boolean visitExit(Node node) {

public abstract static class Builder implements Visitor {
protected final ArrayList<Object> params = new ArrayList<>();
protected final VersionScheme versionScheme;
protected final Map<String, ?> properties;

public Builder(VersionScheme versionScheme, Map<String, ?> properties) {
this.versionScheme = requireNonNull(versionScheme);
public Builder(Map<String, ?> properties) {
this.properties = new HashMap<>(properties);
}

Expand All @@ -84,9 +79,6 @@ public boolean visitExit(SpecParser.Node node) {
protected void processLiteral(Node node) {
String value = node.getValue();
if (value.startsWith("${") && value.endsWith("}")) {
if (properties == null) {
throw new IllegalStateException("reference used without properties defined");
}
Object referenced = properties.get(value.substring(2, value.length() - 1));
if (referenced == null) {
referenced = "";
Expand Down Expand Up @@ -138,14 +130,6 @@ protected int intParam(String op) {
return Integer.parseInt((String) params.remove(params.size() - 1));
}

protected Version versionParam(String op) {
try {
return versionScheme.parseVersion(stringParam(op));
} catch (InvalidVersionSpecificationException e) {
throw new IllegalArgumentException("invalid version parameter for " + op, e);
}
}

protected <T> T typedParam(Class<T> clazz, String op) {
if (params.isEmpty()) {
throw new IllegalArgumentException("bad parameter count for " + op);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,26 +238,22 @@ public boolean dump(boolean verbose, Output output) {

@Override
public ArtifactMapper parseArtifactMapperSpec(String spec) {
return ArtifactMapper.build(
versionScheme, context.repositorySystemSession().getConfigProperties(), spec);
return ArtifactMapper.build(context.repositorySystemSession().getConfigProperties(), spec);
}

@Override
public ArtifactMatcher parseArtifactMatcherSpec(String spec) {
return ArtifactMatcher.build(
versionScheme, context.repositorySystemSession().getConfigProperties(), spec);
return ArtifactMatcher.build(context.repositorySystemSession().getConfigProperties(), spec);
}

@Override
public ArtifactNameMapper parseArtifactNameMapperSpec(String spec) {
return ArtifactNameMapper.build(
versionScheme, context.repositorySystemSession().getConfigProperties(), spec);
return ArtifactNameMapper.build(context.repositorySystemSession().getConfigProperties(), spec);
}

@Override
public DependencyMatcher parseDependencyMatcherSpec(String spec) {
return DependencyMatcher.build(
versionScheme, context.repositorySystemSession().getConfigProperties(), spec);
return DependencyMatcher.build(context.repositorySystemSession().getConfigProperties(), spec);
}

@Override
Expand All @@ -279,8 +275,7 @@ public RemoteRepository parseRemoteRepository(String spec) {

@Override
public ArtifactSink artifactSink(Output output, String spec) throws IOException {
return ArtifactSinks.build(
versionScheme, context.repositorySystemSession().getConfigProperties(), this, spec);
return ArtifactSinks.build(context.repositorySystemSession().getConfigProperties(), this, spec);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import java.util.HashMap;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.util.version.GenericVersionScheme;
import org.eclipse.aether.version.VersionScheme;
import org.junit.jupiter.api.Test;

public class ArtifactMapperTest {
Expand All @@ -40,22 +38,19 @@ void parse() {
properties.put("groupId", "org.some.group");
Artifact artifact = new DefaultArtifact("g:a:jar:classifier:1.0-20240322.090900-12");

VersionScheme versionScheme = new GenericVersionScheme();
Artifact mapped;

mapped = ArtifactMapper.build(versionScheme, properties, "omitClassifier()")
.apply(artifact);
mapped = ArtifactMapper.build(properties, "omitClassifier()").apply(artifact);
assertEquals(new DefaultArtifact("g:a:jar:1.0-20240322.090900-12"), mapped);

mapped =
ArtifactMapper.build(versionScheme, properties, "baseVersion()").apply(artifact);
mapped = ArtifactMapper.build(properties, "baseVersion()").apply(artifact);
assertEquals(new DefaultArtifact("g:a:jar:classifier:1.0-SNAPSHOT"), mapped);

mapped = ArtifactMapper.build(versionScheme, properties, "compose(omitClassifier(), baseVersion())")
mapped = ArtifactMapper.build(properties, "compose(omitClassifier(), baseVersion())")
.apply(artifact);
assertEquals(new DefaultArtifact("g:a:jar:1.0-SNAPSHOT"), mapped);

mapped = ArtifactMapper.build(versionScheme, properties, "rename(${groupId},artifact,3.2.1)")
mapped = ArtifactMapper.build(properties, "rename(${groupId},artifact,3.2.1)")
.apply(artifact);
assertEquals(new DefaultArtifact("org.some.group:artifact:jar:classifier:3.2.1"), mapped);
}
Expand Down
Loading

0 comments on commit 26f3cf7

Please sign in to comment.