CreateActualFix: should create source root directory if it doesn't exist
#KT-27555 Fixed
This commit is contained in:
@@ -13,10 +13,12 @@ import com.intellij.openapi.module.ModuleUtil
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ModulePackageIndex
|
import com.intellij.openapi.roots.ModulePackageIndex
|
||||||
import com.intellij.openapi.roots.ModuleRootManager
|
import com.intellij.openapi.roots.ModuleRootManager
|
||||||
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.util.Query
|
import com.intellij.util.Query
|
||||||
|
import com.intellij.util.io.parentSystemIndependentPath
|
||||||
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes
|
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
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.psi.KtFile
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.net.URI
|
||||||
|
import java.nio.file.Paths
|
||||||
|
|
||||||
fun PsiDirectory.getPackage(): PsiPackage? = JavaDirectoryService.getInstance()!!.getPackage(this)
|
fun PsiDirectory.getPackage(): PsiPackage? = JavaDirectoryService.getInstance()!!.getPackage(this)
|
||||||
|
|
||||||
@@ -110,13 +114,21 @@ private fun Module.getOrConfigureKotlinSourceRoots(): List<VirtualFile> {
|
|||||||
return sourceRoots
|
return sourceRoots
|
||||||
}
|
}
|
||||||
return runWriteAction {
|
return runWriteAction {
|
||||||
val rootDir = rootManager.contentRoots.firstOrNull()
|
getOrCreateRootDirectory()?.createChildDirectory(project, "kotlin")
|
||||||
rootDir?.createChildDirectory(project, "kotlin")
|
|
||||||
project.invalidateProjectRoots()
|
project.invalidateProjectRoots()
|
||||||
getNonGeneratedKotlinSourceRoots()
|
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> =
|
private fun getPackageDirectoriesInModule(rootPackage: PsiPackage, module: Module): Array<PsiDirectory> =
|
||||||
rootPackage.getDirectories(GlobalSearchScope.moduleScope(module))
|
rootPackage.getDirectories(GlobalSearchScope.moduleScope(module))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user