Fix snapshot version handling in annotations artifacts lookup

GitOrigin-RevId: 89689b905ef5fe3376a2adf9d403c2a7ff2e1755
This commit is contained in:
Nikita Skvortsov
2021-03-02 12:50:56 +03:00
committed by intellij-monorepo-bot
parent 9e93c11c7b
commit a38d098d23
2 changed files with 35 additions and 4 deletions

View File

@@ -355,18 +355,19 @@ public final class ArtifactRepositoryManager {
final Version version = constraint.getVersion();
if (version != null) {
final String major = version.toString().split("[.\\-_]")[0];
annotationsConstraint = "[" + major + ", " + version + "-an10000]";
final String lower = chooseLowerBoundString(version);
annotationsConstraint = "[" + lower + ", " + version + "-an10000]";
}
final VersionRange range = constraint.getRange();
if (range != null) {
final String majorLower = range.getLowerBound().getVersion().toString().split("[.\\-_]")[0];
Version lowerBoundVersion = range.getLowerBound().getVersion();
String lower = chooseLowerBoundString(lowerBoundVersion);
String upper = range.getUpperBound().isInclusive()
? range.getUpperBound().toString() + "-an10000]"
: range.getUpperBound().toString() + ")";
annotationsConstraint = "[" + majorLower + ", " + upper;
annotationsConstraint = "[" + lower + ", " + upper;
}
try {
@@ -378,6 +379,20 @@ public final class ArtifactRepositoryManager {
return Collections.singleton(constraint);
}
private static String chooseLowerBoundString(Version lowerBoundVersion) {
String lowerBoundString = lowerBoundVersion.toString();
String candidate = lowerBoundString.split("[.\\-_]")[0];
try {
Version candidateVersion = ourVersioning.parseVersion(candidate);
if (lowerBoundVersion.compareTo(candidateVersion) < 0) {
return lowerBoundString;
}
} catch (InvalidVersionSpecificationException e) {
LOG.info("Failed to parse major part of lower bound of version " + lowerBoundVersion, e);
}
return candidate;
}
@NotNull
private static DependencyFilter createScopeFilter() {
return DependencyFilterUtils.classpathFilter(JavaScopes.COMPILE, JavaScopes.RUNTIME);

View File

@@ -151,6 +151,22 @@ class JarRepositoryManagerTest : UsefulTestCase() {
assertTrue("File name [${root.file.name} should contain '$expectedName'", root.file.name.contains(expectedName))
}
@Test fun `test selection for snapshot`() {
MavenRepoFixture(myMavenRepo).apply {
addAnnotationsArtifact(version = "1-SNAPSHOT-an1")
generateMavenMetadata("myGroup", "myArtifact")
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "1-SNAPSHOT")
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
val result: List<OrderRoot>? = getResultingRoots(promise)
assertEquals(1, result?.size)
val root = result?.get(0)!!
assertEquals(AnnotationOrderRootType.getInstance(), root.type)
}
private fun getResultingRoots(promise: Promise<MutableList<OrderRoot>>): List<OrderRoot>? {