private DefaultMutableTreeNode findOrCreateTreeNode()

in src/main/java/org/adoptopenjdk/jitwatch/ui/main/ClassTreePanel.java [134:189]


    private DefaultMutableTreeNode findOrCreateTreeNode(final DefaultMutableTreeNode parent, final Object value)
    {
        int childCount = parent.getChildCount();
        DefaultMutableTreeNode found = null;

        int placeToInsert = 0;
        boolean foundInsertPos = false;

        for (int i = 0; i < childCount; i++)
        {
            DefaultMutableTreeNode child = (DefaultMutableTreeNode) parent.getChildAt(i);
            int stringCompare = child.getUserObject().toString().compareTo(value.toString());

            if (stringCompare == 0)
            {
                found = child;
                break;
            }
            else if (!foundInsertPos && stringCompare < 0)
            {
                if (!(child.getUserObject() instanceof MetaPackage && value instanceof MetaClass))
                {
                    placeToInsert++;
                }
            }
            else
            {
                if (child.getUserObject() instanceof MetaPackage && value instanceof MetaClass)
                {
                    placeToInsert++;
                }
                else
                {
                    foundInsertPos = true;
                }
            }
        }

        if (found == null)
        {
            found = new DefaultMutableTreeNode(value);
            parent.insert(found, placeToInsert);

            if (value instanceof MetaPackage)
            {
                final String packageName = value.toString();
                if (sameVmCommand && openPackageNodes.contains(packageName))
                {
                    TreePath path = new TreePath(found.getPath());
                    treeTable.getTree().expandPath(path);
                }
            }
        }

        return found;
    }