From 28eabcebbb2de915927ced2c6c5898aa2c72dd4b Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Tue, 12 Feb 2013 00:37:17 +0400 Subject: [PATCH] IDEA-73118 SNAPSHOT dependencies not handled as per Maven 3.0 --- .../idea/maven/model/MavenArtifact.java | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenArtifact.java b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenArtifact.java index f61b559400e2..560e19f2f271 100644 --- a/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenArtifact.java +++ b/plugins/maven/maven-server-api/src/org/jetbrains/idea/maven/model/MavenArtifact.java @@ -16,6 +16,7 @@ package org.jetbrains.idea.maven.model; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; @@ -23,7 +24,6 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.Serializable; -import java.text.MessageFormat; public class MavenArtifact implements Serializable { @@ -177,25 +177,39 @@ public class MavenArtifact implements Serializable { public String getPathForExtraArtifact(@Nullable String extraArtifactClassifier, @Nullable String customExtension) { String path = getPath(); - if (!StringUtil.isEmptyOrSpaces(extraArtifactClassifier)) { - int repoEnd = path.lastIndexOf(getRelativePath()); - - if (repoEnd == -1) { - // unknown path format: try to add a classified at the end of the filename - int dotPos = path.lastIndexOf("."); - if (dotPos != -1) {// sometimes path doesn't contain '.'; but i can't find any reason why. - String withoutExtension = path.substring(0, dotPos); - path = MessageFormat.format("{0}-{1}.{2}", - withoutExtension, - extraArtifactClassifier, - customExtension == null ? myExtension : customExtension); - } - } - else { - String repoPath = path.substring(0, repoEnd); - path = repoPath + getRelativePathForExtraArtifact(extraArtifactClassifier, customExtension); - } + if (extraArtifactClassifier == null && customExtension == null && Comparing.equal(myVersion, myBaseVersion)) { + return path; } + + int slashPos = path.lastIndexOf('/'); + if (slashPos != -1) { + StringBuilder res = new StringBuilder(); + res.append(path, 0, slashPos + 1); + res.append(myArtifactId); + res.append('-'); + res.append(myVersion); + + String fullClassifier = getFullClassifier(extraArtifactClassifier); + if (fullClassifier != null) { + res.append('-').append(fullClassifier); + } + + res.append('.'); + res.append(customExtension == null ? myExtension : customExtension); + return res.toString(); + } + + // unknown path format: try to add a classified at the end of the filename + int dotPos = path.lastIndexOf('.'); + if (dotPos != -1) {// sometimes path doesn't contain '.'; but i can't find any reason why. + StringBuilder res = new StringBuilder(); + res.append(path, 0, dotPos); + res.append('-'); + res.append(extraArtifactClassifier); + res.append(customExtension == null ? myExtension : customExtension); + return res.toString(); + } + return path; }