From 83f9db33ce75e62f45a1fa0271314b1285ea8759 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 18 Aug 2015 20:56:12 +0300 Subject: [PATCH] Don't filter class files and jars from build script. Get a warning about their absence. Original commit: 5b3c05d03965f772e2625999845b61d7bcf61c07 --- .../KotlinBuilderModuleScriptGenerator.java | 12 ++++++++- .../build/AbstractKotlinJpsBuildTestCase.java | 8 ++++-- .../kotlin/jps/build/KotlinJpsBuildTest.kt | 26 +++++++++++++++++++ .../FileDoesNotExistWarning/kotlinProject.ipr | 14 ++++++++++ .../FileDoesNotExistWarning/module.iml | 11 ++++++++ .../FileDoesNotExistWarning/src/Bar.kt | 3 +++ 6 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 jps/jps-plugin/testData/general/FileDoesNotExistWarning/kotlinProject.ipr create mode 100644 jps/jps-plugin/testData/general/FileDoesNotExistWarning/module.iml create mode 100644 jps/jps-plugin/testData/general/FileDoesNotExistWarning/src/Bar.kt diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java index 5f3c1397d04..b4913701685 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import kotlin.KotlinPackage; +import kotlin.io.IoPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ModuleChunk; @@ -117,7 +118,16 @@ public class KotlinBuilderModuleScriptGenerator { return ContainerUtil.filter(getAllDependencies(target).classes().getRoots(), new Condition() { @Override public boolean value(File file) { - return file.exists(); + if (!file.exists()) { + String extension = IoPackage.getExtension(file); + + // Don't filter out files, we want to report warnings about absence through the common place + if (!(extension.equals("class") || extension.equals("jar"))) { + return false; + } + } + + return true; } }); } diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.java b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.java index 2d58b1bf060..c72a724e30f 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.java +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.java @@ -105,9 +105,13 @@ public abstract class AbstractKotlinJpsBuildTestCase extends JpsBuildTestCase { return addDependency(type, modules, exported, "KotlinJavaScript", PathUtil.getKotlinPathsForDistDirectory().getJsStdLibJarPath()); } - protected static JpsLibrary addDependency(JpsJavaDependencyScope type, Collection modules, boolean exported, String libraryName, File file) { + protected static JpsLibrary addDependency(JpsJavaDependencyScope type, Collection modules, boolean exported, String libraryName, File... file) { JpsLibrary library = modules.iterator().next().getProject().addLibrary(libraryName, JpsJavaLibraryType.INSTANCE); - library.addRoot(file, JpsOrderRootType.COMPILED); + + for (File fileRoot : file) { + library.addRoot(fileRoot, JpsOrderRootType.COMPILED); + } + for (JpsModule module : modules) { JpsModuleRootModificationUtil.addDependency(module, library, type, exported); } diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 2d52adb3e56..e6ad036a5ed 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -49,6 +49,7 @@ import org.jetbrains.org.objectweb.asm.ClassReader import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.MethodVisitor import org.jetbrains.org.objectweb.asm.Opcodes +import org.junit.Assert import java.io.* import java.util.Arrays import java.util.Collections @@ -592,6 +593,31 @@ public class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { assertFilesNotExistInOutput(module, "foo/Bar.class") } + public fun testFileDoesNotExistWarning() { + initProject() + + AbstractKotlinJpsBuildTestCase.addDependency( + JpsJavaDependencyScope.COMPILE, Lists.newArrayList(findModule("module")), false, "LibraryWithBadRoots", + File("badroot.jar"), + File("test/other/file.xml"), + File("some/test.class"), + File("some/other/baddir")) + + val result = makeAll() + result.assertSuccessful() + + val warnings = result.getMessages(BuildMessage.Kind.WARNING) + + Assert.assertArrayEquals( + arrayOf( + """Classpath entry points to a non-existent location: TEST_PATH/badroot.jar""", + """Classpath entry points to a non-existent location: TEST_PATH/some/test.class"""), + warnings.map { + it.messageText.replace(File("").absolutePath, "TEST_PATH").replace("\\", "/") + }.sort().toTypedArray() + ) + } + private fun buildCustom(canceledStatus: CanceledStatus, logger: TestProjectBuilderLogger,buildResult: BuildResult) { val scopeBuilder = CompileScopeTestBuilder.make().all() val descriptor = this.createProjectDescriptor(BuildLoggingManager(logger)) diff --git a/jps/jps-plugin/testData/general/FileDoesNotExistWarning/kotlinProject.ipr b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/kotlinProject.ipr new file mode 100644 index 00000000000..04d418ca179 --- /dev/null +++ b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/kotlinProject.ipr @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/FileDoesNotExistWarning/module.iml b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/module.iml new file mode 100644 index 00000000000..4c925d6cab7 --- /dev/null +++ b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/module.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/FileDoesNotExistWarning/src/Bar.kt b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/src/Bar.kt new file mode 100644 index 00000000000..2c990ada4c7 --- /dev/null +++ b/jps/jps-plugin/testData/general/FileDoesNotExistWarning/src/Bar.kt @@ -0,0 +1,3 @@ +package foo + +class Bar