From 21026001db3651f0e1cb4643eaf9fddec30b5a82 Mon Sep 17 00:00:00 2001 From: Dmitry Savvinov Date: Thu, 9 Jul 2020 12:13:43 +0700 Subject: [PATCH] Add logging into ideaModelDependencies --- .../idea/caches/project/IdeaModuleInfos.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index 232198f748e..c2253181965 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -62,6 +62,7 @@ import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices import org.jetbrains.kotlin.types.typeUtil.closure import org.jetbrains.kotlin.utils.addIfNotNull +import java.lang.StringBuilder import java.util.* internal val LOG = Logger.getInstance(IdeaModuleInfo::class.java) @@ -139,19 +140,39 @@ private fun ideaModelDependencies( forProduction: Boolean, platform: TargetPlatform ): List { + // 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 val result = LinkedHashSet() val dependencyEnumerator = ModuleRootManager.getInstance(module).orderEntries().compileOnly().recursively().exportedOnly() if (forProduction && module.getBuildSystemType() == BuildSystemType.JPS) { dependencyEnumerator.productionOnly() } + + debugString?.append(" IDEA dependencies: [") dependencyEnumerator.forEach { orderEntry -> + debugString?.append("${orderEntry.presentableName} ") if (orderEntry.acceptAsDependency(forProduction)) { result.addAll(orderEntryToModuleInfo(module.project, orderEntry!!, forProduction)) + debugString?.append("OK; ") + } else { + debugString?.append("SKIP; ") } 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 {