Convert KotlinSourceFileCollector: simplify after conversion
This commit is contained in:
@@ -16,13 +16,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.build
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil
|
|
||||||
import com.intellij.openapi.util.io.FileUtilRt
|
import com.intellij.openapi.util.io.FileUtilRt
|
||||||
import com.intellij.util.Processor
|
|
||||||
import com.intellij.util.containers.ContainerUtil
|
|
||||||
import com.intellij.util.containers.MultiMap
|
import com.intellij.util.containers.MultiMap
|
||||||
import org.jetbrains.jps.builders.DirtyFilesHolder
|
import org.jetbrains.jps.builders.DirtyFilesHolder
|
||||||
import org.jetbrains.jps.builders.FileProcessor
|
|
||||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
||||||
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||||
@@ -38,52 +34,41 @@ object KotlinSourceFileCollector {
|
|||||||
fun getDirtySourceFiles(dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>): MultiMap<ModuleBuildTarget, File> {
|
fun getDirtySourceFiles(dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>): MultiMap<ModuleBuildTarget, File> {
|
||||||
val result = MultiMap<ModuleBuildTarget, File>()
|
val result = MultiMap<ModuleBuildTarget, File>()
|
||||||
|
|
||||||
dirtyFilesHolder.processDirtyFiles(FileProcessor { target, file, root ->
|
dirtyFilesHolder.processDirtyFiles { target, file, root ->
|
||||||
//TODO this is a workaround for bug in JPS: the latter erroneously calls process with invalid parameters
|
//TODO this is a workaround for bug in JPS: the latter erroneously calls process with invalid parameters
|
||||||
if (root.getTarget() != target) {
|
if (root.getTarget() == target && isKotlinSourceFile(file)) {
|
||||||
return@FileProcessor true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isKotlinSourceFile(file)) {
|
|
||||||
result.putValue(target, file)
|
result.putValue(target, file)
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
})
|
}
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRemovedKotlinFiles(
|
fun getRemovedKotlinFiles(
|
||||||
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
|
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
|
||||||
target: ModuleBuildTarget
|
target: ModuleBuildTarget
|
||||||
): List<File> {
|
): List<File> =
|
||||||
return ContainerUtil.map(ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target)) { s -> FileUtilRt.extensionEquals(s, "kt") }
|
dirtyFilesHolder
|
||||||
) { s -> File(s) }
|
.getRemovedFiles(target)
|
||||||
}
|
.mapNotNull { if (FileUtilRt.extensionEquals(it, "kt")) File(it) else null }
|
||||||
|
|
||||||
fun getAllKotlinSourceFiles(target: ModuleBuildTarget): List<File> {
|
fun getAllKotlinSourceFiles(target: ModuleBuildTarget): List<File> {
|
||||||
val moduleExcludes = ContainerUtil.map(target.module.excludeRootsList.urls) { url -> JpsPathUtil.urlToFile(url) }
|
val moduleExcludes = target.module.excludeRootsList.urls.mapTo(HashSet(), JpsPathUtil::urlToFile)
|
||||||
|
|
||||||
val compilerExcludes = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(target.module.project)
|
val compilerExcludes = JpsJavaExtensionService.getInstance()
|
||||||
|
.getOrCreateCompilerConfiguration(target.module.project)
|
||||||
.compilerExcludes
|
.compilerExcludes
|
||||||
|
|
||||||
val result = ContainerUtil.newArrayList<File>()
|
val allKotlinFiles = ArrayList<File>()
|
||||||
for (sourceRoot in getRelevantSourceRoots(target)) {
|
for (sourceRoot in getRelevantSourceRoots(target)) {
|
||||||
FileUtil.processFilesRecursively(
|
sourceRoot.file.walkTopDown()
|
||||||
sourceRoot.file,
|
.onEnter { it !in moduleExcludes }
|
||||||
Processor { file ->
|
.filterTo(allKotlinFiles) { !compilerExcludes.isExcluded(it) && it.isFile && isKotlinSourceFile(it) }
|
||||||
if (compilerExcludes.isExcluded(file)) return@Processor true
|
|
||||||
|
|
||||||
if (file.isFile && isKotlinSourceFile(file)) {
|
|
||||||
result.add(file)
|
|
||||||
}
|
|
||||||
true
|
|
||||||
},
|
|
||||||
Processor { dir -> ContainerUtil.find(moduleExcludes) { exclude -> FileUtil.filesEqual(exclude, dir) } == null })
|
|
||||||
}
|
}
|
||||||
return result
|
return allKotlinFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getRelevantSourceRoots(target: ModuleBuildTarget): Iterable<JpsModuleSourceRoot> {
|
private fun getRelevantSourceRoots(target: ModuleBuildTarget): Iterable<JpsModuleSourceRoot> {
|
||||||
val sourceRootType = if (target.isTests) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
val sourceRootType = if (target.isTests) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||||
return target.module.getSourceRoots<JavaSourceRootProperties>(sourceRootType)
|
return target.module.getSourceRoots<JavaSourceRootProperties>(sourceRootType)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user