Add logging into ideaModelDependencies
This commit is contained in:
@@ -62,6 +62,7 @@ import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
import org.jetbrains.kotlin.types.typeUtil.closure
|
import org.jetbrains.kotlin.types.typeUtil.closure
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
import java.lang.StringBuilder
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
internal val LOG = Logger.getInstance(IdeaModuleInfo::class.java)
|
internal val LOG = Logger.getInstance(IdeaModuleInfo::class.java)
|
||||||
@@ -139,19 +140,39 @@ private fun ideaModelDependencies(
|
|||||||
forProduction: Boolean,
|
forProduction: Boolean,
|
||||||
platform: TargetPlatform
|
platform: TargetPlatform
|
||||||
): List<IdeaModuleInfo> {
|
): List<IdeaModuleInfo> {
|
||||||
|
// Use StringBuilder so that all lines are written into the log atomically (otherwise
|
||||||
|
// logs of call to ideaModelDependencies for several different modules interleave, leading
|
||||||
|
// to unreadable mess)
|
||||||
|
val debugString: StringBuilder? = if (LOG.isDebugEnabled) StringBuilder() else null
|
||||||
|
debugString?.appendLine("Building idea model dependencies for module $module, platform=${platform}, forProduction=$forProduction")
|
||||||
|
|
||||||
//NOTE: lib dependencies can be processed several times during recursive traversal
|
//NOTE: lib dependencies can be processed several times during recursive traversal
|
||||||
val result = LinkedHashSet<IdeaModuleInfo>()
|
val result = LinkedHashSet<IdeaModuleInfo>()
|
||||||
val dependencyEnumerator = ModuleRootManager.getInstance(module).orderEntries().compileOnly().recursively().exportedOnly()
|
val dependencyEnumerator = ModuleRootManager.getInstance(module).orderEntries().compileOnly().recursively().exportedOnly()
|
||||||
if (forProduction && module.getBuildSystemType() == BuildSystemType.JPS) {
|
if (forProduction && module.getBuildSystemType() == BuildSystemType.JPS) {
|
||||||
dependencyEnumerator.productionOnly()
|
dependencyEnumerator.productionOnly()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debugString?.append(" IDEA dependencies: [")
|
||||||
dependencyEnumerator.forEach { orderEntry ->
|
dependencyEnumerator.forEach { orderEntry ->
|
||||||
|
debugString?.append("${orderEntry.presentableName} ")
|
||||||
if (orderEntry.acceptAsDependency(forProduction)) {
|
if (orderEntry.acceptAsDependency(forProduction)) {
|
||||||
result.addAll(orderEntryToModuleInfo(module.project, orderEntry!!, forProduction))
|
result.addAll(orderEntryToModuleInfo(module.project, orderEntry!!, forProduction))
|
||||||
|
debugString?.append("OK; ")
|
||||||
|
} else {
|
||||||
|
debugString?.append("SKIP; ")
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
return result.filterNot { it is LibraryInfo && !platform.canDependOn(it.platform, module.isHMPPEnabled) }
|
debugString?.appendLine("]")
|
||||||
|
|
||||||
|
// Some dependencies prohibited (e.g. common can not depend on a platform)
|
||||||
|
val correctedResult = result.filterNot { it is LibraryInfo && !platform.canDependOn(it.platform, module.isHMPPEnabled) }
|
||||||
|
debugString?.appendLine(" Corrected result: ${correctedResult.joinToString(prefix = "[", postfix = "]", separator = ";") { it.displayedName }}")
|
||||||
|
|
||||||
|
LOG.debug(debugString?.toString())
|
||||||
|
|
||||||
|
return correctedResult
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun TargetPlatform.canDependOn(other: TargetPlatform, isHmppEnabled: Boolean): Boolean {
|
private fun TargetPlatform.canDependOn(other: TargetPlatform, isHmppEnabled: Boolean): Boolean {
|
||||||
|
|||||||
Reference in New Issue
Block a user