Add list of modules available via dependsOn in FacetSettings
This commit is contained in:
+1
-3
@@ -292,9 +292,7 @@ fun configureFacetByGradleModule(
|
|||||||
compilerVersion,
|
compilerVersion,
|
||||||
coroutinesProperty,
|
coroutinesProperty,
|
||||||
platform,
|
platform,
|
||||||
modelsProvider,
|
modelsProvider
|
||||||
moduleNode.isHmpp,
|
|
||||||
moduleNode.pureKotlinSourceFolders
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if (sourceSetNode == null) {
|
if (sourceSetNode == null) {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class KotlinSourceSetInfo(val kotlinModule: KotlinModule) : Serializable {
|
|||||||
var dependencyClasspath: List<String> = emptyList()
|
var dependencyClasspath: List<String> = emptyList()
|
||||||
var isTestModule: Boolean = false
|
var isTestModule: Boolean = false
|
||||||
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
||||||
|
var dependsOn: List<String> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinAndroidSourceSetData(
|
class KotlinAndroidSourceSetData(
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ class KotlinSourceSetInfo @PropertyMapping("kotlinModule") constructor(val kotli
|
|||||||
var dependencyClasspath: List<String> = emptyList()
|
var dependencyClasspath: List<String> = emptyList()
|
||||||
var isTestModule: Boolean = false
|
var isTestModule: Boolean = false
|
||||||
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
var sourceSetIdsByName: MutableMap<String, String> = LinkedHashMap()
|
||||||
|
var dependsOn: List<String> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinAndroidSourceSetData @PropertyMapping("sourceSetInfos") constructor(val sourceSetInfos: List<KotlinSourceSetInfo>
|
class KotlinAndroidSourceSetData @PropertyMapping("sourceSetInfos") constructor(val sourceSetInfos: List<KotlinSourceSetInfo>
|
||||||
|
|||||||
+2
@@ -724,6 +724,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
info.gradleModuleId = getModuleId(resolverCtx, gradleModule)
|
info.gradleModuleId = getModuleId(resolverCtx, gradleModule)
|
||||||
info.actualPlatforms.addSimplePlatforms(sourceSet.actualPlatforms.platforms)
|
info.actualPlatforms.addSimplePlatforms(sourceSet.actualPlatforms.platforms)
|
||||||
info.isTestModule = sourceSet.isTestModule
|
info.isTestModule = sourceSet.isTestModule
|
||||||
|
info.dependsOn = sourceSet.dependsOnSourceSets.toList()
|
||||||
//TODO(auskov): target flours are lost here
|
//TODO(auskov): target flours are lost here
|
||||||
info.compilerArguments = createCompilerArguments(emptyList(), sourceSet.actualPlatforms.getSinglePlatform()).also {
|
info.compilerArguments = createCompilerArguments(emptyList(), sourceSet.actualPlatforms.getSinglePlatform()).also {
|
||||||
it.multiPlatform = true
|
it.multiPlatform = true
|
||||||
@@ -754,6 +755,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
|||||||
sourceSetInfo.gradleModuleId = getModuleId(resolverCtx, gradleModule)
|
sourceSetInfo.gradleModuleId = getModuleId(resolverCtx, gradleModule)
|
||||||
sourceSetInfo.actualPlatforms.addSimplePlatforms(listOf(compilation.platform))
|
sourceSetInfo.actualPlatforms.addSimplePlatforms(listOf(compilation.platform))
|
||||||
sourceSetInfo.isTestModule = compilation.isTestModule
|
sourceSetInfo.isTestModule = compilation.isTestModule
|
||||||
|
sourceSetInfo.dependsOn = compilation.sourceSets.flatMap { it.dependsOnSourceSets }.distinct().toList()
|
||||||
sourceSetInfo.compilerArguments =
|
sourceSetInfo.compilerArguments =
|
||||||
createCompilerArguments(compilation.arguments.currentArguments.toList(), compilation.platform).also {
|
createCompilerArguments(compilation.arguments.currentArguments.toList(), compilation.platform).also {
|
||||||
it.multiPlatform = true
|
it.multiPlatform = true
|
||||||
|
|||||||
+2
-1
@@ -127,7 +127,8 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
platform,
|
platform,
|
||||||
modelsProvider,
|
modelsProvider,
|
||||||
mainModuleNode.isHmpp,
|
mainModuleNode.isHmpp,
|
||||||
mainModuleNode.pureKotlinSourceFolders
|
mainModuleNode.pureKotlinSourceFolders,
|
||||||
|
kotlinSourceSet.dependsOn
|
||||||
)
|
)
|
||||||
|
|
||||||
val compilerArguments = kotlinSourceSet.compilerArguments
|
val compilerArguments = kotlinSourceSet.compilerArguments
|
||||||
|
|||||||
@@ -245,7 +245,8 @@ class KotlinFacetSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var implementedModuleNames: List<String> = emptyList()
|
var implementedModuleNames: List<String> = emptyList() // used for first implementation of MPP, aka 'old' MPP
|
||||||
|
var dependsOnModuleNames: List<String> = emptyList() // used for New MPP and later implementations
|
||||||
|
|
||||||
var productionOutputPath: String? = null
|
var productionOutputPath: String? = null
|
||||||
var testOutputPath: String? = null
|
var testOutputPath: String? = null
|
||||||
|
|||||||
@@ -136,14 +136,9 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
|
|||||||
element.getAttributeValue("useProjectSettings")?.let { useProjectSettings = it.toBoolean() }
|
element.getAttributeValue("useProjectSettings")?.let { useProjectSettings = it.toBoolean() }
|
||||||
val targetPlatform = element.getFacetPlatformByConfigurationElement()
|
val targetPlatform = element.getFacetPlatformByConfigurationElement()
|
||||||
this.targetPlatform = targetPlatform
|
this.targetPlatform = targetPlatform
|
||||||
element.getChild("implements")?.let {
|
readModulesList(element, "implements", "implement")?.let { implementedModuleNames = it }
|
||||||
val items = it.getChildren("implement")
|
readModulesList(element, "dependsOnModuleNames", "dependsOn")?.let { dependsOnModuleNames = it }
|
||||||
implementedModuleNames = if (items.isNotEmpty()) {
|
|
||||||
items.mapNotNull { (it.content.firstOrNull() as? Text)?.textTrim }
|
|
||||||
} else {
|
|
||||||
listOfNotNull((it.content.firstOrNull() as? Text)?.textTrim)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
element.getChild("sourceSets")?.let {
|
element.getChild("sourceSets")?.let {
|
||||||
val items = it.getChildren("sourceSet")
|
val items = it.getChildren("sourceSet")
|
||||||
sourceSetNames = items.mapNotNull { (it.content.firstOrNull() as? Text)?.textTrim }
|
sourceSetNames = items.mapNotNull { (it.content.firstOrNull() as? Text)?.textTrim }
|
||||||
@@ -183,6 +178,18 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun readModulesList(element: Element, rootElementName: String, elementName: String): List<String>? {
|
||||||
|
element.getChild(rootElementName)?.let {
|
||||||
|
val items = it.getChildren(elementName)
|
||||||
|
return if (items.isNotEmpty()) {
|
||||||
|
items.mapNotNull { (it.content.firstOrNull() as? Text)?.textTrim }
|
||||||
|
} else {
|
||||||
|
listOfNotNull((it.content.firstOrNull() as? Text)?.textTrim)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
private fun readV2Config(element: Element): KotlinFacetSettings {
|
private fun readV2Config(element: Element): KotlinFacetSettings {
|
||||||
return readV2AndLaterConfig(element).apply {
|
return readV2AndLaterConfig(element).apply {
|
||||||
element.getChild("compilerArguments")?.children?.let { args ->
|
element.getChild("compilerArguments")?.children?.let { args ->
|
||||||
@@ -303,18 +310,9 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
|||||||
if (!useProjectSettings) {
|
if (!useProjectSettings) {
|
||||||
element.setAttribute("useProjectSettings", useProjectSettings.toString())
|
element.setAttribute("useProjectSettings", useProjectSettings.toString())
|
||||||
}
|
}
|
||||||
if (implementedModuleNames.isNotEmpty()) {
|
saveModulesList(element, implementedModuleNames, "implements", "implement")
|
||||||
element.addContent(
|
saveModulesList(element, dependsOnModuleNames, "dependsOnModuleNames", "dependsOn")
|
||||||
Element("implements").apply {
|
|
||||||
val singleModule = implementedModuleNames.singleOrNull()
|
|
||||||
if (singleModule != null) {
|
|
||||||
addContent(singleModule)
|
|
||||||
} else {
|
|
||||||
implementedModuleNames.map { addContent(Element("implement").apply { addContent(it) }) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (sourceSetNames.isNotEmpty()) {
|
if (sourceSetNames.isNotEmpty()) {
|
||||||
element.addContent(
|
element.addContent(
|
||||||
Element("sourceSets").apply {
|
Element("sourceSets").apply {
|
||||||
@@ -356,6 +354,21 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun saveModulesList(element: Element, moduleList: List<String>, rootElementName: String, elementName: String) {
|
||||||
|
if (moduleList.isNotEmpty()) {
|
||||||
|
element.addContent(
|
||||||
|
Element(rootElementName).apply {
|
||||||
|
val singleModule = moduleList.singleOrNull()
|
||||||
|
if (singleModule != null) {
|
||||||
|
addContent(singleModule)
|
||||||
|
} else {
|
||||||
|
moduleList.map { addContent(Element(elementName).apply { addContent(it) }) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun CommonCompilerArguments.detectVersionAutoAdvance() {
|
fun CommonCompilerArguments.detectVersionAutoAdvance() {
|
||||||
autoAdvanceLanguageVersion = languageVersion == null
|
autoAdvanceLanguageVersion = languageVersion == null
|
||||||
autoAdvanceApiVersion = apiVersion == null
|
autoAdvanceApiVersion = apiVersion == null
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
configureFacet(mavenProject, modifiableModelsProvider, module, false) //HMPP is not supported currently for maven
|
configureFacet(mavenProject, modifiableModelsProvider, module)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun scheduleDownloadStdlibSources(mavenProject: MavenProject, module: Module) {
|
private fun scheduleDownloadStdlibSources(mavenProject: MavenProject, module: Module) {
|
||||||
@@ -243,7 +243,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
|||||||
PomFile.KotlinGoals.MetaData
|
PomFile.KotlinGoals.MetaData
|
||||||
)
|
)
|
||||||
|
|
||||||
private fun configureFacet(mavenProject: MavenProject, modifiableModelsProvider: IdeModifiableModelsProvider, module: Module, isHmppModule: Boolean) {
|
private fun configureFacet(mavenProject: MavenProject, modifiableModelsProvider: IdeModifiableModelsProvider, module: Module) {
|
||||||
val mavenPlugin = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID) ?: return
|
val mavenPlugin = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID) ?: return
|
||||||
val compilerVersion = mavenPlugin.version ?: LanguageVersion.LATEST_STABLE.versionString
|
val compilerVersion = mavenPlugin.version ?: LanguageVersion.LATEST_STABLE.versionString
|
||||||
val kotlinFacet = module.getOrCreateFacet(
|
val kotlinFacet = module.getOrCreateFacet(
|
||||||
@@ -259,9 +259,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
|||||||
compilerVersion,
|
compilerVersion,
|
||||||
LanguageFeature.Coroutines.defaultState,
|
LanguageFeature.Coroutines.defaultState,
|
||||||
platform,
|
platform,
|
||||||
modifiableModelsProvider,
|
modifiableModelsProvider
|
||||||
hmppEnabled = isHmppModule,
|
|
||||||
pureKotlinSourceFolders = emptyList()
|
|
||||||
)
|
)
|
||||||
val facetSettings = kotlinFacet.configuration.settings
|
val facetSettings = kotlinFacet.configuration.settings
|
||||||
val configuredPlatform = kotlinFacet.configuration.settings.targetPlatform!!
|
val configuredPlatform = kotlinFacet.configuration.settings.targetPlatform!!
|
||||||
|
|||||||
+1
-1
@@ -282,7 +282,7 @@ fun configureLanguageAndApiVersion(
|
|||||||
WriteAction.run<Throwable> {
|
WriteAction.run<Throwable> {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||||
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||||
if (apiVersion != null) {
|
if (apiVersion != null) {
|
||||||
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
|
|
||||||
// UI components related to MPP target platforms
|
// UI components related to MPP target platforms
|
||||||
lateinit var targetPlatformSelectSingleCombobox: ComboBox<TargetPlatformWrapper>
|
lateinit var targetPlatformSelectSingleCombobox: ComboBox<TargetPlatformWrapper>
|
||||||
|
lateinit var dependsOnLabel: JLabel
|
||||||
lateinit var targetPlatformWrappers: List<TargetPlatformWrapper>
|
lateinit var targetPlatformWrappers: List<TargetPlatformWrapper>
|
||||||
lateinit var targetPlatformLabel: JLabel //JTextField?
|
lateinit var targetPlatformLabel: JLabel //JTextField?
|
||||||
var targetPlatformsCurrentlySelected: TargetPlatform? = null
|
var targetPlatformsCurrentlySelected: TargetPlatform? = null
|
||||||
@@ -143,6 +144,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
)
|
)
|
||||||
|
|
||||||
useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor }
|
useProjectSettingsCheckBox = ThreeStateCheckBox("Use project settings").apply { isThirdStateEnabled = isMultiEditor }
|
||||||
|
dependsOnLabel = JLabel()
|
||||||
|
|
||||||
targetPlatformWrappers =
|
targetPlatformWrappers =
|
||||||
CommonPlatforms.allDefaultTargetPlatforms.sortedBy { unifyJvmVersion(it.oldFashionedDescription) }.map { TargetPlatformWrapper(it) }
|
CommonPlatforms.allDefaultTargetPlatforms.sortedBy { unifyJvmVersion(it.oldFashionedDescription) }.map { TargetPlatformWrapper(it) }
|
||||||
@@ -182,6 +184,7 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
add(useProjectSettingsCheckBox, BorderLayout.WEST)
|
add(useProjectSettingsCheckBox, BorderLayout.WEST)
|
||||||
add(projectSettingsLink, BorderLayout.EAST)
|
add(projectSettingsLink, BorderLayout.EAST)
|
||||||
}).addTargetPlatformComponents()
|
}).addTargetPlatformComponents()
|
||||||
|
.addComponent(dependsOnLabel)
|
||||||
.addComponent(compilerConfigurable.createComponent()!!.apply {
|
.addComponent(compilerConfigurable.createComponent()!!.apply {
|
||||||
border = null
|
border = null
|
||||||
})
|
})
|
||||||
@@ -387,6 +390,9 @@ class KotlinFacetEditorGeneralTab(
|
|||||||
editor.targetPlatformLabel.text =
|
editor.targetPlatformLabel.text =
|
||||||
editor.targetPlatformsCurrentlySelected?.componentPlatforms?.map { it.oldFashionedDescription }?.joinToString(", ")
|
editor.targetPlatformsCurrentlySelected?.componentPlatforms?.map { it.oldFashionedDescription }?.joinToString(", ")
|
||||||
?: "<none>"
|
?: "<none>"
|
||||||
|
editor.dependsOnLabel.isVisible = configuration.settings.dependsOnModuleNames.isNotEmpty()
|
||||||
|
editor.dependsOnLabel.text = configuration.settings.dependsOnModuleNames.joinToString(",","Depends on: ", ".")
|
||||||
|
|
||||||
editor.targetPlatformSelectSingleCombobox.selectedItem = configuration.settings.targetPlatform?.let {
|
editor.targetPlatformSelectSingleCombobox.selectedItem = configuration.settings.targetPlatform?.let {
|
||||||
val index = editor.targetPlatformWrappers.indexOf(TargetPlatformWrapper(it))
|
val index = editor.targetPlatformWrappers.indexOf(TargetPlatformWrapper(it))
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
|
|||||||
@@ -144,13 +144,24 @@ fun Module.getOrCreateFacet(
|
|||||||
return facet
|
return facet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//method used for non-mpp modules
|
||||||
|
fun KotlinFacet.configureFacet(
|
||||||
|
compilerVersion: String?,
|
||||||
|
coroutineSupport: LanguageFeature.State,
|
||||||
|
platform: TargetPlatform?,
|
||||||
|
modelsProvider: IdeModifiableModelsProvider
|
||||||
|
) {
|
||||||
|
configureFacet(compilerVersion, coroutineSupport, platform, modelsProvider, false, emptyList(), emptyList())
|
||||||
|
}
|
||||||
|
|
||||||
fun KotlinFacet.configureFacet(
|
fun KotlinFacet.configureFacet(
|
||||||
compilerVersion: String?,
|
compilerVersion: String?,
|
||||||
coroutineSupport: LanguageFeature.State,
|
coroutineSupport: LanguageFeature.State,
|
||||||
platform: TargetPlatform?, // if null, detect by module dependencies
|
platform: TargetPlatform?, // if null, detect by module dependencies
|
||||||
modelsProvider: IdeModifiableModelsProvider,
|
modelsProvider: IdeModifiableModelsProvider,
|
||||||
hmppEnabled: Boolean,
|
hmppEnabled: Boolean,
|
||||||
pureKotlinSourceFolders: List<String>
|
pureKotlinSourceFolders: List<String>,
|
||||||
|
dependsOnList: List<String>
|
||||||
) {
|
) {
|
||||||
val module = module
|
val module = module
|
||||||
with(configuration.settings) {
|
with(configuration.settings) {
|
||||||
@@ -158,6 +169,7 @@ fun KotlinFacet.configureFacet(
|
|||||||
targetPlatform = null
|
targetPlatform = null
|
||||||
compilerSettings = null
|
compilerSettings = null
|
||||||
isHmppEnabled = hmppEnabled
|
isHmppEnabled = hmppEnabled
|
||||||
|
dependsOnModuleNames = dependsOnList
|
||||||
initializeIfNeeded(
|
initializeIfNeeded(
|
||||||
module,
|
module,
|
||||||
modelsProvider.getModifiableRootModel(module),
|
modelsProvider.getModifiableRootModel(module),
|
||||||
@@ -187,7 +199,7 @@ fun KotlinFacet.configureFacet(
|
|||||||
platform: IdePlatform<*, *>,
|
platform: IdePlatform<*, *>,
|
||||||
modelsProvider: IdeModifiableModelsProvider
|
modelsProvider: IdeModifiableModelsProvider
|
||||||
) {
|
) {
|
||||||
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider, false, emptyList()) //TODO(auskov): passed isHmpp = false
|
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -782,7 +782,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
|||||||
WriteAction.run<Throwable> {
|
WriteAction.run<Throwable> {
|
||||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||||
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||||
modelsProvider.commit()
|
modelsProvider.commit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -350,9 +350,7 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
|
|||||||
"1.1",
|
"1.1",
|
||||||
LanguageFeature.State.ENABLED,
|
LanguageFeature.State.ENABLED,
|
||||||
platform,
|
platform,
|
||||||
modelsProvider,
|
modelsProvider
|
||||||
false,
|
|
||||||
emptyList()
|
|
||||||
);
|
);
|
||||||
assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform());
|
assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform());
|
||||||
assertEquals(jvmTarget.getDescription(),
|
assertEquals(jvmTarget.getDescription(),
|
||||||
|
|||||||
Reference in New Issue
Block a user