public void start()

in src/main/java/org/adoptopenjdk/jitwatch/ui/main/JITWatchUI.java [344:584]


    public void start()
    {
        mainPanel = new JPanel(new BorderLayout());
        parserChooser = new ParserChooser(this);

        ComboBox<ParserType> comboParser = parserChooser.getCombo();
        String parserProperty = System.getProperty("jitwatch.parser", ParserType.HOTSPOT.toString());
        comboParser.setSelectedItem(ParserType.fromString(parserProperty));

        AnAction openLogAction = new AnAction("Open the JIT log file for analysis", "Open Log", AllIcons.Actions.Menu_open)
        {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e)
            {
                stopParsing();
                SwingUtilities.invokeLater(() ->
                {
                    if (chooseJITLog(project))
                    {
                        readLogFile();
                    }
                });
            }
        };

        AnAction stopAction = new AnAction("Stop loading", "Stop", AllIcons.Actions.Suspend)
        {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e)
            {
                stopParsing();
            }
            @Override
            public void update(@NotNull AnActionEvent e)
            {
                Presentation presentation = e.getPresentation();
                presentation.setEnabled(isReadingLogFile);
            }
        };

        AnAction resetAction = new AnAction("Reset", "Reset", AllIcons.Actions.Restart)
        {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e)
            {
                logParser.reset();
                JitWatchModelService.getInstance(project).setParserResult(null);
                clear();
            }
        };

        DefaultActionGroup actionGroup = new DefaultActionGroup();

        actionGroup.add(openLogAction);
        actionGroup.add(stopAction);
        actionGroup.add(resetAction);

        DefaultActionGroup popupGroup = new DefaultActionGroup("Options", true);

        popupGroup.add(new ToggleAction("Hide Interfaces")
        {
            @Override
            public boolean isSelected(@NotNull AnActionEvent e)
            {
                return getConfig().isHideInterfaces();
            }

            @Override
            public void setSelected(@NotNull AnActionEvent e, boolean state)
            {
                getConfig().setHideInterfaces(state);
                getConfig().saveConfig();
                clearAndRefreshTreeView(true);
            }
        });

        popupGroup.add(new ToggleAction("Hide Uncompiled Classes")
        {
            @Override
            public boolean isSelected(@NotNull AnActionEvent e)
            {
                return getConfig().isShowOnlyCompiledClasses();
            }

            @Override
            public void setSelected(@NotNull AnActionEvent e, boolean state)
            {
                getConfig().setShowOnlyCompiledClasses(state);
                getConfig().saveConfig();
                clearAndRefreshTreeView(true);
            }
        });

        popupGroup.add(new ToggleAction("Hide Uncompiled Members")
        {
            @Override
            public boolean isSelected(@NotNull AnActionEvent e)
            {
                return getConfig().isShowOnlyCompiledMembers();
            }

            @Override
            public void setSelected(@NotNull AnActionEvent e, boolean state)
            {
                getConfig().setShowOnlyCompiledMembers(state);
                getConfig().saveConfig();
                if (classMemberList != null)
                {
                    classMemberList.refresh();
                }
            }
        });

        AnAction showPopupAction = new AnAction(null, "Options", AllIcons.Actions.Show)
        {
            @Override
            public void actionPerformed(@NotNull AnActionEvent e) {
                Component component = e.getInputEvent().getComponent();
                if (component instanceof JComponent) {
                    ActionPopupMenu popupMenu = ActionManager.getInstance().createActionPopupMenu(
                            ActionPlaces.UNKNOWN, popupGroup);
                    popupMenu.getComponent().show((JComponent) component, 0, 0);
                }
            }
        };

        actionGroup.add(showPopupAction);

        actionToolbar = ActionManager.getInstance().createActionToolbar("SideToolbar", actionGroup, false);
        actionToolbar.setOrientation(SwingConstants.VERTICAL);
        actionToolbar.setTargetComponent(mainPanel);
        JComponent toolbarComponent = actionToolbar.getComponent();

        mainPanel.add(toolbarComponent, BorderLayout.WEST);

        lblHeap = new JLabel();

        lblVmVersion = new JLabel();

        StringBuilder vmBuilder = new StringBuilder();

        vmBuilder.append("VM: ");
        vmBuilder.append(System.getProperty("java.vendor"));
        vmBuilder.append(" JDK");
        vmBuilder.append(System.getProperty("java.version"));
        vmBuilder.append(" build ");
        vmBuilder.append(System.getProperty("java.runtime.version"));

        lblVmVersion.setText(vmBuilder.toString());

        compilationTableModel = new DefaultTableModel(compilationTableColumnNames, 0);
        compilationTable = new JBTable(compilationTableModel);
        compilationTable.setFillsViewportHeight(true);

        compilationTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        compilationTable.getSelectionModel().addListSelectionListener(new ListSelectionListener()
        {
            @Override
            public void valueChanged(ListSelectionEvent e)
            {
                if (!selectedProgrammatically)
                {
                    if (selectedMember != null && !e.getValueIsAdjusting())
                    {
                        int selectedIndex = compilationTable.getSelectedRow();
                        if (selectedIndex >= 0)
                        {
                            selectedMember.setSelectedCompilation(selectedIndex);
                            setSelectedMetaMemberFromCompilationTable();
                        }
                    }
                }
            }
        });

        JBSplitter spMethodInfo = new JBSplitter(true); // true for vertical split
        spMethodInfo.setProportion(0.5f); // Set initial proportion (0.0f to 1.0f)
        spMethodInfo.setDividerWidth(5); // Optional: set divider width

        classMemberList = new ClassMemberListPanel(this, getConfig());
        classMemberList.registerListener(this);

        spMethodInfo.setFirstComponent(classMemberList);
        spMethodInfo.setSecondComponent(new JBScrollPane(compilationTable));

        classTree = new ClassTreePanel(this, getConfig());

        JBSplitter spMain = new JBSplitter(false); // false for horizontal split
        spMain.setProportion(0.3f); // Adjust proportion as needed
        spMain.setDividerWidth(5);

        spMain.setFirstComponent(classTree);
        spMain.setSecondComponent(spMethodInfo);

        log("Welcome to JITWatch by Chris Newland (@chriswhocodes on Twitter) and the AdoptOpenJDK project.\n");
        log("Please report issues via GitHub (https://github.com/AdoptOpenJDK/jitwatch).\n");
        log("Includes an assembly reference from x86asm.net licenced under http://ref.x86asm.net/index.html#License\n");

        if (jitLogFile == null)
        {
            log("Choose a JIT log file");
        }
        else
        {
            log("Using JIT log file: " + jitLogFile.getAbsolutePath());
        }

        JPanel hboxBottom = new JPanel();
        hboxBottom.setLayout(new FlowLayout(FlowLayout.LEFT, 4, 4));

        JLabel labelParser = new JLabel("Select Parser");

        hboxBottom.add(labelParser);
        hboxBottom.add(comboParser);
        hboxBottom.add(lblHeap);
        hboxBottom.add(Box.createHorizontalGlue());
        hboxBottom.add(lblVmVersion);

        mainPanel.add(spMain, BorderLayout.CENTER);
        mainPanel.add(hboxBottom, BorderLayout.SOUTH);

        mainContent = contentManager.getFactory().createContent(this.mainPanel, "Main", false);
        contentManager.addContent(mainContent, 0);

        logPanel = new LogPanel();
        logContent = contentManager.getFactory().createContent(logPanel, "Log", false);
        contentManager.addContent(logContent);

        int refreshMillis = 1000;

        Timer timer = new Timer(refreshMillis, new ActionListener()
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                refresh();
            }
        });
        timer.start();
        updateButtons();
    }