Import list of pure kotlin source roots from gradle
in facet settings for inspections #KT-32300 Fixed
This commit is contained in:
+7
-3
@@ -64,8 +64,8 @@ var DataNode<out ModuleData>.dependenciesCache
|
||||
by DataNodeUserDataProperty(
|
||||
Key.create<MutableMap<DataNode<ProjectData>, Collection<DataNode<out ModuleData>>>>("MODULE_DEPENDENCIES_CACHE")
|
||||
)
|
||||
var DataNode<out ContentRootData>.isPureKotlinSourceFolder
|
||||
by NotNullableCopyableDataNodeUserDataProperty(Key.create<Boolean>("PURE_KOTLIN_SOURCE_FOLDER"), false)
|
||||
var DataNode<out ModuleData>.pureKotlinSourceFolders
|
||||
by NotNullableCopyableDataNodeUserDataProperty(Key.create<List<String>>("PURE_KOTLIN_SOURCE_FOLDER"), emptyList())
|
||||
|
||||
|
||||
class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() {
|
||||
@@ -287,6 +287,8 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
|
||||
nextResolver.populateModuleContentRoots(gradleModule, ideModule)
|
||||
val moduleNamePrefix = GradleProjectResolverUtil.getModuleId(resolverCtx, gradleModule)
|
||||
resolverCtx.getExtraProject(gradleModule, KotlinGradleModel::class.java)?.let { gradleModel ->
|
||||
ideModule.pureKotlinSourceFolders =
|
||||
gradleModel.kotlinTaskProperties.flatMap { it.value.pureKotlinSourceFolders ?: emptyList() }.map { it.absolutePath }
|
||||
val gradleSourceSets = ideModule.children.filter { it.data is GradleSourceSetData } as Collection<DataNode<GradleSourceSetData>>
|
||||
for (gradleSourceSetNode in gradleSourceSets) {
|
||||
val propertiesForSourceSet =
|
||||
@@ -295,10 +297,12 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
|
||||
gradleSourceSetNode.children.forEach { dataNode ->
|
||||
val data = dataNode.data as? ContentRootData
|
||||
if (data != null) {
|
||||
/*
|
||||
Code snippet for setting in content root properties
|
||||
if (propertiesForSourceSet?.second?.pureKotlinSourceFolders?.contains(File(data.rootPath)) == true) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
(dataNode as DataNode<ContentRootData>).isPureKotlinSourceFolder = true
|
||||
}
|
||||
}*/
|
||||
val packagePrefix = propertiesForSourceSet?.second?.packagePrefix
|
||||
if (packagePrefix != null) {
|
||||
ExternalSystemSourceType.values().filter { !(it.isResource || it.isGenerated) }.forEach { type ->
|
||||
|
||||
+8
-1
@@ -288,7 +288,14 @@ fun configureFacetByGradleModule(
|
||||
)
|
||||
|
||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false, GradleConstants.SYSTEM_ID.id)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider, moduleNode.isHmpp)
|
||||
kotlinFacet.configureFacet(
|
||||
compilerVersion,
|
||||
coroutinesProperty,
|
||||
platform,
|
||||
modelsProvider,
|
||||
moduleNode.isHmpp,
|
||||
moduleNode.pureKotlinSourceFolders
|
||||
)
|
||||
|
||||
if (sourceSetNode == null) {
|
||||
ideModule.compilerArgumentsBySourceSet = moduleNode.compilerArgumentsBySourceSet
|
||||
|
||||
+10
-1
@@ -121,7 +121,14 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
)
|
||||
|
||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
||||
kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platform, modelsProvider, mainModuleNode.isHmpp)
|
||||
kotlinFacet.configureFacet(
|
||||
compilerVersion,
|
||||
coroutinesProperty,
|
||||
platform,
|
||||
modelsProvider,
|
||||
mainModuleNode.isHmpp,
|
||||
mainModuleNode.pureKotlinSourceFolders
|
||||
)
|
||||
|
||||
val compilerArguments = kotlinSourceSet.compilerArguments
|
||||
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||
@@ -158,6 +165,8 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
||||
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||
testOutputPath = null
|
||||
}
|
||||
|
||||
this.pureKotlinSourceFolders = mainModuleNode.pureKotlinSourceFolders
|
||||
}
|
||||
|
||||
return kotlinFacet
|
||||
|
||||
@@ -240,6 +240,8 @@ class KotlinFacetSettings {
|
||||
|
||||
var externalProjectId: String = ""
|
||||
var isHmppEnabled: Boolean = false
|
||||
|
||||
var pureKotlinSourceFolders: List<String> = emptyList()
|
||||
}
|
||||
|
||||
interface KotlinFacetSettingsProvider {
|
||||
|
||||
@@ -161,6 +161,7 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
|
||||
isTestModule = element.getAttributeValue("isTestModule")?.toBoolean() ?: false
|
||||
externalProjectId = element.getAttributeValue("externalProjectId") ?: ""
|
||||
isHmppEnabled = element.getAttribute("isHmppProject")?.booleanValue ?: false
|
||||
pureKotlinSourceFolders = element.getAttributeValue("pureKotlinSourceFolders")?.split(";")?.toList() ?: emptyList()
|
||||
element.getChild("compilerSettings")?.let {
|
||||
compilerSettings = CompilerSettings()
|
||||
XmlSerializer.deserializeInto(compilerSettings!!, it)
|
||||
@@ -331,6 +332,9 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
||||
if (isHmppEnabled) {
|
||||
element.setAttribute("isHmppProject", isHmppEnabled.toString())
|
||||
}
|
||||
if (pureKotlinSourceFolders.isNotEmpty()) {
|
||||
element.setAttribute("pureKotlinSourceFolders", pureKotlinSourceFolders.joinToString(";"))
|
||||
}
|
||||
productionOutputPath?.let {
|
||||
if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) {
|
||||
element.addContent(Element("productionOutputPath").apply { addContent(PathUtil.toSystemIndependentName(it)) })
|
||||
|
||||
@@ -255,7 +255,14 @@ 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, hmppEnabled = isHmppModule)
|
||||
kotlinFacet.configureFacet(
|
||||
compilerVersion,
|
||||
LanguageFeature.Coroutines.defaultState,
|
||||
platform,
|
||||
modifiableModelsProvider,
|
||||
hmppEnabled = isHmppModule,
|
||||
pureKotlinSourceFolders = emptyList()
|
||||
)
|
||||
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, false)
|
||||
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
||||
if (apiVersion != null) {
|
||||
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
||||
}
|
||||
|
||||
@@ -149,7 +149,8 @@ fun KotlinFacet.configureFacet(
|
||||
coroutineSupport: LanguageFeature.State,
|
||||
platform: TargetPlatform?, // if null, detect by module dependencies
|
||||
modelsProvider: IdeModifiableModelsProvider,
|
||||
hmppEnabled: Boolean
|
||||
hmppEnabled: Boolean,
|
||||
pureKotlinSourceFolders: List<String>
|
||||
) {
|
||||
val module = module
|
||||
with(configuration.settings) {
|
||||
@@ -169,6 +170,7 @@ fun KotlinFacet.configureFacet(
|
||||
this.apiLevel = languageLevel
|
||||
}
|
||||
this.coroutineSupport = if (languageLevel != null && languageLevel < LanguageVersion.KOTLIN_1_3) coroutineSupport else null
|
||||
this.pureKotlinSourceFolders = pureKotlinSourceFolders
|
||||
}
|
||||
|
||||
module.externalCompilerVersion = compilerVersion
|
||||
@@ -185,7 +187,7 @@ fun KotlinFacet.configureFacet(
|
||||
platform: IdePlatform<*, *>,
|
||||
modelsProvider: IdeModifiableModelsProvider
|
||||
) {
|
||||
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider, false) //TODO(auskov): passed isHmpp = false
|
||||
configureFacet(compilerVersion, coroutineSupport, platform.toNewPlatform(), modelsProvider, false, emptyList()) //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, false)
|
||||
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
||||
modelsProvider.commit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,7 +351,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
|
||||
LanguageFeature.State.ENABLED,
|
||||
platform,
|
||||
modelsProvider,
|
||||
false
|
||||
false,
|
||||
emptyList()
|
||||
);
|
||||
assertEquals(platform, facet.getConfiguration().getSettings().getTargetPlatform());
|
||||
assertEquals(jvmTarget.getDescription(),
|
||||
|
||||
Reference in New Issue
Block a user