From c30fc78f8e0bf1360e7a39838ec52c00f31e8462 Mon Sep 17 00:00:00 2001 From: Sergey Mashkov Date: Fri, 1 Apr 2016 17:51:24 +0300 Subject: [PATCH] KT-11731 Default maven integration doesn't include documentation trigger sources download for stdlib/runtime/test at project import --- .../idea/configuration/KotlinMavenImporter.kt | 38 +++++++++++++++---- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/configuration/KotlinMavenImporter.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/configuration/KotlinMavenImporter.kt index 64ac29e0656..2c3f4bfda34 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/configuration/KotlinMavenImporter.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/configuration/KotlinMavenImporter.kt @@ -16,22 +16,21 @@ package org.jetbrains.kotlin.idea.configuration -import com.intellij.openapi.components.PersistentStateComponent -import com.intellij.openapi.components.State -import com.intellij.openapi.components.Storage -import com.intellij.openapi.components.StoragePathMacros +import com.intellij.openapi.components.* import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.OrderEnumerator +import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.libraries.Library +import com.intellij.openapi.util.AsyncResult import org.jdom.Element import org.jetbrains.idea.maven.importing.MavenImporter import org.jetbrains.idea.maven.importing.MavenRootModelAdapter import org.jetbrains.idea.maven.model.MavenPlugin -import org.jetbrains.idea.maven.project.MavenProject -import org.jetbrains.idea.maven.project.MavenProjectChanges -import org.jetbrains.idea.maven.project.MavenProjectsProcessorTask -import org.jetbrains.idea.maven.project.MavenProjectsTree +import org.jetbrains.idea.maven.project.* import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.module.JpsModuleSourceRootType +import org.jetbrains.kotlin.idea.util.projectStructure.findLibrary import java.io.File import java.util.* @@ -57,6 +56,29 @@ class KotlinMavenImporter : MavenImporter(KotlinPluginGroupId, KotlinPluginArtif } } + override fun postProcess(module: Module, mavenProject: MavenProject, changes: MavenProjectChanges, modifiableModelsProvider: IdeModifiableModelsProvider) { + super.postProcess(module, mavenProject, changes, modifiableModelsProvider) + + if (changes.dependencies) { + // TODO: here we have to process all kotlin libraries but for now we only handle standard libraries + val artifacts = mavenProject.dependencyArtifactIndex.data[KotlinPluginGroupId]?.values?.flatMap { it.filter { it.isResolved } } ?: emptyList() + + val librariesWithNoSources = ArrayList() + OrderEnumerator.orderEntries(module).forEachLibrary { library -> + if (library.modifiableModel.getFiles(OrderRootType.SOURCES).isEmpty()) { + librariesWithNoSources.add(library) + } + true + } + val libraryNames = librariesWithNoSources.mapTo(HashSet()) { it.name } + val toBeDownloaded = artifacts.filter { it.libraryName in libraryNames } + + if (toBeDownloaded.isNotEmpty()) { + MavenProjectsManager.getInstance(module.project).scheduleArtifactsDownloading(listOf(mavenProject), toBeDownloaded, true, false, AsyncResult()) + } + } + } + // TODO in theory it should work like this but it doesn't as it couldn't unmark source roots that are not roots anymore. // I believe this is something should be done by the underlying maven importer implementation or somewhere else in the IDEA // For now there is a contributeSourceDirectories implementation that deals with the issue