Rework Tune module graph dependencies building

#KT-50701 In progress
This commit is contained in:
Mikhael Bogdanov
2022-01-10 12:40:09 +01:00
committed by Space
parent 6f323dd33a
commit 92e893bebe
6 changed files with 22 additions and 15 deletions
@@ -127,7 +127,7 @@ class CliJavaModuleFinder(
useSig -> createModuleFromSignature(moduleInfo)
else -> error("Can't find ${moduleRoot.path} module")
},
file, true
file, !useLastJdkApi && useSig
)
}
@@ -30,14 +30,15 @@ class JavaModuleGraph(finder: JavaModuleFinder) {
// Every module implicitly depends on java.base
visited += "java.base"
fun dfs(moduleName: String) {
fun dfs(moduleName: String): Boolean {
// Automatic modules have no transitive exports, so we only consider explicit modules here
val moduleInfo = (module(moduleName) as? JavaModule.Explicit)?.moduleInfo ?: return
val moduleInfo = (module(moduleName) as? JavaModule.Explicit)?.moduleInfo ?: return false
for ((dependencyModuleName, isTransitive) in moduleInfo.requires) {
if (isTransitive && visited.add(dependencyModuleName)) {
dfs(dependencyModuleName)
}
}
return true
}
for (moduleName in moduleNames) {
@@ -47,14 +48,11 @@ class JavaModuleGraph(finder: JavaModuleFinder) {
// Do nothing; all automatic modules should be added to compilation roots at call site as per java.lang.module javadoc
}
is JavaModule.Explicit -> {
if (module.isJdkModule) {
//ct.sym can miss some internal modules from non-transitive dependencies
dfs(moduleName)
} else {
for ((dependencyModuleName) in module.moduleInfo.requires) {
if (visited.add(dependencyModuleName)) {
dfs(dependencyModuleName)
}
for ((dependencyModuleName, isTransitive) in module.moduleInfo.requires) {
if (visited.add(dependencyModuleName)) {
val moduleExists = dfs(dependencyModuleName)
//ct.sym can miss some internal modules from non-transitive dependencies
if (!moduleExists && !isTransitive && module.isJdkModuleFromCtSym) visited.remove(dependencyModuleName)
}
}
}