ExecutionNode (long eventTime, @NotNull FilePosition filePosition, @Nullable Navigatable navigatable, ExecutionNode parentNode) { String filePath = FileUtil.toSystemIndependentName(filePosition.getFile().getPath()); String parentsPath = ""; String relativePath = FileUtil.getRelativePath(myWorkingDir, filePath, '/'); if (relativePath != null) { if (relativePath.equals(".")) { return parentNode; } if (!relativePath.startsWith("../../")) { parentsPath = myWorkingDir; } } if (isEmpty(parentsPath)) { File userHomeDir = new File(SystemProperties.getUserHome()); if (FileUtil.isAncestor(userHomeDir, new File(filePath), true)) { relativePath = FileUtil.getLocationRelativeToUserHome(filePath, false); } else { relativePath = filePath; } } else { relativePath = getRelativePath(parentsPath, filePath); } Path path = Paths.get(relativePath); String nodeName = path.getFileName().toString(); Path pathParent = path.getParent(); String pathHint = pathParent == null ? null : pathParent.toString(); parentNode = getOrCreateMessagesNode(eventTime, filePath, parentNode, nodeName, pathHint, () -> { VirtualFile file = VfsUtil.findFileByIoFile(filePosition.getFile(), false); if (file != null) { return file.getFileType().getIcon(); } return null; }, navigatable, nodesMap, myProject); return parentNode; }