From e90ecc48c58d69e67f0928daa0115387dc165437 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Fri, 7 Aug 2015 16:13:14 +0300 Subject: [PATCH] Save target type in Kotlin Builder --- compiler/cli/cli-common/cli-common.iml | 1 + .../kotlin/cli/common/modules/Module.kt | 2 ++ .../cli/common/modules/ModuleBuilder.kt | 7 ++++++- .../cli/common/modules/ModuleXmlParser.java | 20 ++++++++++++++++--- .../xml/AbstractModuleXmlParserTest.java | 1 + .../KotlinBuilderModuleScriptGenerator.java | 6 +++++- .../modules/KotlinModuleXmlBuilder.java | 6 ++++-- .../kotlin/jvm/compiler/ClasspathOrderTest.kt | 3 ++- .../modules/KotlinModuleXmlGeneratorTest.java | 9 +++++---- 9 files changed, 43 insertions(+), 12 deletions(-) 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();