diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt index a8437b57bfd..965a31756d2 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/packageUtils.kt @@ -13,10 +13,12 @@ import com.intellij.openapi.module.ModuleUtil import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ModulePackageIndex import com.intellij.openapi.roots.ModuleRootManager +import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.util.Query +import com.intellij.util.io.parentSystemIndependentPath import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes import org.jetbrains.jps.model.java.JavaSourceRootProperties import org.jetbrains.jps.model.module.JpsModuleSourceRootType @@ -31,6 +33,8 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.utils.addIfNotNull import java.io.File +import java.net.URI +import java.nio.file.Paths fun PsiDirectory.getPackage(): PsiPackage? = JavaDirectoryService.getInstance()!!.getPackage(this) @@ -110,13 +114,21 @@ private fun Module.getOrConfigureKotlinSourceRoots(): List { return sourceRoots } return runWriteAction { - val rootDir = rootManager.contentRoots.firstOrNull() - rootDir?.createChildDirectory(project, "kotlin") + getOrCreateRootDirectory()?.createChildDirectory(project, "kotlin") project.invalidateProjectRoots() getNonGeneratedKotlinSourceRoots() } } +private fun Module.getOrCreateRootDirectory(): VirtualFile? { + val contentEntry = rootManager.contentEntries.firstOrNull() ?: return null + contentEntry.file?.let { return it } + + val path = Paths.get(URI.create(contentEntry.url)) + val rootParent = LocalFileSystem.getInstance().findFileByPath(path.parentSystemIndependentPath) + return rootParent?.createChildDirectory(project, name.takeLastWhile { it != '.' }) +} + private fun getPackageDirectoriesInModule(rootPackage: PsiPackage, module: Module): Array = rootPackage.getDirectories(GlobalSearchScope.moduleScope(module))