Convert KotlinSourceFileCollector: simplify after conversion

This commit is contained in:
Alexey Tsvetkov
2018-04-03 02:31:50 +03:00
parent 3f36f472b3
commit 8cd0f13f2b
@@ -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)
} }