Convert KotlinSourceFileCollector: actual conversion
Original commit: 3f36f472b3
This commit is contained in:
@@ -14,128 +14,81 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.jps.build;
|
package org.jetbrains.kotlin.jps.build
|
||||||
|
|
||||||
import com.intellij.openapi.util.Condition;
|
import com.intellij.openapi.util.io.FileUtil
|
||||||
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.Function;
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.containers.MultiMap
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import org.jetbrains.jps.builders.DirtyFilesHolder
|
||||||
import com.intellij.util.containers.MultiMap;
|
import org.jetbrains.jps.builders.FileProcessor
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
||||||
import org.jetbrains.jps.builders.DirtyFilesHolder;
|
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||||
import org.jetbrains.jps.builders.FileProcessor;
|
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
|
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||||
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||||
import org.jetbrains.jps.model.java.JavaSourceRootType;
|
import org.jetbrains.jps.model.module.JpsModuleSourceRoot
|
||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
import org.jetbrains.jps.util.JpsPathUtil
|
||||||
import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes;
|
|
||||||
import org.jetbrains.jps.model.module.JpsModuleSourceRoot;
|
|
||||||
import org.jetbrains.jps.util.JpsPathUtil;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class KotlinSourceFileCollector {
|
object KotlinSourceFileCollector {
|
||||||
// For incremental compilation
|
// For incremental compilation
|
||||||
@NotNull
|
fun getDirtySourceFiles(dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>): MultiMap<ModuleBuildTarget, File> {
|
||||||
public static MultiMap<ModuleBuildTarget, File> getDirtySourceFiles(DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder)
|
val result = MultiMap<ModuleBuildTarget, File>()
|
||||||
throws IOException {
|
|
||||||
final MultiMap<ModuleBuildTarget, File> result = new MultiMap<ModuleBuildTarget, File>();
|
|
||||||
|
|
||||||
dirtyFilesHolder.processDirtyFiles(new FileProcessor<JavaSourceRootDescriptor, ModuleBuildTarget>() {
|
dirtyFilesHolder.processDirtyFiles(FileProcessor { target, file, root ->
|
||||||
@Override
|
//TODO this is a workaround for bug in JPS: the latter erroneously calls process with invalid parameters
|
||||||
public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor root) throws IOException {
|
if (root.getTarget() != target) {
|
||||||
//TODO this is a workaround for bug in JPS: the latter erroneously calls process with invalid parameters
|
return@FileProcessor true
|
||||||
if (!root.getTarget().equals(target)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isKotlinSourceFile(file)) {
|
|
||||||
result.putValue(target, file);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
return result;
|
if (isKotlinSourceFile(file)) {
|
||||||
|
result.putValue(target, file)
|
||||||
|
}
|
||||||
|
true
|
||||||
|
})
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
fun getRemovedKotlinFiles(
|
||||||
public static List<File> getRemovedKotlinFiles(
|
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
|
||||||
@NotNull DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
|
target: ModuleBuildTarget
|
||||||
@NotNull ModuleBuildTarget target
|
): List<File> {
|
||||||
) throws IOException {
|
return ContainerUtil.map(ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target)) { s -> FileUtilRt.extensionEquals(s, "kt") }
|
||||||
return ContainerUtil.map(ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target), new Condition<String>() {
|
) { s -> File(s) }
|
||||||
@Override
|
|
||||||
public boolean value(String s) {
|
|
||||||
return FileUtilRt.extensionEquals(s, "kt");
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
new Function<String, File>() {
|
|
||||||
@Override
|
|
||||||
public File fun(String s) {
|
|
||||||
return new File(s);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
fun getAllKotlinSourceFiles(target: ModuleBuildTarget): List<File> {
|
||||||
public static List<File> getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) {
|
val moduleExcludes = ContainerUtil.map(target.module.excludeRootsList.urls) { url -> JpsPathUtil.urlToFile(url) }
|
||||||
final List<File> moduleExcludes =
|
|
||||||
ContainerUtil.map(target.getModule().getExcludeRootsList().getUrls(), new Function<String, File>() {
|
|
||||||
@Override
|
|
||||||
public File fun(String url) {
|
|
||||||
return JpsPathUtil.urlToFile(url);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
final JpsCompilerExcludes compilerExcludes =
|
val compilerExcludes = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(target.module.project)
|
||||||
JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(target.getModule().getProject())
|
.compilerExcludes
|
||||||
.getCompilerExcludes();
|
|
||||||
|
|
||||||
final List<File> result = ContainerUtil.newArrayList();
|
val result = ContainerUtil.newArrayList<File>()
|
||||||
for (JpsModuleSourceRoot sourceRoot : getRelevantSourceRoots(target)) {
|
for (sourceRoot in getRelevantSourceRoots(target)) {
|
||||||
FileUtil.processFilesRecursively(
|
FileUtil.processFilesRecursively(
|
||||||
sourceRoot.getFile(),
|
sourceRoot.file,
|
||||||
new Processor<File>() {
|
Processor { file ->
|
||||||
@Override
|
if (compilerExcludes.isExcluded(file)) return@Processor true
|
||||||
public boolean process(File file) {
|
|
||||||
if (compilerExcludes.isExcluded(file)) return true;
|
|
||||||
|
|
||||||
if (file.isFile() && isKotlinSourceFile(file)) {
|
if (file.isFile && isKotlinSourceFile(file)) {
|
||||||
result.add(file);
|
result.add(file)
|
||||||
}
|
}
|
||||||
return true;
|
true
|
||||||
}
|
},
|
||||||
},
|
Processor { dir -> ContainerUtil.find(moduleExcludes) { exclude -> FileUtil.filesEqual(exclude, dir) } == null })
|
||||||
new Processor<File>() {
|
|
||||||
@Override
|
|
||||||
public boolean process(final File dir) {
|
|
||||||
return ContainerUtil.find(moduleExcludes, new Condition<File>() {
|
|
||||||
@Override
|
|
||||||
public boolean value(File exclude) {
|
|
||||||
return FileUtil.filesEqual(exclude, dir);
|
|
||||||
}
|
|
||||||
}) == null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
return result;
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Iterable<JpsModuleSourceRoot> getRelevantSourceRoots(ModuleBuildTarget target) {
|
fun getRelevantSourceRoots(target: ModuleBuildTarget): Iterable<JpsModuleSourceRoot> {
|
||||||
JavaSourceRootType sourceRootType = target.isTests() ? JavaSourceRootType.TEST_SOURCE : JavaSourceRootType.SOURCE;
|
val sourceRootType = if (target.isTests) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||||
|
return target.module.getSourceRoots<JavaSourceRootProperties>(sourceRootType)
|
||||||
//noinspection unchecked
|
|
||||||
return (Iterable) target.getModule().getSourceRoots(sourceRootType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static boolean isKotlinSourceFile(File file) {
|
internal fun isKotlinSourceFile(file: File): Boolean {
|
||||||
return FileUtilRt.extensionEquals(file.getName(), "kt");
|
return FileUtilRt.extensionEquals(file.name, "kt")
|
||||||
}
|
|
||||||
|
|
||||||
private KotlinSourceFileCollector() {
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user