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(
|
by DataNodeUserDataProperty(
|
||||||
Key.create<MutableMap<DataNode<ProjectData>, Collection<DataNode<out ModuleData>>>>("MODULE_DEPENDENCIES_CACHE")
|
Key.create<MutableMap<DataNode<ProjectData>, Collection<DataNode<out ModuleData>>>>("MODULE_DEPENDENCIES_CACHE")
|
||||||
)
|
)
|
||||||
var DataNode<out ContentRootData>.isPureKotlinSourceFolder
|
var DataNode<out ModuleData>.pureKotlinSourceFolders
|
||||||
by NotNullableCopyableDataNodeUserDataProperty(Key.create<Boolean>("PURE_KOTLIN_SOURCE_FOLDER"), false)
|
by NotNullableCopyableDataNodeUserDataProperty(Key.create<List<String>>("PURE_KOTLIN_SOURCE_FOLDER"), emptyList())
|
||||||
|
|
||||||
|
|
||||||
class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() {
|
class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() {
|
||||||
@@ -287,6 +287,8 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
|
|||||||
nextResolver.populateModuleContentRoots(gradleModule, ideModule)
|
nextResolver.populateModuleContentRoots(gradleModule, ideModule)
|
||||||
val moduleNamePrefix = GradleProjectResolverUtil.getModuleId(resolverCtx, gradleModule)
|
val moduleNamePrefix = GradleProjectResolverUtil.getModuleId(resolverCtx, gradleModule)
|
||||||
resolverCtx.getExtraProject(gradleModule, KotlinGradleModel::class.java)?.let { gradleModel ->
|
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>>
|
val gradleSourceSets = ideModule.children.filter { it.data is GradleSourceSetData } as Collection<DataNode<GradleSourceSetData>>
|
||||||
for (gradleSourceSetNode in gradleSourceSets) {
|
for (gradleSourceSetNode in gradleSourceSets) {
|
||||||
val propertiesForSourceSet =
|
val propertiesForSourceSet =
|
||||||
@@ -295,10 +297,12 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
|
|||||||
gradleSourceSetNode.children.forEach { dataNode ->
|
gradleSourceSetNode.children.forEach { dataNode ->
|
||||||
val data = dataNode.data as? ContentRootData
|
val data = dataNode.data as? ContentRootData
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
|
/*
|
||||||
|
Code snippet for setting in content root properties
|
||||||
if (propertiesForSourceSet?.second?.pureKotlinSourceFolders?.contains(File(data.rootPath)) == true) {
|
if (propertiesForSourceSet?.second?.pureKotlinSourceFolders?.contains(File(data.rootPath)) == true) {
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
(dataNode as DataNode<ContentRootData>).isPureKotlinSourceFolder = true
|
(dataNode as DataNode<ContentRootData>).isPureKotlinSourceFolder = true
|
||||||
}
|
}*/
|
||||||
val packagePrefix = propertiesForSourceSet?.second?.packagePrefix
|
val packagePrefix = propertiesForSourceSet?.second?.packagePrefix
|
||||||
if (packagePrefix != null) {
|
if (packagePrefix != null) {
|
||||||
ExternalSystemSourceType.values().filter { !(it.isResource || it.isGenerated) }.forEach { type ->
|
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)
|
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) {
|
if (sourceSetNode == null) {
|
||||||
ideModule.compilerArgumentsBySourceSet = moduleNode.compilerArgumentsBySourceSet
|
ideModule.compilerArgumentsBySourceSet = moduleNode.compilerArgumentsBySourceSet
|
||||||
|
|||||||
+10
-1
@@ -121,7 +121,14 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
)
|
)
|
||||||
|
|
||||||
val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false)
|
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 compilerArguments = kotlinSourceSet.compilerArguments
|
||||||
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
val defaultCompilerArguments = kotlinSourceSet.defaultCompilerArguments
|
||||||
@@ -158,6 +165,8 @@ class KotlinSourceSetDataService : AbstractProjectDataService<GradleSourceSetDat
|
|||||||
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
productionOutputPath = (kotlinSourceSet.compilerArguments as? K2JSCompilerArguments)?.outputFile
|
||||||
testOutputPath = null
|
testOutputPath = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.pureKotlinSourceFolders = mainModuleNode.pureKotlinSourceFolders
|
||||||
}
|
}
|
||||||
|
|
||||||
return kotlinFacet
|
return kotlinFacet
|
||||||
|
|||||||
@@ -240,6 +240,8 @@ class KotlinFacetSettings {
|
|||||||
|
|
||||||
var externalProjectId: String = ""
|
var externalProjectId: String = ""
|
||||||
var isHmppEnabled: Boolean = false
|
var isHmppEnabled: Boolean = false
|
||||||
|
|
||||||
|
var pureKotlinSourceFolders: List<String> = emptyList()
|
||||||
}
|
}
|
||||||
|
|
||||||
interface KotlinFacetSettingsProvider {
|
interface KotlinFacetSettingsProvider {
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ private fun readV2AndLaterConfig(element: Element): KotlinFacetSettings {
|
|||||||
isTestModule = element.getAttributeValue("isTestModule")?.toBoolean() ?: false
|
isTestModule = element.getAttributeValue("isTestModule")?.toBoolean() ?: false
|
||||||
externalProjectId = element.getAttributeValue("externalProjectId") ?: ""
|
externalProjectId = element.getAttributeValue("externalProjectId") ?: ""
|
||||||
isHmppEnabled = element.getAttribute("isHmppProject")?.booleanValue ?: false
|
isHmppEnabled = element.getAttribute("isHmppProject")?.booleanValue ?: false
|
||||||
|
pureKotlinSourceFolders = element.getAttributeValue("pureKotlinSourceFolders")?.split(";")?.toList() ?: emptyList()
|
||||||
element.getChild("compilerSettings")?.let {
|
element.getChild("compilerSettings")?.let {
|
||||||
compilerSettings = CompilerSettings()
|
compilerSettings = CompilerSettings()
|
||||||
XmlSerializer.deserializeInto(compilerSettings!!, it)
|
XmlSerializer.deserializeInto(compilerSettings!!, it)
|
||||||
@@ -331,6 +332,9 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
|||||||
if (isHmppEnabled) {
|
if (isHmppEnabled) {
|
||||||
element.setAttribute("isHmppProject", isHmppEnabled.toString())
|
element.setAttribute("isHmppProject", isHmppEnabled.toString())
|
||||||
}
|
}
|
||||||
|
if (pureKotlinSourceFolders.isNotEmpty()) {
|
||||||
|
element.setAttribute("pureKotlinSourceFolders", pureKotlinSourceFolders.joinToString(";"))
|
||||||
|
}
|
||||||
productionOutputPath?.let {
|
productionOutputPath?.let {
|
||||||
if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) {
|
if (it != (compilerArguments as? K2JSCompilerArguments)?.outputFile) {
|
||||||
element.addContent(Element("productionOutputPath").apply { addContent(PathUtil.toSystemIndependentName(it)) })
|
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
|
// TODO There should be a way to figure out the correct platform version
|
||||||
val platform = detectPlatform(mavenProject)?.defaultPlatform
|
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 facetSettings = kotlinFacet.configuration.settings
|
||||||
val configuredPlatform = kotlinFacet.configuration.settings.targetPlatform!!
|
val configuredPlatform = kotlinFacet.configuration.settings.targetPlatform!!
|
||||||
val configuration = mavenPlugin.configurationElement
|
val configuration = mavenPlugin.configurationElement
|
||||||
|
|||||||
+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)
|
facet.configureFacet(languageVersion, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
||||||
if (apiVersion != null) {
|
if (apiVersion != null) {
|
||||||
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
facet.configuration.settings.apiLevel = LanguageVersion.fromVersionString(apiVersion)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -149,7 +149,8 @@ fun KotlinFacet.configureFacet(
|
|||||||
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>
|
||||||
) {
|
) {
|
||||||
val module = module
|
val module = module
|
||||||
with(configuration.settings) {
|
with(configuration.settings) {
|
||||||
@@ -169,6 +170,7 @@ fun KotlinFacet.configureFacet(
|
|||||||
this.apiLevel = languageLevel
|
this.apiLevel = languageLevel
|
||||||
}
|
}
|
||||||
this.coroutineSupport = if (languageLevel != null && languageLevel < LanguageVersion.KOTLIN_1_3) coroutineSupport else null
|
this.coroutineSupport = if (languageLevel != null && languageLevel < LanguageVersion.KOTLIN_1_3) coroutineSupport else null
|
||||||
|
this.pureKotlinSourceFolders = pureKotlinSourceFolders
|
||||||
}
|
}
|
||||||
|
|
||||||
module.externalCompilerVersion = compilerVersion
|
module.externalCompilerVersion = compilerVersion
|
||||||
@@ -185,7 +187,7 @@ fun KotlinFacet.configureFacet(
|
|||||||
platform: IdePlatform<*, *>,
|
platform: IdePlatform<*, *>,
|
||||||
modelsProvider: IdeModifiableModelsProvider
|
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> {
|
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)
|
facet.configureFacet(version, LanguageFeature.State.DISABLED, null, modelsProvider, false, emptyList())
|
||||||
modelsProvider.commit()
|
modelsProvider.commit()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -351,7 +351,8 @@ public class ConfigureKotlinTest extends AbstractConfigureKotlinTest {
|
|||||||
LanguageFeature.State.ENABLED,
|
LanguageFeature.State.ENABLED,
|
||||||
platform,
|
platform,
|
||||||
modelsProvider,
|
modelsProvider,
|
||||||
false
|
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