try { val defaultTree = tree.model as AsyncTreeModel val root = defaultTree.root as DefaultMutableTreeNode val flagFind = getFlags.flags.items println(flagFind.size) println(flagFind[2]) for ((idx, flag) in flagFind.withIndex()) { println(idx) var found = false var e = root.depthFirstEnumeration() while (e.hasMoreElements()) { val node = e.nextElement() val parent = node as DefaultMutableTreeNode if (parent.userObject is FlagNodeParent) { var parentNode = parent.userObject as FlagNodeParent println("flag key ${flag.key}") println("existing key ${parentNode.key}") println("existing version ${parentNode.flag.version}") if ((parentNode.key == flag.key) && (parentNode.flag.version < flag.version)) { println(parentNode.key) println("Parent version ${parentNode.flag.version}") println("new version: ${flag.version}") found = true //val flag = getFlags.flags.items.find { it.key == parentNode.key } //tree.setEditable(true); parentNode = FlagNodeParent(flag, settings, getFlags.flags, myProject/*, getFlags.flagConfigs*/) treeModel.invalidate(TreePath(parent), true) //break } } } if (!found) { val root = tree.model.root as DefaultMutableTreeNode val newNode = DefaultMutableTreeNode() newNode.userObject = FlagNodeParent(flag, settings, getFlags.flags, myProject/*, getFlags.flagConfigs*/) tree.setEditable(true) root.add(newNode) } tree.invalidate() } } catch (e: Error) { println(e) }