Configuration: Introduce special source roots for non-JVM Kotlin modules
#KT-5948 Fixed
#KT-23672 Fixed
Original commit: 9fa26c83b6
This commit is contained in:
@@ -11,6 +11,7 @@ dependencies {
|
||||
compile(project(":compiler:cli-common"))
|
||||
compile(project(":compiler:frontend.java"))
|
||||
compileOnly(intellijDep())
|
||||
compileOnly(intellijDep("jps-standalone")) { includeJars("jps-model") }
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.config;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension;
|
||||
import org.jetbrains.jps.model.serialization.module.JpsModuleSourceRootPropertiesSerializer;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class KotlinCommonJpsModelSerializerExtension extends JpsModelSerializerExtension {
|
||||
@NotNull
|
||||
@Override
|
||||
public List<? extends JpsModuleSourceRootPropertiesSerializer<?>> getModuleSourceRootPropertiesSerializers() {
|
||||
return Arrays.asList(
|
||||
KotlinSourceRootPropertiesSerializer.Source.INSTANCE,
|
||||
KotlinSourceRootPropertiesSerializer.TestSource.INSTANCE,
|
||||
KotlinResourceRootPropertiesSerializer.Resource.INSTANCE,
|
||||
KotlinResourceRootPropertiesSerializer.TestResource.INSTANCE
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.config
|
||||
|
||||
import org.jetbrains.jps.model.ex.JpsElementTypeBase
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootProperties
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||
|
||||
sealed class KotlinResourceRootType : JpsElementTypeBase<JavaResourceRootProperties>(),
|
||||
JpsModuleSourceRootType<JavaResourceRootProperties> {
|
||||
object Resource : KotlinResourceRootType()
|
||||
object TestResource : KotlinResourceRootType()
|
||||
|
||||
override fun createDefaultProperties() =
|
||||
JpsJavaExtensionService.getInstance().createResourceRootProperties("", false)
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.config
|
||||
|
||||
import org.jetbrains.jps.model.ex.JpsElementTypeBase
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||
|
||||
sealed class KotlinSourceRootType : JpsElementTypeBase<JavaSourceRootProperties>(), JpsModuleSourceRootType<JavaSourceRootProperties> {
|
||||
object Source : KotlinSourceRootType()
|
||||
object TestSource : KotlinSourceRootType()
|
||||
|
||||
override fun createDefaultProperties() = JpsJavaExtensionService.getInstance().createSourceRootProperties("")
|
||||
}
|
||||
|
||||
+85
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.config
|
||||
|
||||
import org.jdom.Element
|
||||
import org.jetbrains.jps.model.java.JavaResourceRootProperties
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||
import org.jetbrains.jps.model.serialization.module.JpsModuleRootModelSerializer
|
||||
import org.jetbrains.jps.model.serialization.module.JpsModuleSourceRootPropertiesSerializer
|
||||
|
||||
private val IS_GENERATED_ATTRIBUTE = "generated"
|
||||
private val RELATIVE_OUTPUT_PATH_ATTRIBUTE = "relativeOutputPath"
|
||||
|
||||
val KOTLIN_SOURCE_ROOT_TYPE_ID = "kotlin-source"
|
||||
val KOTLIN_TEST_ROOT_TYPE_ID = "kotlin-test"
|
||||
val KOTLIN_RESOURCE_ROOT_TYPE_ID = "kotlin-resource"
|
||||
val KOTLIN_TEST_RESOURCE_ROOT_TYPE_ID = "kotlin-test-resource"
|
||||
|
||||
// Based on org.jetbrains.jps.model.serialization.java.JpsJavaModelSerializerExtension.JavaSourceRootPropertiesSerializer class
|
||||
sealed class KotlinSourceRootPropertiesSerializer(
|
||||
type: JpsModuleSourceRootType<JavaSourceRootProperties>,
|
||||
typeId: String
|
||||
) : JpsModuleSourceRootPropertiesSerializer<JavaSourceRootProperties>(type, typeId) {
|
||||
object Source : KotlinSourceRootPropertiesSerializer(
|
||||
KotlinSourceRootType.Source,
|
||||
KOTLIN_SOURCE_ROOT_TYPE_ID
|
||||
)
|
||||
|
||||
object TestSource : KotlinSourceRootPropertiesSerializer(
|
||||
KotlinSourceRootType.TestSource,
|
||||
KOTLIN_TEST_ROOT_TYPE_ID
|
||||
)
|
||||
|
||||
override fun loadProperties(sourceRootTag: Element): JavaSourceRootProperties {
|
||||
val packagePrefix = sourceRootTag.getAttributeValue(JpsModuleRootModelSerializer.PACKAGE_PREFIX_ATTRIBUTE) ?: ""
|
||||
val isGenerated = sourceRootTag.getAttributeValue(IS_GENERATED_ATTRIBUTE)?.toBoolean() ?: false
|
||||
return JpsJavaExtensionService.getInstance().createSourceRootProperties(packagePrefix, isGenerated)
|
||||
}
|
||||
|
||||
override fun saveProperties(properties: JavaSourceRootProperties, sourceRootTag: Element) {
|
||||
val packagePrefix = properties.packagePrefix
|
||||
if (packagePrefix.isNotEmpty()) {
|
||||
sourceRootTag.setAttribute(JpsModuleRootModelSerializer.PACKAGE_PREFIX_ATTRIBUTE, packagePrefix)
|
||||
}
|
||||
if (properties.isForGeneratedSources) {
|
||||
sourceRootTag.setAttribute(IS_GENERATED_ATTRIBUTE, "true")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Based on org.jetbrains.jps.model.serialization.java.JpsJavaModelSerializerExtension.JavaResourceRootPropertiesSerializer
|
||||
sealed class KotlinResourceRootPropertiesSerializer(
|
||||
type: JpsModuleSourceRootType<JavaResourceRootProperties>,
|
||||
typeId: String
|
||||
) : JpsModuleSourceRootPropertiesSerializer<JavaResourceRootProperties>(type, typeId) {
|
||||
object Resource : KotlinResourceRootPropertiesSerializer(
|
||||
KotlinResourceRootType.Resource,
|
||||
KOTLIN_RESOURCE_ROOT_TYPE_ID
|
||||
)
|
||||
object TestResource : KotlinResourceRootPropertiesSerializer(
|
||||
KotlinResourceRootType.TestResource,
|
||||
KOTLIN_TEST_RESOURCE_ROOT_TYPE_ID
|
||||
)
|
||||
|
||||
override fun loadProperties(sourceRootTag: Element): JavaResourceRootProperties {
|
||||
val relativeOutputPath = sourceRootTag.getAttributeValue(RELATIVE_OUTPUT_PATH_ATTRIBUTE) ?: ""
|
||||
val isGenerated = sourceRootTag.getAttributeValue(IS_GENERATED_ATTRIBUTE)?.toBoolean() ?: false
|
||||
return JpsJavaExtensionService.getInstance().createResourceRootProperties(relativeOutputPath, isGenerated)
|
||||
}
|
||||
|
||||
override fun saveProperties(properties: JavaResourceRootProperties, sourceRootTag: Element) {
|
||||
val relativeOutputPath = properties.relativeOutputPath
|
||||
if (relativeOutputPath.isNotEmpty()) {
|
||||
sourceRootTag.setAttribute(RELATIVE_OUTPUT_PATH_ATTRIBUTE, relativeOutputPath)
|
||||
}
|
||||
if (properties.isForGeneratedSources) {
|
||||
sourceRootTag.setAttribute(IS_GENERATED_ATTRIBUTE, "true")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -21,9 +21,6 @@ import com.intellij.util.containers.MultiMap
|
||||
import org.jetbrains.jps.builders.DirtyFilesHolder
|
||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
||||
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootProperties
|
||||
import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRoot
|
||||
|
||||
import java.io.File
|
||||
|
||||
|
||||
+21
-10
@@ -16,10 +16,12 @@ import org.jetbrains.jps.model.java.JavaSourceRootType
|
||||
import org.jetbrains.jps.model.java.JpsJavaClasspathKind
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsModule
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType
|
||||
import org.jetbrains.jps.util.JpsPathUtil
|
||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
|
||||
import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment
|
||||
import org.jetbrains.kotlin.config.KotlinSourceRootType
|
||||
import org.jetbrains.kotlin.jps.build.FSOperationsHelper
|
||||
import org.jetbrains.kotlin.jps.build.KotlinSourceFileCollector
|
||||
import org.jetbrains.kotlin.jps.model.kotlinFacet
|
||||
@@ -33,6 +35,13 @@ import java.io.File
|
||||
* Properties and actions for Kotlin test / production module build target.
|
||||
*/
|
||||
abstract class KotlinModuleBuilderTarget(val context: CompileContext, val jpsModuleBuildTarget: ModuleBuildTarget) {
|
||||
val sourceRootTypes: Collection<JpsModuleSourceRootType<*>>
|
||||
get() = if (isTests) {
|
||||
listOf(JavaSourceRootType.TEST_SOURCE, KotlinSourceRootType.TestSource)
|
||||
} else {
|
||||
listOf(JavaSourceRootType.SOURCE, KotlinSourceRootType.Source)
|
||||
}
|
||||
|
||||
val module: JpsModule
|
||||
get() = jpsModuleBuildTarget.module
|
||||
|
||||
@@ -116,16 +125,18 @@ abstract class KotlinModuleBuilderTarget(val context: CompileContext, val jpsMod
|
||||
.getOrCreateCompilerConfiguration(module.project)
|
||||
.compilerExcludes
|
||||
|
||||
val sourceRootType = if (isTests) JavaSourceRootType.TEST_SOURCE else JavaSourceRootType.SOURCE
|
||||
module.getSourceRoots(sourceRootType).forEach {
|
||||
it.file.walkTopDown()
|
||||
.onEnter { it !in moduleExcludes }
|
||||
.filterTo(receiver) {
|
||||
!compilerExcludes.isExcluded(it) &&
|
||||
it.isFile &&
|
||||
KotlinSourceFileCollector.isKotlinSourceFile(it)
|
||||
}
|
||||
}
|
||||
module
|
||||
.sourceRoots
|
||||
.filter { it.rootType in sourceRootTypes }
|
||||
.forEach {
|
||||
it.file.walkTopDown()
|
||||
.onEnter { it !in moduleExcludes }
|
||||
.filterTo(receiver) {
|
||||
!compilerExcludes.isExcluded(it) &&
|
||||
it.isFile &&
|
||||
KotlinSourceFileCollector.isKotlinSourceFile(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun toString() = jpsModuleBuildTarget.toString()
|
||||
|
||||
Reference in New Issue
Block a user