From 8cd0f13f2b8d2f04c1ae85fe6676d5e017ec6fc8 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Tue, 3 Apr 2018 02:31:50 +0300 Subject: [PATCH] Convert KotlinSourceFileCollector: simplify after conversion --- .../jps/build/KotlinSourceFileCollector.kt | 47 +++++++------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.kt index 7650a1ad10d..9a32e094267 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinSourceFileCollector.kt @@ -16,13 +16,9 @@ package org.jetbrains.kotlin.jps.build -import com.intellij.openapi.util.io.FileUtil 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 org.jetbrains.jps.builders.DirtyFilesHolder -import org.jetbrains.jps.builders.FileProcessor import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor import org.jetbrains.jps.incremental.ModuleBuildTarget import org.jetbrains.jps.model.java.JavaSourceRootProperties @@ -38,52 +34,41 @@ object KotlinSourceFileCollector { fun getDirtySourceFiles(dirtyFilesHolder: DirtyFilesHolder): MultiMap { val result = MultiMap() - 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 - if (root.getTarget() != target) { - return@FileProcessor true - } - - if (isKotlinSourceFile(file)) { + if (root.getTarget() == target && isKotlinSourceFile(file)) { result.putValue(target, file) } true - }) + } return result } fun getRemovedKotlinFiles( dirtyFilesHolder: DirtyFilesHolder, target: ModuleBuildTarget - ): List { - return ContainerUtil.map(ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target)) { s -> FileUtilRt.extensionEquals(s, "kt") } - ) { s -> File(s) } - } + ): List = + dirtyFilesHolder + .getRemovedFiles(target) + .mapNotNull { if (FileUtilRt.extensionEquals(it, "kt")) File(it) else null } fun getAllKotlinSourceFiles(target: ModuleBuildTarget): List { - 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 - val result = ContainerUtil.newArrayList() + val allKotlinFiles = ArrayList() for (sourceRoot in getRelevantSourceRoots(target)) { - FileUtil.processFilesRecursively( - sourceRoot.file, - Processor { file -> - 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 }) + sourceRoot.file.walkTopDown() + .onEnter { it !in moduleExcludes } + .filterTo(allKotlinFiles) { !compilerExcludes.isExcluded(it) && it.isFile && isKotlinSourceFile(it) } } - return result + return allKotlinFiles } - fun getRelevantSourceRoots(target: ModuleBuildTarget): Iterable { + private fun getRelevantSourceRoots(target: ModuleBuildTarget): Iterable { val sourceRootType = if (target.isTests) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE return target.module.getSourceRoots(sourceRootType) }