CreateActualFix: should create source root directory if it doesn't exist

#KT-27555 Fixed
This commit is contained in:
Dmitry Gridin
2019-07-11 17:51:54 +03:00
parent f310bd3324
commit fc45948da6
@@ -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<VirtualFile> {
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<PsiDirectory> =
rootPackage.getDirectories(GlobalSearchScope.moduleScope(module))