HMPP: import flag indicating that the project uses HMPP feature
This commit is contained in:
+2
@@ -55,6 +55,8 @@ var DataNode<ModuleData>.compilerArgumentsBySourceSet
|
||||
by CopyableDataNodeUserDataProperty(Key.create<CompilerArgumentsBySourceSet>("CURRENT_COMPILER_ARGUMENTS"))
|
||||
var DataNode<ModuleData>.coroutines
|
||||
by CopyableDataNodeUserDataProperty(Key.create<String>("KOTLIN_COROUTINES"))
|
||||
var DataNode<out ModuleData>.isHmpp
|
||||
by NotNullableCopyableDataNodeUserDataProperty(Key.create<Boolean>("IS_HMPP_MODULE"), false)
|
||||
var DataNode<ModuleData>.platformPluginId
|
||||
by CopyableDataNodeUserDataProperty(Key.create<String>("PLATFORM_PLUGIN_ID"))
|
||||
var DataNode<out ModuleData>.implementedModuleNames
|
||||
|
||||
+1
-1
@@ -288,7 +288,7 @@ fun configureFacetByGradleModule(
|
||||
)
|
||||
|
||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false, GradleConstants.SYSTEM_ID.id)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider, moduleNode.isHmpp)
|
||||
|
||||
if (sourceSetNode == null) {
|
||||
ideModule.compilerArgumentsBySourceSet = moduleNode.compilerArgumentsBySourceSet
|
||||
|
||||
+1
@@ -360,6 +360,7 @@ open class KotlinMPPGradleProjectResolver : AbstractProjectResolverExtension() {
|
||||
}
|
||||
|
||||
mainModuleNode.coroutines = mppModel.extraFeatures.coroutinesState
|
||||
mainModuleNode.isHmpp = mppModel.extraFeatures.isHMPPEnabled
|
||||
}
|
||||
|
||||
fun populateContentRoots(
|
||||
|
||||
+1
-1
@@ -121,7 +121,7 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
)
|
||||
|
||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider, mainModuleNode.isHmpp)
|
||||
|
||||
val compilerArguments = kotlinSourceSet.compilerArguments
|
||||
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||
|
||||
@@ -239,6 +239,7 @@ class KotlinFacetSettings {
|
||||
var isTestModule: Boolean = false
|
||||
|
||||
var externalProjectId: String = ""
|
||||
var isHmppEnabled: Boolean = false
|
||||
}
|
||||
|
||||
interface KotlinFacetSettingsProvider {
|
||||
|
||||
@@ -160,6 +160,7 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
|
||||
} ?: KotlinModuleKind.DEFAULT
|
||||
isTestModule = element.getAttributeValue("isTestModule")?.toBoolean() ?: false
|
||||
externalProjectId = element.getAttributeValue("externalProjectId") ?: ""
|
||||
isHmppEnabled = element.getAttribute("isHmppProject")?.booleanValue ?: false
|
||||
element.getChild("compilerSettings")?.let {
|
||||
compilerSettings = CompilerSettings()
|
||||
XmlSerializer.deserializeInto(compilerSettings!!, it)
|
||||
@@ -326,6 +327,9 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
||||
if (externalProjectId.isNotEmpty()) {
|
||||
element.setAttribute("externalProjectId", externalProjectId)
|
||||
}
|
||||
if (isHmppEnabled) {
|
||||
element.setAttribute("isHmppProject", isHmppEnabled.toString())
|
||||
}
|
||||
productionOutputPath?.let {
|
||||
if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) {
|
||||
element.addContent(Element("productionOutputPath").apply { addContent(PathUtil.toSystemIndependentName(it)) })
|
||||
|
||||
@@ -121,7 +121,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
||||
}
|
||||
}
|
||||
|
||||
configureFacet(mavenProject, modifiableModelsProvider, module)
|
||||
configureFacet(mavenProject, modifiableModelsProvider, module, false) //HMPP is not supported currently for maven
|
||||
}
|
||||
|
||||
private fun scheduleDownloadStdlibSources(mavenProject: MavenProject, module: Module) {
|
||||
@@ -243,7 +243,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
||||
PomFile.KotlinGoals.MetaData
|
||||
)
|
||||
|
||||
private fun configureFacet(mavenProject: MavenProject, modifiableModelsProvider: IdeModifiableModelsProvider, module: Module) {
|
||||
private fun configureFacet(mavenProject: MavenProject, modifiableModelsProvider: IdeModifiableModelsProvider, module: Module, isHmppModule: Boolean) {
|
||||
val mavenPlugin = mavenProject.findPlugin(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID) ?: return
|
||||
val compilerVersion = mavenPlugin.version ?: LanguageVersion.LATEST_STABLE.versionString
|
||||
val kotlinFacet = module.getOrCreateFacet(
|
||||
@@ -255,7 +255,7 @@ class KotlinMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_
|
||||
// TODO There should be a way to figure out the correct platform version
|
||||
val platform = detectPlatform(mavenProject)?.defaultPlatform
|
||||
|
||||
kotlinFacet.configureFacet(compilerVersion, LanguageFeature.Coroutines.defaultState, platform, modifiableModelsProvider)
|
||||
kotlinFacet.configureFacet(compilerVersion, LanguageFeature.Coroutines.defaultState, platform, modifiableModelsProvider, hmppEnabled = isHmppModule)
|
||||
val facetSettings = kotlinFacet.configuration.settings
|
||||
val configuredPlatform = kotlinFacet.configuration.settings.targetPlatform!!
|
||||
val configuration = mavenPlugin.configurationElement
|
||||
|
||||
+1
-1
@@ -282,7 +282,7 @@ fun configureLanguageAndApiVersion(
|
||||
WriteAction.run<Throwable> {
|
||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider, false)
|
||||
if (apiVersion != null) {
|
||||
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ interface KotlinTarget : Serializable {
|
||||
|
||||
interface ExtraFeatures : Serializable {
|
||||
val coroutinesState: String?
|
||||
val isHMPPEnabled: Boolean
|
||||
}
|
||||
|
||||
interface KotlinMPPGradleModel : Serializable {
|
||||
|
||||
@@ -52,7 +52,7 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService {
|
||||
val coroutinesState = getCoroutinesState(project)
|
||||
reportUnresolvedDependencies(targets)
|
||||
val kotlinNativeHome = KotlinNativeHomeEvaluator.getKotlinNativeHome(project) ?: NO_KOTLIN_NATIVE_HOME
|
||||
return KotlinMPPGradleModelImpl(sourceSetMap, targets, ExtraFeaturesImpl(coroutinesState), kotlinNativeHome)
|
||||
return KotlinMPPGradleModelImpl(sourceSetMap, targets, ExtraFeaturesImpl(coroutinesState, isHMPPEnabled(project)), kotlinNativeHome)
|
||||
}
|
||||
|
||||
private fun isHMPPEnabled(project: Project): Boolean {
|
||||
|
||||
@@ -147,7 +147,8 @@ data class KotlinTargetImpl(
|
||||
}
|
||||
|
||||
data class ExtraFeaturesImpl(
|
||||
override val coroutinesState: String?
|
||||
override val coroutinesState: String?,
|
||||
override val isHMPPEnabled: Boolean
|
||||
) : ExtraFeatures
|
||||
|
||||
data class KotlinMPPGradleModelImpl(
|
||||
@@ -169,7 +170,7 @@ data class KotlinMPPGradleModelImpl(
|
||||
cloningCache[initialTarget] = it
|
||||
}
|
||||
}.toList(),
|
||||
ExtraFeaturesImpl(mppModel.extraFeatures.coroutinesState),
|
||||
ExtraFeaturesImpl(mppModel.extraFeatures.coroutinesState, mppModel.extraFeatures.isHMPPEnabled),
|
||||
mppModel.kotlinNativeHome
|
||||
)
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ class KotlinFacetEditorGeneralTab(
|
||||
lateinit var useProjectSettingsCheckBox: ThreeStateCheckBox
|
||||
|
||||
lateinit var platformToCheckbox: Map<SimplePlatform, ThreeStateCheckBox>
|
||||
lateinit var hmppCheckbox: ThreeStateCheckBox
|
||||
|
||||
private lateinit var projectSettingsLink: HoverHyperlinkLabel
|
||||
|
||||
@@ -111,12 +112,16 @@ class KotlinFacetEditorGeneralTab(
|
||||
targetPlatformsPanel.add(it)
|
||||
it.isEnabled = true //TODO(auskov): think about enabling/disabling editing facet settings
|
||||
}
|
||||
hmppCheckbox = ThreeStateCheckBox().apply {
|
||||
this.isEnabled = false
|
||||
}
|
||||
val contentPanel = FormBuilder
|
||||
.createFormBuilder()
|
||||
.addComponent(JPanel(BorderLayout()).apply {
|
||||
add(useProjectSettingsCheckBox, BorderLayout.WEST)
|
||||
add(projectSettingsLink, BorderLayout.EAST)
|
||||
}).addLabeledComponent("Selected target platforms:", targetPlatformsPanel)
|
||||
.addLabeledComponent("HMPP enabled:", hmppCheckbox)
|
||||
.addComponent(compilerConfigurable.createComponent()!!.apply {
|
||||
border = null
|
||||
})
|
||||
@@ -307,6 +312,7 @@ class KotlinFacetEditorGeneralTab(
|
||||
editor.platformToCheckbox.forEach {
|
||||
it.value.isSelected = configuration.settings.targetPlatform?.contains(it.key) ?: false
|
||||
}
|
||||
editor.hmppCheckbox.isSelected = configuration.settings.isHmppEnabled
|
||||
editor.compilerConfigurable.reset()
|
||||
editor.updateCompilerConfigurable()
|
||||
}
|
||||
|
||||
@@ -148,13 +148,15 @@ fun KotlinFacet.configureFacet(
|
||||
compilerVersion: String?,
|
||||
coroutineSupport: LanguageFeature.State,
|
||||
platform: TargetPlatform?, // if null, detect by module dependencies
|
||||
modelsProvider: IdeModifiableModelsProvider
|
||||
modelsProvider: IdeModifiableModelsProvider,
|
||||
hmppEnabled: Boolean
|
||||
) {
|
||||
val module = module
|
||||
with(configuration.settings) {
|
||||
compilerArguments = null
|
||||
targetPlatform = null
|
||||
compilerSettings = null
|
||||
isHmppEnabled = hmppEnabled
|
||||
initializeIfNeeded(
|
||||
module,
|
||||
modelsProvider.getModifiableRootModel(module),
|
||||
@@ -183,7 +185,7 @@ fun KotlinFacet.configureFacet(
|
||||
platform: IdePlatform<*, *>,
|
||||
modelsProvider: IdeModifiableModelsProvider
|
||||
) {
|
||||
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider)
|
||||
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider, false) //TODO(auskov): passed isHmpp = false
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -762,7 +762,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
WriteAction.run<Throwable> {
|
||||
val modelsProvider = IdeModifiableModelsProviderImpl(project)
|
||||
val facet = module.getOrCreateFacet(modelsProvider, useProjectSettings = false)
|
||||
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider)
|
||||
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider, false)
|
||||
modelsProvider.commit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,7 +350,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
|
||||
"1.1",
|
||||
LanguageFeature.State.ENABLED,
|
||||
platform,
|
||||
modelsProvider
|
||||
modelsProvider,
|
||||
false
|
||||
);
|
||||
assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform());
|
||||
assertEquals(jvmTarget.getDescription(),
|
||||
|
||||
Reference in New Issue
Block a user