Wizard: fix invalid repository when downloading jars for JPS
#KT-37956 fixed
This commit is contained in:
+48
-18
@@ -9,10 +9,12 @@ import com.intellij.codeInsight.daemon.impl.quickfix.OrderEntryFix
|
||||
import com.intellij.ide.impl.NewProjectUtil
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder
|
||||
import com.intellij.jarRepository.JarRepositoryManager
|
||||
import com.intellij.jarRepository.RemoteRepositoryDescription
|
||||
import com.intellij.openapi.module.ModifiableModuleModel
|
||||
import com.intellij.openapi.module.ModuleTypeId
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.*
|
||||
import com.intellij.openapi.roots.libraries.ui.OrderRoot
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.util.PathUtil
|
||||
import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties
|
||||
@@ -30,6 +32,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetTy
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.IdeWizard
|
||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.NewProjectWizardModuleBuilder
|
||||
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
import com.intellij.openapi.module.Module as IdeaModule
|
||||
@@ -147,18 +150,13 @@ private class ProjectImporter(
|
||||
module: IdeaModule
|
||||
) {
|
||||
val artifact = libraryDependency.artifact as? MavenArtifact ?: return
|
||||
val libraryProperties = RepositoryLibraryProperties(
|
||||
artifact.groupId,
|
||||
artifact.artifactId,
|
||||
libraryDependency.version.toString()
|
||||
)
|
||||
val classesRoots = downloadLibraryAndGetItsClasses(libraryProperties)
|
||||
val (classesRoots, sourcesRoots) = downloadLibraryAndGetItsClasses(libraryDependency, artifact)
|
||||
|
||||
ModuleRootModificationUtil.addModuleLibrary(
|
||||
module,
|
||||
if (classesRoots.size > 1) libraryProperties.artifactId else null,
|
||||
OrderEntryFix.refreshAndConvertToUrls(classesRoots),
|
||||
emptyList(),
|
||||
if (classesRoots.size > 1) artifact.artifactId else null,
|
||||
classesRoots,
|
||||
sourcesRoots,
|
||||
when (libraryDependency.dependencyType) {
|
||||
DependencyType.MAIN -> DependencyScope.COMPILE
|
||||
DependencyType.TEST -> DependencyScope.TEST
|
||||
@@ -166,18 +164,50 @@ private class ProjectImporter(
|
||||
)
|
||||
}
|
||||
|
||||
private fun downloadLibraryAndGetItsClasses(libraryProperties: RepositoryLibraryProperties) =
|
||||
JarRepositoryManager.loadDependenciesModal(
|
||||
private fun downloadLibraryAndGetItsClasses(
|
||||
libraryDependency: LibraryDependencyIR,
|
||||
artifact: MavenArtifact
|
||||
): LibraryClassesAndSources {
|
||||
val libraryProperties = RepositoryLibraryProperties(
|
||||
artifact.groupId,
|
||||
artifact.artifactId,
|
||||
libraryDependency.version.toString()
|
||||
)
|
||||
val orderRoots = JarRepositoryManager.loadDependenciesModal(
|
||||
project,
|
||||
libraryProperties,
|
||||
false,
|
||||
false,
|
||||
true,
|
||||
true,
|
||||
librariesPath.toString(),
|
||||
null
|
||||
).asSequence()
|
||||
.filter { it.type == OrderRootType.CLASSES }
|
||||
.map { PathUtil.getLocalPath(it.file) }
|
||||
.toList()
|
||||
listOf(artifact.repository.asJPSRepository())
|
||||
)
|
||||
|
||||
return LibraryClassesAndSources.fromOrderRoots(orderRoots)
|
||||
}
|
||||
|
||||
private fun Repository.asJPSRepository() = RemoteRepositoryDescription(
|
||||
idForMaven,
|
||||
idForMaven,
|
||||
url
|
||||
)
|
||||
|
||||
private data class LibraryClassesAndSources(
|
||||
val classes: List<String>,
|
||||
val sources: List<String>
|
||||
) {
|
||||
companion object {
|
||||
fun fromOrderRoots(orderRoots: Collection<OrderRoot>) = LibraryClassesAndSources(
|
||||
orderRoots.filterRootTypes(OrderRootType.CLASSES),
|
||||
orderRoots.filterRootTypes(OrderRootType.SOURCES)
|
||||
)
|
||||
|
||||
private fun Collection<OrderRoot>.filterRootTypes(rootType: OrderRootType) =
|
||||
filter { it.type == rootType }
|
||||
.mapNotNull { PathUtil.getLocalPath(it.file) }
|
||||
.let(OrderEntryFix::refreshAndConvertToUrls)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val Path.url
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
||||
gradlePluginPortal()
|
||||
google()
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
resolutionStrategy {
|
||||
eachPlugin {
|
||||
|
||||
+7
-3
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.Versions
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repositories
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
@@ -27,9 +28,12 @@ val Version.kotlinVersionKind
|
||||
else -> KotlinVersionKind.STABLE
|
||||
}
|
||||
|
||||
enum class KotlinVersionKind(val repository: Repository?) {
|
||||
STABLE(repository = null),
|
||||
enum class KotlinVersionKind(val repository: Repository) {
|
||||
STABLE(repository = DefaultRepository.MAVEN_CENTRAL),
|
||||
EAP(repository = Repositories.KOTLIN_EAP_BINTRAY),
|
||||
DEV(repository = Repositories.KOTLIN_DEV_BINTRAY),
|
||||
M(repository = Repositories.KOTLIN_EAP_BINTRAY)
|
||||
}
|
||||
}
|
||||
|
||||
val KotlinVersionKind.isStable
|
||||
get() = this == KotlinVersionKind.STABLE
|
||||
+3
-1
@@ -1,5 +1,6 @@
|
||||
package org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem
|
||||
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.library.LibraryArtifact
|
||||
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
|
||||
@@ -9,6 +10,7 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.MavenPrinter
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository.Companion.MAVEN_CENTRAL
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModulePath
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.SourcesetType
|
||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||
|
||||
@@ -117,7 +119,7 @@ abstract class KotlinLibraryDependencyIR(
|
||||
|
||||
override val artifact: LibraryArtifact
|
||||
get() = MavenArtifact(
|
||||
MAVEN_CENTRAL,
|
||||
version.kotlinVersionKind.repository,
|
||||
"org.jetbrains.kotlin",
|
||||
"kotlin-$artifactName"
|
||||
)
|
||||
|
||||
+5
-4
@@ -6,9 +6,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.fold
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
|
||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.*
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.RepositoryIR
|
||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
||||
@@ -94,7 +92,10 @@ class KotlinPlugin(context: Context) : Plugin(context) {
|
||||
val createPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||
runBefore(BuildSystemPlugin::createModules)
|
||||
withAction {
|
||||
val pluginRepository = KotlinPlugin::version.propertyValue.kotlinVersionKind.repository ?: return@withAction UNIT_SUCCESS
|
||||
val pluginRepository = KotlinPlugin::version.propertyValue.kotlinVersionKind
|
||||
.takeUnless(KotlinVersionKind::isStable)
|
||||
?.repository
|
||||
?: return@withAction UNIT_SUCCESS
|
||||
BuildSystemPlugin::pluginRepositoreis.addValues(pluginRepository) andThen
|
||||
updateBuildFiles { buildFile ->
|
||||
buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess()
|
||||
|
||||
Reference in New Issue
Block a user