public void updateClassPath(final JarEntry lastEntry, boolean openInEditor) {
    classPath.removeAll();

    // Root element
    final JarEntry root = jarStructure.getRoot();
    final WebBreadcrumbButton rootElement = new WebBreadcrumbButton();
    rootElement.setIcon(root.getIcon());
    TooltipManager.setTooltip(rootElement, root.getIcon(), jarStructure.getJarLocation());
    rootElement.addActionListener(
        new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {
            final WebPopupMenu rootMenu = new WebPopupMenu();

            WebMenuItem showInFS = new WebMenuItem("Show in folder", browseIcon);
            showInFS.addActionListener(
                new ActionListener() {
                  @Override
                  public void actionPerformed(ActionEvent e) {
                    try {
                      File jarFile = new File(jarStructure.getJarLocation());
                      Desktop.getDesktop().browse(jarFile.getParentFile().toURI());
                    } catch (Throwable ex) {
                      ex.printStackTrace();
                    }
                  }
                });
            rootMenu.add(showInFS);

            List<JarEntry> entries = jarStructure.getChildEntries(root);
            if (entries.size() > 0) {
              rootMenu.addSeparator();
              for (JarEntry entry : entries) {
                rootMenu.add(createEntryMenuItem(entry));
              }
            }

            rootMenu.showBelowMiddle(rootElement);
          }
        });
    classPath.add(rootElement);

    if (lastEntry != null) {
      // All other elements
      List<JarEntry> path = lastEntry.getPath();
      for (final JarEntry entry : path) {
        if (entry.getType().equals(JarEntryType.packageEntry)) {
          final WebBreadcrumbButton element = new WebBreadcrumbButton();
          element.setIcon(entry.getIcon());
          element.setText(entry.getName());
          element.addActionListener(
              new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                  List<JarEntry> entries = jarStructure.getChildEntries(entry);
                  if (entries.size() > 0) {
                    final WebPopupMenu packageMenu = new WebPopupMenu();
                    for (JarEntry menuEntry : entries) {
                      packageMenu.add(createEntryMenuItem(menuEntry));
                    }
                    packageMenu.showBelowMiddle(element);
                  }
                }
              });
          classPath.add(element);
        } else {
          WebBreadcrumbLabel element = new WebBreadcrumbLabel();
          element.setIcon(entry.getIcon());
          element.setText(entry.getName());
          classPath.add(element);
        }
      }
    }

    classPath.updateBreadcrumb();

    if (openInEditor && lastEntry != null) {
      if (lastEntry.getType().equals(JarEntryType.jarEntry)
          || lastEntry.getType().equals(JarEntryType.packageEntry)) {
        // Queueing last element menu to let breadcrumb update element locations first
        SwingUtilities.invokeLater(
            new Runnable() {
              @Override
              public void run() {
                // Opening last element menu if it is a package
                ((WebBreadcrumbButton) classPath.getLastComponent()).doClick();
              }
            });
      } else {
        // Viewing last element if it is a file
        viewTabbedPane.removeChangeListener(viewChangeListener);
        viewEntry(lastEntry);
        viewTabbedPane.addChangeListener(viewChangeListener);
      }
    }
  }