diff --git a/source/dub/dub.d b/source/dub/dub.d index 8a4854e..45f862d 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -1244,6 +1244,7 @@ Package m_rootPackage; bool[string] m_packagesToUpgrade; Package[PackageDependency] m_packages; + TreeNodes[][TreeNode] m_children; } @@ -1335,6 +1336,15 @@ protected override TreeNodes[] getChildren(TreeNode node) { + if (auto pc = node in m_children) + return *pc; + auto ret = getChildrenRaw(node); + m_children[node] = ret; + return ret; + } + + private final TreeNodes[] getChildrenRaw(TreeNode node) + { import std.array : appender; auto ret = appender!(TreeNodes[]); auto pack = getPackage(node.pack, node.config);