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.impl.NewProjectUtil
|
||||||
import com.intellij.ide.util.projectWizard.ModuleBuilder
|
import com.intellij.ide.util.projectWizard.ModuleBuilder
|
||||||
import com.intellij.jarRepository.JarRepositoryManager
|
import com.intellij.jarRepository.JarRepositoryManager
|
||||||
|
import com.intellij.jarRepository.RemoteRepositoryDescription
|
||||||
import com.intellij.openapi.module.ModifiableModuleModel
|
import com.intellij.openapi.module.ModifiableModuleModel
|
||||||
import com.intellij.openapi.module.ModuleTypeId
|
import com.intellij.openapi.module.ModuleTypeId
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.*
|
import com.intellij.openapi.roots.*
|
||||||
|
import com.intellij.openapi.roots.libraries.ui.OrderRoot
|
||||||
import com.intellij.openapi.vfs.VfsUtil
|
import com.intellij.openapi.vfs.VfsUtil
|
||||||
import com.intellij.util.PathUtil
|
import com.intellij.util.PathUtil
|
||||||
import org.jetbrains.idea.maven.utils.library.RepositoryLibraryProperties
|
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.IdeWizard
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.wizard.NewProjectWizardModuleBuilder
|
import org.jetbrains.kotlin.tools.projectWizard.wizard.NewProjectWizardModuleBuilder
|
||||||
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import com.intellij.openapi.module.Module as IdeaModule
|
import com.intellij.openapi.module.Module as IdeaModule
|
||||||
@@ -147,18 +150,13 @@ private class ProjectImporter(
|
|||||||
module: IdeaModule
|
module: IdeaModule
|
||||||
) {
|
) {
|
||||||
val artifact = libraryDependency.artifact as? MavenArtifact ?: return
|
val artifact = libraryDependency.artifact as? MavenArtifact ?: return
|
||||||
val libraryProperties = RepositoryLibraryProperties(
|
val (classesRoots, sourcesRoots) = downloadLibraryAndGetItsClasses(libraryDependency, artifact)
|
||||||
artifact.groupId,
|
|
||||||
artifact.artifactId,
|
|
||||||
libraryDependency.version.toString()
|
|
||||||
)
|
|
||||||
val classesRoots = downloadLibraryAndGetItsClasses(libraryProperties)
|
|
||||||
|
|
||||||
ModuleRootModificationUtil.addModuleLibrary(
|
ModuleRootModificationUtil.addModuleLibrary(
|
||||||
module,
|
module,
|
||||||
if (classesRoots.size > 1) libraryProperties.artifactId else null,
|
if (classesRoots.size > 1) artifact.artifactId else null,
|
||||||
OrderEntryFix.refreshAndConvertToUrls(classesRoots),
|
classesRoots,
|
||||||
emptyList(),
|
sourcesRoots,
|
||||||
when (libraryDependency.dependencyType) {
|
when (libraryDependency.dependencyType) {
|
||||||
DependencyType.MAIN -> DependencyScope.COMPILE
|
DependencyType.MAIN -> DependencyScope.COMPILE
|
||||||
DependencyType.TEST -> DependencyScope.TEST
|
DependencyType.TEST -> DependencyScope.TEST
|
||||||
@@ -166,18 +164,50 @@ private class ProjectImporter(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun downloadLibraryAndGetItsClasses(libraryProperties: RepositoryLibraryProperties) =
|
private fun downloadLibraryAndGetItsClasses(
|
||||||
JarRepositoryManager.loadDependenciesModal(
|
libraryDependency: LibraryDependencyIR,
|
||||||
|
artifact: MavenArtifact
|
||||||
|
): LibraryClassesAndSources {
|
||||||
|
val libraryProperties = RepositoryLibraryProperties(
|
||||||
|
artifact.groupId,
|
||||||
|
artifact.artifactId,
|
||||||
|
libraryDependency.version.toString()
|
||||||
|
)
|
||||||
|
val orderRoots = JarRepositoryManager.loadDependenciesModal(
|
||||||
project,
|
project,
|
||||||
libraryProperties,
|
libraryProperties,
|
||||||
false,
|
true,
|
||||||
false,
|
true,
|
||||||
librariesPath.toString(),
|
librariesPath.toString(),
|
||||||
null
|
listOf(artifact.repository.asJPSRepository())
|
||||||
).asSequence()
|
)
|
||||||
.filter { it.type == OrderRootType.CLASSES }
|
|
||||||
.map { PathUtil.getLocalPath(it.file) }
|
return LibraryClassesAndSources.fromOrderRoots(orderRoots)
|
||||||
.toList()
|
}
|
||||||
|
|
||||||
|
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
|
private val Path.url
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+1
@@ -3,6 +3,7 @@ pluginManagement {
|
|||||||
gradlePluginPortal()
|
gradlePluginPortal()
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
mavenCentral()
|
||||||
}
|
}
|
||||||
resolutionStrategy {
|
resolutionStrategy {
|
||||||
eachPlugin {
|
eachPlugin {
|
||||||
|
|||||||
+7
-3
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
package org.jetbrains.kotlin.tools.projectWizard.core.service
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.Versions
|
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.Repositories
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Repository
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
@@ -27,9 +28,12 @@ val Version.kotlinVersionKind
|
|||||||
else -> KotlinVersionKind.STABLE
|
else -> KotlinVersionKind.STABLE
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class KotlinVersionKind(val repository: Repository?) {
|
enum class KotlinVersionKind(val repository: Repository) {
|
||||||
STABLE(repository = null),
|
STABLE(repository = DefaultRepository.MAVEN_CENTRAL),
|
||||||
EAP(repository = Repositories.KOTLIN_EAP_BINTRAY),
|
EAP(repository = Repositories.KOTLIN_EAP_BINTRAY),
|
||||||
DEV(repository = Repositories.KOTLIN_DEV_BINTRAY),
|
DEV(repository = Repositories.KOTLIN_DEV_BINTRAY),
|
||||||
M(repository = Repositories.KOTLIN_EAP_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
|
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.ir.buildsystem.gradle.GradleIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.library.LibraryArtifact
|
import org.jetbrains.kotlin.tools.projectWizard.library.LibraryArtifact
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact
|
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.plugins.printer.MavenPrinter
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository.Companion.MAVEN_CENTRAL
|
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.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.buildsystem.SourcesetType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version
|
||||||
|
|
||||||
@@ -117,7 +119,7 @@ abstract class KotlinLibraryDependencyIR(
|
|||||||
|
|
||||||
override val artifact: LibraryArtifact
|
override val artifact: LibraryArtifact
|
||||||
get() = MavenArtifact(
|
get() = MavenArtifact(
|
||||||
MAVEN_CENTRAL,
|
version.kotlinVersionKind.repository,
|
||||||
"org.jetbrains.kotlin",
|
"org.jetbrains.kotlin",
|
||||||
"kotlin-$artifactName"
|
"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.ValidationResult
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.entity.fold
|
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.entity.settingValidator
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildFileIR
|
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.RepositoryIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.withIrs
|
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) {
|
val createPluginRepositories by pipelineTask(GenerationPhase.PROJECT_GENERATION) {
|
||||||
runBefore(BuildSystemPlugin::createModules)
|
runBefore(BuildSystemPlugin::createModules)
|
||||||
withAction {
|
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
|
BuildSystemPlugin::pluginRepositoreis.addValues(pluginRepository) andThen
|
||||||
updateBuildFiles { buildFile ->
|
updateBuildFiles { buildFile ->
|
||||||
buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess()
|
buildFile.withIrs(RepositoryIR(pluginRepository)).asSuccess()
|
||||||
|
|||||||
Reference in New Issue
Block a user