Fix support of directories as sources in build files (-Xbuild-file)

#KT-27775 Fixed
This commit is contained in:
Alexander Udalov
2018-10-26 16:03:17 +02:00
parent 0a2d1b409b
commit d28c6559b8
7 changed files with 43 additions and 3 deletions
@@ -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
@@ -0,0 +1,5 @@
<modules>
<module name="main" outputDir="$TEMP_DIR$" type="java-production">
<sources path="$TESTDATA_DIR$/src"/>
</module>
</modules>
@@ -0,0 +1 @@
Return code: 0
@@ -0,0 +1,4 @@
OUT:
OK
Return code: 0
@@ -0,0 +1,3 @@
fun main() {
System.out.println("OK")
}
@@ -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");
}
}
@@ -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 {