Importing test tasks and targets is implemented

Original commit: 715fad849d
This commit is contained in:
Andrey Uskov
2019-09-09 20:05:34 +03:00
parent 49d1c448d5
commit 588ff3a1da
2 changed files with 33 additions and 9 deletions
@@ -153,6 +153,18 @@ enum class KotlinMultiplatformVersion(val version: Int) {
get() = version >= 3
}
data class ExternalSystemTestTask(val testName: String, val externalSystemProjectId: String, val targetName: String?) {
fun toStringRepresentation() = "$testName|$externalSystemProjectId|$targetName"
companion object {
fun fromStringRepresentation(line: String) =
line.split("|").let { if (it.size == 3) ExternalSystemTestTask(it[0], it[1], it[2]) else null }
}
override fun toString() = "$testName@$externalSystemProjectId [$targetName]"
}
class KotlinFacetSettings {
companion object {
// Increment this when making serialization-incompatible changes to configuration data
@@ -219,6 +231,7 @@ class KotlinFacetSettings {
return field
}
var externalSystemTestTasks: List<ExternalSystemTestTask> = emptyList()
@Suppress("DEPRECATION_ERROR")
@Deprecated(
@@ -136,8 +136,11 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
element.getAttributeValue("useProjectSettings")?.let { useProjectSettings = it.toBoolean() }
val targetPlatform = element.getFacetPlatformByConfigurationElement()
this.targetPlatform = targetPlatform
readModulesList(element, "implements", "implement")?.let { implementedModuleNames = it }
readModulesList(element, "dependsOnModuleNames", "dependsOn")?.let { dependsOnModuleNames = it }
readElementsList(element, "implements", "implement")?.let { implementedModuleNames = it }
readElementsList(element, "dependsOnModuleNames", "dependsOn")?.let { dependsOnModuleNames = it }
readElementsList(element, "externalSystemTestTasks", "externalSystemTestTask")?.let {
externalSystemTestTasks = it.mapNotNull { ExternalSystemTestTask.fromStringRepresentation(it) }
}
element.getChild("sourceSets")?.let {
val items = it.getChildren("sourceSet")
@@ -178,7 +181,7 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
}
}
private fun readModulesList(element: Element, rootElementName: String, elementName: String): List<String>? {
private fun readElementsList(element: Element, rootElementName: String, elementName: String): List<String>? {
element.getChild(rootElementName)?.let {
val items = it.getChildren(elementName)
return if (items.isNotEmpty()) {
@@ -310,8 +313,8 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
if (!useProjectSettings) {
element.setAttribute("useProjectSettings", useProjectSettings.toString())
}
saveModulesList(element, implementedModuleNames, "implements", "implement")
saveModulesList(element, dependsOnModuleNames, "dependsOnModuleNames", "dependsOn")
saveElementsList(element, implementedModuleNames, "implements", "implement")
saveElementsList(element, dependsOnModuleNames, "dependsOnModuleNames", "dependsOn")
if (sourceSetNames.isNotEmpty()) {
element.addContent(
@@ -330,6 +333,14 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
if (isHmppEnabled) {
element.setAttribute("isHmppProject", isHmppEnabled.toString())
}
if (externalSystemTestTasks.isNotEmpty()) {
saveElementsList(
element,
externalSystemTestTasks.map { it.toStringRepresentation() },
"externalSystemTestTasks",
"externalSystemTestTask"
)
}
if (pureKotlinSourceFolders.isNotEmpty()) {
element.setAttribute("pureKotlinSourceFolders", pureKotlinSourceFolders.joinToString(";"))
}
@@ -354,15 +365,15 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
}
}
private fun saveModulesList(element: Element, moduleList: List<String>, rootElementName: String, elementName: String) {
if (moduleList.isNotEmpty()) {
private fun saveElementsList(element: Element, elementsList: List<String>, rootElementName: String, elementName: String) {
if (elementsList.isNotEmpty()) {
element.addContent(
Element(rootElementName).apply {
val singleModule = moduleList.singleOrNull()
val singleModule = elementsList.singleOrNull()
if (singleModule != null) {
addContent(singleModule)
} else {
moduleList.map { addContent(Element(elementName).apply { addContent(it) }) }
elementsList.map { addContent(Element(elementName).apply { addContent(it) }) }
}
}
)