Find all transitive dependencies for modules in IDEA project (this is a mini plugin for https://github.com/dkandalov/live-plugin)
June 2, 2014 ยท View on GitHub
import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModifiableRootModel import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.OrderRootType import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.roots.libraries.LibraryTable import liveplugin.PluginUtil
import static liveplugin.PluginUtil.*
if (isIdeStartup) return
// Finds all transitive dependencies (modules and libraries) of specified modules in current project.
PluginUtil.runReadAction { def moduleNames = ["openapi"] def moduleManager = ModuleManager.getInstance(project) def modules = moduleNames.collect{ moduleManager.findModuleByName(it) }
List<Module> dependantModules = []
List<Library> dependantLibs = []
while (!modules.empty) {
def module = modules.remove(0)
def rootManager = ModuleRootManager.getInstance(module)
dependantLibs.addAll(rootManager.orderEntries.findAll{ it instanceof LibraryOrderEntry }.collect{ it.library })
dependantModules.add(module)
modules.addAll(rootManager.moduleDependencies.findAll{ !dependantModules.contains(it) })
}
def moduleOutputPaths = dependantModules.collect{ CompilerModuleExtension.getInstance(it).compilerOutputPath.canonicalPath }.unique()
def libPaths = dependantLibs.collectAll{ it.getFiles(OrderRootType.CLASSES).collect{it.canonicalPath} }.flatten().unique()
show(moduleOutputPaths.join("\n"))
show(libPaths.join("\n"))
}