diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 768602e29dc..26ac641283b 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.cli.jvm.compiler import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.StandardFileSystems +import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileManager import com.intellij.psi.PsiJavaModule @@ -130,8 +131,17 @@ object KotlinToJVMBytecodeCompiler { for (module in chunk) { ProgressIndicatorAndCompilationCanceledStatus.checkCanceled() - val moduleSourceFiles = getAbsolutePaths(buildFile, module.getSourceFiles()).map(localFileSystem::findFileByPath) - val ktFiles = environment.getSourceFiles().filter { file -> file.virtualFile in moduleSourceFiles } + val (moduleSourceDirs, moduleSourceFiles) = + getAbsolutePaths(buildFile, module.getSourceFiles()) + .mapNotNull(localFileSystem::findFileByPath) + .partition(VirtualFile::isDirectory) + + val ktFiles = environment.getSourceFiles().filter { file -> + val virtualFile = file.virtualFile + virtualFile in moduleSourceFiles || moduleSourceDirs.any { dir -> + VfsUtilCore.isAncestor(dir, virtualFile, true) + } + } if (!checkKotlinPackageUsage(environment, ktFiles)) return false diff --git a/compiler/testData/integration/smoke/buildFile/build.xml b/compiler/testData/integration/smoke/buildFile/build.xml new file mode 100644 index 00000000000..97ad239ea1a --- /dev/null +++ b/compiler/testData/integration/smoke/buildFile/build.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/compiler/testData/integration/smoke/buildFile/buildFile.compile.expected b/compiler/testData/integration/smoke/buildFile/buildFile.compile.expected new file mode 100644 index 00000000000..a14ac74940f --- /dev/null +++ b/compiler/testData/integration/smoke/buildFile/buildFile.compile.expected @@ -0,0 +1 @@ +Return code: 0 diff --git a/compiler/testData/integration/smoke/buildFile/buildFile.run.expected b/compiler/testData/integration/smoke/buildFile/buildFile.run.expected new file mode 100644 index 00000000000..4000785a4d1 --- /dev/null +++ b/compiler/testData/integration/smoke/buildFile/buildFile.run.expected @@ -0,0 +1,4 @@ +OUT: +OK + +Return code: 0 diff --git a/compiler/testData/integration/smoke/buildFile/src/main.kt b/compiler/testData/integration/smoke/buildFile/src/main.kt new file mode 100644 index 00000000000..bde1f8dc2b0 --- /dev/null +++ b/compiler/testData/integration/smoke/buildFile/src/main.kt @@ -0,0 +1,3 @@ +fun main() { + System.out.println("OK") +} diff --git a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java index 7dc9cad47cc..cec47c1a2d4 100644 --- a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java +++ b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.integration; +import org.jetbrains.kotlin.cli.AbstractCliTest; + import java.io.File; public class CompilerSmokeTest extends CompilerSmokeTestBase { @@ -120,4 +122,13 @@ public class CompilerSmokeTest extends CompilerSmokeTestBase { public void testPrintVersion() throws Exception { runCompiler("test.compile", "-version"); } + + public void testBuildFile() throws Exception { + File buildXml = new File(getTestDataDir(), "build.xml"); + runCompiler( + "buildFile.compile", + AbstractCliTest.replacePathsInBuildXml("-Xbuild-file=" + buildXml, getTestDataDir(), tmpdir.getPath()) + ); + run("buildFile.run", "-cp", tmpdir.getAbsolutePath(), "MainKt"); + } } diff --git a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTestBase.java b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTestBase.java index 23a59ced916..1d0ce394385 100644 --- a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTestBase.java +++ b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTestBase.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.integration; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.utils.StringsKt; @@ -27,8 +28,13 @@ import java.util.Collection; import java.util.Collections; public abstract class CompilerSmokeTestBase extends KotlinIntegrationTestBase { + @NotNull + protected String getTestDataDir() { + return KotlinTestUtils.getTestDataPathBase() + "/integration/smoke/" + getTestName(true); + } + protected int run(String logName, String... args) throws Exception { - return runJava(KotlinTestUtils.getTestDataPathBase() + "/integration/smoke/" + getTestName(true), logName, args); + return runJava(getTestDataDir(), logName, args); } protected int runCompiler(String logName, String... arguments) throws Exception {