maven: honor dependency winner scope; handle dependencies conflicts and duplicates (IDEA-133331)

This commit is contained in:
Vladislav.Soroka
2016-03-11 20:37:19 +03:00
parent d66293b3f0
commit 091785d46d
2 changed files with 36 additions and 12 deletions
@@ -60,8 +60,8 @@ public class Maven32AetherModelConverter extends MavenModelConverter {
Map<Artifact, MavenArtifact> convertedArtifacts = new THashMap<Artifact, MavenArtifact>();
result.setExtensions(convertArtifacts(extensions, convertedArtifacts, localRepository));
result.setDependencies(convertArtifacts(dependencies, convertedArtifacts, localRepository));
result.setDependencyTree(convertAetherDependencyNodes(null, dependencyTree, convertedArtifacts, localRepository));
result.setDependencies(convertArtifacts(dependencies, convertedArtifacts, localRepository));
result.setRemoteRepositories(convertRepositories(model.getRepositories()));
result.setProfiles(convertProfiles(model.getProfiles()));
@@ -88,19 +88,24 @@ public class Maven32AetherModelConverter extends MavenModelConverter {
MavenArtifactState state = MavenArtifactState.ADDED;
MavenArtifact relatedArtifact = null;
String scope = each.getDependency().getScope();
Object winner = data.get(ConflictResolver.NODE_DATA_WINNER);
if(winner instanceof DependencyNode) {
if (winner instanceof DependencyNode) {
DependencyNode winnerNode = (DependencyNode)winner;
if(!StringUtil.equals(each.getVersion().toString(), winnerNode.getVersion().toString())) {
scope = winnerNode.getDependency().getScope();
Artifact winnerArtifact = RepositoryUtils.toArtifact(winnerNode.getDependency().getArtifact());
relatedArtifact = convertArtifact(winnerArtifact, nativeToConvertedMap, localRepository);
if (!StringUtil.equals(each.getVersion().toString(), winnerNode.getVersion().toString())) {
state = MavenArtifactState.CONFLICT;
Artifact winnerArtifact = RepositoryUtils.toArtifact(winnerNode.getDependency().getArtifact());
relatedArtifact = convertArtifact(winnerArtifact, nativeToConvertedMap, localRepository);
}
else {
state = MavenArtifactState.DUPLICATE;
}
}
MavenArtifactNode newNode = new MavenArtifactNode(
parent, ma, state, relatedArtifact, each.getDependency().getScope(),
premanagedVersion, premanagedScope);
ma.setScope(scope);
MavenArtifactNode newNode =
new MavenArtifactNode(parent, ma, state, relatedArtifact, each.getDependency().getScope(), premanagedVersion, premanagedScope);
newNode.setDependencies(convertAetherDependencyNodes(newNode, each.getChildren(), nativeToConvertedMap, localRepository));
result.add(newNode);
}
@@ -955,7 +955,8 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
protected void setNameAndTooltip(String name, @Nullable String tooltip, SimpleTextAttributes attributes) {
super.setNameAndTooltip(name, tooltip, attributes);
if (myProjectsNavigator.getShowVersions()) {
addColoredFragment(":" + myMavenProject.getMavenId().getVersion(), new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, JBColor.GRAY));
addColoredFragment(":" + myMavenProject.getMavenId().getVersion(),
new SimpleTextAttributes(SimpleTextAttributes.STYLE_PLAIN, JBColor.GRAY));
}
}
@@ -1278,7 +1279,11 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
int validChildCount = 0;
for (MavenArtifactNode each : children) {
if (each.getState() != MavenArtifactState.ADDED && each.getState() != MavenArtifactState.CONFLICT) continue;
if (each.getState() != MavenArtifactState.ADDED &&
each.getState() != MavenArtifactState.CONFLICT &&
each.getState() != MavenArtifactState.DUPLICATE) {
continue;
}
if (newNodes == null) {
if (validChildCount < myChildren.size()) {
@@ -1375,7 +1380,7 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
private String getToolTip() {
final StringBuilder myToolTip = new StringBuilder("");
String scope = myArtifact.getScope();
String scope = myArtifactNode.getOriginalScope();
if (StringUtil.isNotEmpty(scope) && !MavenConstants.SCOPE_COMPILE.equals(scope)) {
myToolTip.append(scope).append(" ");
@@ -1386,7 +1391,10 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
myToolTip.append(" with ").append(myArtifactNode.getRelatedArtifact().getVersion());
}
}
return myToolTip.toString();
if (myArtifactNode.getState() == MavenArtifactState.DUPLICATE) {
myToolTip.append("omitted for duplicate");
}
return myToolTip.toString().trim();
}
@Override
@@ -1394,6 +1402,17 @@ public class MavenProjectsStructure extends SimpleTreeStructure {
setNameAndTooltip(getName(), null, getToolTip());
}
@Override
protected void setNameAndTooltip(String name, @Nullable String tooltip, SimpleTextAttributes attributes) {
final SimpleTextAttributes mergedAttributes;
if (myArtifactNode.getState() == MavenArtifactState.CONFLICT || myArtifactNode.getState() == MavenArtifactState.DUPLICATE) {
mergedAttributes = SimpleTextAttributes.merge(attributes, SimpleTextAttributes.GRAYED_ATTRIBUTES);
} else {
mergedAttributes = attributes;
}
super.setNameAndTooltip(name, tooltip, mergedAttributes);
}
private void updateDependency() {
setErrorLevel(myArtifact.isResolved() ? ErrorLevel.NONE : ErrorLevel.ERROR);
}