diff --git a/compiler/cli/cli-common/cli-common.iml b/compiler/cli/cli-common/cli-common.iml
index 9b3fce585ec..84094636cf5 100644
--- a/compiler/cli/cli-common/cli-common.iml
+++ b/compiler/cli/cli-common/cli-common.iml
@@ -10,5 +10,6 @@
+
\ No newline at end of file
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt
index 69753499c66..7c238d55a3c 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/Module.kt
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.cli.common.modules
public interface Module {
public fun getModuleName(): String
+ public fun getModuleType(): String
+
public fun getOutputDirectory(): String
public fun getSourceFiles(): List
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt
index ccde3bd9b80..956c5abcc8e 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleBuilder.kt
@@ -18,7 +18,11 @@ package org.jetbrains.kotlin.cli.common.modules
import java.util.ArrayList
-public class ModuleBuilder(private val name: String, private val outputDir: String) : Module {
+public class ModuleBuilder(
+ private val name: String,
+ private val outputDir: String,
+ private val type: String
+) : Module {
private val sourceFiles = ArrayList()
private val classpathRoots = ArrayList()
private val javaSourceRoots = ArrayList()
@@ -46,5 +50,6 @@ public class ModuleBuilder(private val name: String, private val outputDir: Stri
override fun getClasspathRoots(): List = classpathRoots
override fun getAnnotationsRoots(): List = annotationsRoots
override fun getModuleName(): String = name
+ override fun getModuleType(): String = type
}
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java
index 7c48d0c11c8..78f9adc12ad 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/modules/ModuleXmlParser.java
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.cli.common.modules;
import com.intellij.openapi.util.io.StreamUtil;
import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
import org.jetbrains.kotlin.cli.common.messages.MessageCollectorUtil;
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil;
@@ -40,6 +41,7 @@ public class ModuleXmlParser {
public static final String MODULES = "modules";
public static final String MODULE = "module";
public static final String NAME = "name";
+ public static final String TYPE = "type";
public static final String OUTPUT_DIR = "outputDir";
public static final String SOURCES = "sources";
public static final String JAVA_SOURCE_ROOTS = "javaSourceRoots";
@@ -126,10 +128,22 @@ public class ModuleXmlParser {
setCurrentState(new InsideModule(
getAttribute(attributes, NAME, qName),
- getAttribute(attributes, OUTPUT_DIR, qName)
+ getAttribute(attributes, OUTPUT_DIR, qName),
+ getType(attributes, qName)
));
}
+ @NotNull
+ private String getType(@NotNull Attributes attributes, @NotNull String tag) {
+ String value = attributes.getValue(TYPE);
+
+ assert value != null &&
+ (JavaModuleBuildTargetType.PRODUCTION.getTypeId().equals(value) ||
+ JavaModuleBuildTargetType.TEST.getTypeId().equals(value)): "Unknown value of module type: " + value;
+
+ return value;
+ }
+
@Override
public void endElement(String uri, @NotNull String localName, @NotNull String qName) throws SAXException {
if (MODULE.equalsIgnoreCase(qName) || MODULES.equalsIgnoreCase(qName)) {
@@ -141,8 +155,8 @@ public class ModuleXmlParser {
private class InsideModule extends DefaultHandler {
private final ModuleBuilder moduleBuilder;
- private InsideModule(String name, String outputDir) {
- this.moduleBuilder = new ModuleBuilder(name, outputDir);
+ private InsideModule(String name, String outputDir, @NotNull String type) {
+ this.moduleBuilder = new ModuleBuilder(name, outputDir, type);
modules.add(moduleBuilder);
}
diff --git a/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java b/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java
index bf48962873b..c2d594b9bcf 100644
--- a/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java
+++ b/compiler/tests/org/jetbrains/kotlin/modules/xml/AbstractModuleXmlParserTest.java
@@ -62,6 +62,7 @@ public abstract class AbstractModuleXmlParserTest extends TestCase {
private static String moduleToString(@NotNull Module module) {
return module.getModuleName() +
+ "\n\ttype=" + module.getModuleType() +
"\n\toutputDir=" + module.getOutputDirectory() +
"\n\tsources=" + module.getSourceFiles() +
"\n\tclasspath=" + module.getClasspathRoots() +
diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java
index b4913701685..f650f7042bf 100644
--- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java
+++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java
@@ -26,6 +26,8 @@ import kotlin.io.IoPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.ModuleChunk;
+import org.jetbrains.jps.builders.BuildTargetType;
+import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
import org.jetbrains.jps.builders.logging.ProjectBuilderLogger;
import org.jetbrains.jps.incremental.CompileContext;
@@ -82,6 +84,8 @@ public class KotlinBuilderModuleScriptGenerator {
}
}
+ BuildTargetType> targetType = target.getTargetType();
+ assert targetType instanceof JavaModuleBuildTargetType;
builder.addModule(
target.getId(),
outputDir.getAbsolutePath(),
@@ -89,7 +93,7 @@ public class KotlinBuilderModuleScriptGenerator {
findSourceRoots(context, target),
findClassPathRoots(target),
findAnnotationRoots(target),
- target.isTests(),
+ (JavaModuleBuildTargetType) targetType,
// this excludes the output directories from the class path, to be removed for true incremental compilation
outputDirs
);
diff --git a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java
index 67844e5ebb9..e9b2cda097e 100644
--- a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java
+++ b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.modules;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
import org.jetbrains.kotlin.config.IncrementalCompilation;
import org.jetbrains.kotlin.utils.Printer;
@@ -45,12 +46,12 @@ public class KotlinModuleXmlBuilder {
List javaSourceRoots,
Collection classpathRoots,
List annotationRoots,
- boolean tests,
+ JavaModuleBuildTargetType targetType,
Set directoriesToFilterOut
) {
assert !done : "Already done";
- if (tests) {
+ if (targetType.isTests()) {
p.println("");
}
else {
@@ -59,6 +60,7 @@ public class KotlinModuleXmlBuilder {
p.println("<", MODULE, " ",
NAME, "=\"", escapeXml(moduleName), "\" ",
+ TYPE, "=\"", escapeXml(targetType.getTypeId()), "\" ",
OUTPUT_DIR, "=\"", getEscapedPath(new File(outputDir)), "\">"
);
p.pushIndent();
diff --git a/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt b/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt
index 538b0ce2236..0a22bde715a 100644
--- a/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt
+++ b/jps-plugin/test/org/jetbrains/kotlin/jvm/compiler/ClasspathOrderTest.kt
@@ -16,6 +16,7 @@
package org.jetbrains.kotlin.jvm.compiler
+import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder
import org.jetbrains.kotlin.test.JetTestUtils
import org.jetbrains.kotlin.test.MockLibraryUtil
@@ -45,7 +46,7 @@ public class ClasspathOrderTest : TestCaseWithTmpdir() {
listOf(sourceDir),
listOf(PathUtil.getKotlinPathsForDistDirectory().getRuntimePath()),
listOf(),
- false,
+ JavaModuleBuildTargetType.PRODUCTION,
setOf()
).asText().toString()
diff --git a/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java b/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java
index 61bba84e200..0e40545b642 100644
--- a/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java
+++ b/jps-plugin/test/org/jetbrains/kotlin/modules/KotlinModuleXmlGeneratorTest.java
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.modules;
import junit.framework.TestCase;
+import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
import org.jetbrains.kotlin.test.JetTestUtils;
import java.io.File;
@@ -32,7 +33,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
Collections.singletonList(new File("java")),
Arrays.asList(new File("cp1"), new File("cp2")),
Arrays.asList(new File("a1/f1"), new File("a2")),
- false,
+ JavaModuleBuildTargetType.PRODUCTION,
Collections.emptySet()
).asText().toString();
JetTestUtils.assertEqualsToFile(new File("idea/testData/modules.xml/basic.xml"), actual);
@@ -46,7 +47,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
Collections.emptyList(),
Arrays.asList(new File("cp1"), new File("cp2")),
Arrays.asList(new File("a1/f1"), new File("a2")),
- false,
+ JavaModuleBuildTargetType.PRODUCTION,
Collections.singleton(new File("cp1"))
).asText().toString();
JetTestUtils.assertEqualsToFile(new File("idea/testData/modules.xml/filtered.xml"), actual);
@@ -61,7 +62,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
Collections.emptyList(),
Arrays.asList(new File("cp1"), new File("cp2")),
Arrays.asList(new File("a1/f1"), new File("a2")),
- false,
+ JavaModuleBuildTargetType.PRODUCTION,
Collections.singleton(new File("cp1"))
);
builder.addModule(
@@ -71,7 +72,7 @@ public class KotlinModuleXmlGeneratorTest extends TestCase {
Collections.emptyList(),
Arrays.asList(new File("cp12"), new File("cp22")),
Arrays.asList(new File("a12/f12"), new File("a22")),
- true,
+ JavaModuleBuildTargetType.TEST,
Collections.singleton(new File("cp12"))
);
String actual = builder.asText().toString();