change external annotations artifact naming convention IDEA-201598

Instead of 'annotations' classifier, use modified artifactsId in form of <artifactId>-annotations
This is required to resolve annotation artifacts revision numbers separately from revision of original artifact
This commit is contained in:
Nikita Skvortsov
2018-11-06 14:58:02 +03:00
parent 95a1b1bed0
commit a4b60eddd5
6 changed files with 76 additions and 33 deletions
@@ -21,7 +21,7 @@ import java.util.EnumSet;
public enum ArtifactKind {
ARTIFACT("", "jar"), SOURCES("sources", "jar"), JAVADOC("javadoc", "jar"),
ANNOTATIONS("annotations", "zip"), AAR_ARTIFACT("", "aar");
ANNOTATIONS("", "zip"), AAR_ARTIFACT("", "aar");
private final String myClassifier;
private final String myExtension;
@@ -220,8 +220,9 @@ public class ArtifactRepositoryManager {
Artifact newArtifact = artifact.setVersion(result.getHighestVersion().toString());
requests.add(new ArtifactRequest(newArtifact, Collections.unmodifiableList(myRemoteRepositories), null));
}
} else {
requests.add(new ArtifactRequest(artifact, Collections.unmodifiableList(myRemoteRepositories), null));
}
requests.add(new ArtifactRequest(artifact, Collections.unmodifiableList(myRemoteRepositories), null));
}
}
@@ -81,10 +81,18 @@ class ExternalAnnotationsRepositoryResolver : ExternalAnnotationsArtifactsResolv
private fun extractDescriptor(mavenId: String?,
library: Library): JpsMavenRepositoryLibraryDescriptor? = when {
mavenId != null -> JpsMavenRepositoryLibraryDescriptor(mavenId, false, emptyList())
mavenId != null -> JpsMavenRepositoryLibraryDescriptor(patchArtifactId(mavenId), false, emptyList())
library is LibraryEx -> (library.properties as? RepositoryLibraryProperties)
?.run { JpsMavenRepositoryLibraryDescriptor(groupId, artifactId, version) }
?.run { JpsMavenRepositoryLibraryDescriptor(groupId, "$artifactId-annotations", version) }
else -> null
}
private fun patchArtifactId(mavenId: String): String {
val components = mavenId.split(':', limit = 3)
if (components.size < 3) {
return mavenId
}
return "${components[0]}:${components[1]}-annotations:${components[2]}"
}
}
@@ -91,6 +91,27 @@ class ExternalAnnotationsRepositoryResolverTest: UsefulTestCase() {
assertTrue(library.getFiles(AnnotationOrderRootType.getInstance()).isNotEmpty())
}
@Test fun `test select annotations artifact when newer library artifacts are available`() {
val resolver = ExternalAnnotationsRepositoryResolver()
val libraryTable = LibraryTablesRegistrar.getInstance().libraryTable
val library = WriteAction.compute<Library, RuntimeException> { libraryTable.createLibrary("NewLibrary") }
RemoteRepositoriesConfiguration.getInstance(myProject).repositories = listOf(myTestRepo)
MavenRepoFixture(myMavenRepo).apply {
addLibraryArtifact(version = "1.0")
addAnnotationsArtifact(version = "1.0")
addAnnotationsArtifact(version = "1.0-an1")
addLibraryArtifact(version = "1.1")
generateMavenMetadata("myGroup", "myArtifact")
}
resolver.resolve(myProject, library, "myGroup:myArtifact:1.1")
assertTrue("Annotations root is not attached to library", library.getFiles(AnnotationOrderRootType.getInstance()).isNotEmpty())
}
@Test fun `test annotations resolution overrides existing roots`() {
val resolver = ExternalAnnotationsRepositoryResolver()
val libraryTable = LibraryTablesRegistrar.getInstance().libraryTable
@@ -109,7 +130,7 @@ class ExternalAnnotationsRepositoryResolverTest: UsefulTestCase() {
}
resolver.resolve(myProject, library, "myGroup:myArtifact:1.0")
assertTrue(library.getUrls(AnnotationOrderRootType.getInstance()).single().endsWith("myGroup/myArtifact/1.0-an1/myArtifact-1.0-an1-annotations.zip!/"))
assertTrue(library.getUrls(AnnotationOrderRootType.getInstance()).single().endsWith("myGroup/myArtifact-annotations/1.0-an1/myArtifact-annotations-1.0-an1.zip!/"))
}
private fun <T> getResult(promise: Promise<T>): T? {
@@ -62,7 +62,7 @@ class JarRepositoryManagerTest : UsefulTestCase() {
generateMavenMetadata("myGroup", "myArtifact")
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "1.0")
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact-annotations", "1.0")
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
val result: List<OrderRoot>? = getResultingRoots(promise)
@@ -79,7 +79,7 @@ class JarRepositoryManagerTest : UsefulTestCase() {
generateMavenMetadata("myGroup", "myArtifact")
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "1.0",
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact-annotations", "1.0",
false, emptyList())
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
@@ -99,7 +99,7 @@ class JarRepositoryManagerTest : UsefulTestCase() {
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "1.0")
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact-annotations", "1.0")
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
val result: List<OrderRoot>? = getResultingRoots(promise)
@@ -121,7 +121,7 @@ class JarRepositoryManagerTest : UsefulTestCase() {
name
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "2.5")
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact-annotations", "2.5")
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
val result: List<OrderRoot>? = getResultingRoots(promise)
@@ -145,7 +145,7 @@ class JarRepositoryManagerTest : UsefulTestCase() {
name
}
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact", "[2.0, 2.1)")
val description = JpsMavenRepositoryLibraryDescriptor("myGroup", "myArtifact-annotations", "[2.0, 2.1)")
val promise: Promise<MutableList<OrderRoot>> = JarRepositoryManager.loadDependenciesAsync(myProject, description, setOf(ArtifactKind.ANNOTATIONS),
listOf(myTestRepo), null)
val result: List<OrderRoot>? = getResultingRoots(promise)
@@ -5,31 +5,43 @@ import java.io.File
class MavenRepoFixture(private val myMavenRepo: File) {
public fun addAnnotationsArtifact(group: String = "myGroup",
artifact: String = "myArtifact",
version: String)
: String = File(myMavenRepo, "$group/$artifact/$version/$artifact-$version-annotations.zip")
.apply {
parentFile.mkdirs()
writeText("Fake annotations artifact")
}.name
public fun generateMavenMetadata(group: String, artifact: String) {
val metadata = File(myMavenRepo, "$group/$artifact/maven-metadata.xml")
public fun addLibraryArtifact(group: String = "myGroup",
artifact: String = "myArtifact",
version: String)
: String = File(myMavenRepo, "$group/$artifact/$version/$artifact-$version.jar")
.apply {
parentFile.mkdirs()
}
writeText("Fake library artifact")
}.name
val versionsList = metadata.parentFile
.listFiles()
.asSequence()
.filter { it.isDirectory }
.map { it.name }
.toList()
public fun addAnnotationsArtifact(group: String = "myGroup",
artifact: String = "myArtifact",
version: String)
: String = File(myMavenRepo, "$group/$artifact-annotations/$version/$artifact-annotations-$version.zip")
.apply {
parentFile.mkdirs()
writeText("Fake annotations artifact")
}.name
val releaseVersion = versionsList.last()
public fun generateMavenMetadata(group: String, artifact: String) {
val files = listOf(File(myMavenRepo, "$group/$artifact/maven-metadata.xml"),
File(myMavenRepo, "$group/$artifact-annotations/maven-metadata.xml"))
for (metadata in files) {
metadata.parentFile.mkdirs()
val versionsList = metadata.parentFile
.listFiles()
.asSequence()
.filter { it.isDirectory }
.map { it.name }
.toList()
metadata.writeText("""
if (versionsList.isEmpty()) {
continue
}
val releaseVersion = versionsList.last()
metadata.writeText("""
|<?xml version="1.0" encoding="UTF-8"?>
|<metadata>
| <groupId>$group</groupId>
@@ -39,12 +51,13 @@ public fun generateMavenMetadata(group: String, artifact: String) {
| <latest>$releaseVersion</latest>
| <release>$releaseVersion</release>
| <versions>
| ${versionsList.joinToString(separator = "\n") { "<version>$it</version>" } }
| ${versionsList.joinToString(separator = "\n") { "<version>$it</version>" }}
| </versions>
| <lastUpdated>20180809190315</lastUpdated>
| </versioning>
|</metadata>
""".trimMargin())
}
}
}
}
}