in src/main/java/org/apache/sling/feature/maven/mojos/UpdateVersionsMojo.java [479:531]
private boolean updateVersions(final String fileName, final Feature rawFeature, final UpdateResult result,
final Map<String, Set<String>> globalPropertyUpdates) throws MojoExecutionException {
// update artifacts
final Iterator<ArtifactUpdate> iter = result.updates.iterator();
while (iter.hasNext()) {
final ArtifactUpdate update = iter.next();
final Artifacts container;
if (update.extension == null) {
container = rawFeature.getBundles();
} else {
container = rawFeature.getExtensions().getByName(update.extension.getName()).getArtifacts();
}
final int pos = container.indexOf(update.artifact);
final Artifact oldArtifact = pos == -1 ? null : container.get(pos);
if (!container.removeExact(update.artifact.getId())) {
// check if property is used
final Artifact same = container.getSame(update.artifact.getId());
boolean found = same != null;
if (same != null) {
if (!same.getId().getVersion().startsWith("${") || !same.getId().getVersion().endsWith("}")) {
found = false;
} else {
final String propName = same.getId().getVersion().substring(2,
same.getId().getVersion().length() - 1);
if (!update.artifact.getId().getVersion().equals(this.project.getProperties().get(propName))) {
found = false;
} else {
Set<String> versions = globalPropertyUpdates.get(propName);
if (versions == null) {
versions = new HashSet<>();
globalPropertyUpdates.put(propName, versions);
}
versions.add(update.newVersion);
result.propertyUpdates.put(propName, update.newVersion);
}
}
}
if (!found) {
throw new MojoExecutionException("Unable to update artifact as it's not found in feature: "
+ update.artifact.getId().toMvnId());
}
iter.remove();
} else {
// oldArtifact is not null (removeExact returned true)
final Artifact newArtifact = new Artifact(update.artifact.getId().changeVersion(update.newVersion));
newArtifact.getMetadata().putAll(oldArtifact.getMetadata());
container.add(pos, newArtifact);
}
}
return !result.updates.isEmpty();
}