Gradle: Do not rely on isQualifiedModuleNamesEnabled() to predict module name

IDEA 173 uses resolve-level setting to control naming of imported modules

 #KT-20985 Fixed
This commit is contained in:
Alexey Sedunov
2017-10-31 14:49:34 +03:00
parent 3ead2e9cd4
commit 327caa086b
2 changed files with 26 additions and 11 deletions
@@ -49,8 +49,8 @@ var DataNode<ModuleData>.coroutines
by UserDataProperty(Key.create<String>("KOTLIN_COROUTINES"))
var DataNode<ModuleData>.platformPluginId
by UserDataProperty(Key.create<String>("PLATFORM_PLUGIN_ID"))
var DataNode<ModuleData>.implementedModule
by UserDataProperty(Key.create<DataNode<ModuleData>>("IMPLEMENTS"))
var DataNode<out ModuleData>.implementedModuleName
by UserDataProperty(Key.create<String>("IMPLEMENTED_MODULE_NAME"))
class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() {
override fun getToolingExtensionsClasses(): Set<Class<out Any>> {
@@ -167,11 +167,33 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
ideModule.compilerArgumentsBySourceSet = gradleModel.compilerArgumentsBySourceSet
ideModule.coroutines = gradleModel.coroutines
ideModule.platformPluginId = gradleModel.platformPluginId
ideModule.implementedModule = gradleModel.implements?.let { findModule(ideProject, it) }
addImplementedModuleNames(ideModule, ideProject, gradleModel)
super.populateModuleDependencies(gradleModule, ideModule, ideProject)
}
private fun addImplementedModuleNames(
dependentModule: DataNode<ModuleData>,
ideProject: DataNode<ProjectData>,
gradleModel: KotlinGradleModel
) {
val implementedModule = gradleModel.implements?.let { findModule(ideProject, it) } ?: return
if (resolverCtx.isResolveModulePerSourceSet) {
val dependentSourceSets = dependentModule.getSourceSetsMap()
val implementedSourceSets = implementedModule.getSourceSetsMap()
for ((sourceSetName, dependentSourceSet) in dependentSourceSets) {
val implementedSourceSet = implementedSourceSets[sourceSetName] ?: continue
dependentSourceSet.implementedModuleName = implementedSourceSet.data.internalName
}
}
else {
dependentModule.implementedModuleName = implementedModule.data.internalName
}
}
private fun DataNode<ModuleData>.getSourceSetsMap() =
ExternalSystemApiUtil.getChildren(this, GradleSourceSetData.KEY).associateBy { it.sourceSetName }
private val DataNode<out ModuleData>.sourceSetName
get() = (data as? GradleSourceSetData)?.id?.substringAfterLast(':')
@@ -208,7 +208,7 @@ private fun configureFacetByGradleModule(
}
with(kotlinFacet.configuration.settings) {
implementedModuleName = getImplementedModuleName(moduleNode, sourceSetName)
implementedModuleName = (sourceSetNode ?: moduleNode).implementedModuleName
testOutputPath = getExplicitTestOutputPath(moduleNode, platformKind)
}
@@ -221,13 +221,6 @@ private fun getExplicitTestOutputPath(moduleNode: DataNode<ModuleData>, platform
return K2JSCompilerArguments().apply { parseCommandLineArguments(k2jsArgumentList, this) }.outputFile
}
private fun getImplementedModuleName(moduleNode: DataNode<ModuleData>, sourceSetName: String?): String? {
val baseModuleName = moduleNode.implementedModule?.data?.internalName
if (baseModuleName == null || sourceSetName == null) return baseModuleName
val delimiter = if(isQualifiedModuleNamesEnabled()) "." else "_"
return "$baseModuleName$delimiter$sourceSetName"
}
private fun adjustClasspath(kotlinFacet: KotlinFacet, dependencyClasspath: List<String>) {
if (dependencyClasspath.isEmpty()) return
val arguments = kotlinFacet.configuration.settings.compilerArguments as? K2JVMCompilerArguments ?: return