void (@NotNull PsiElement baseElement, @NotNull MouseEvent e, @NlsContexts.PopupContent String dumbModeMessage) { Project project = baseElement.getProject(); if (DumbService.isDumb(project)) { DumbService.getInstance(project).showDumbModeNotificationForFunctionality(dumbModeMessage, DumbModeBlockedFunctionality.GotoImplementations); return; } PsiUtilCore.ensureValid(baseElement); PsiFile containingFile = baseElement.getContainingFile(); //for compiled files a decompiled copy is analysed in the editor (see TextEditorBackgroundHighlighter.getPasses) //but it's a non-physical copy with disabled events (see ClsFileImpl.getDecompiledPsiFile) //which in turn means that no document can be found for such file - it's required to restore original file //other non-physical copies should not be opened in the editor PsiFile originalFile = containingFile.getOriginalFile(); Editor editor = UtilKt.mockEditor(originalFile); GotoData source = createDataForSource(Objects.requireNonNull(editor, "No document for " + containingFile + "; original: " + originalFile), baseElement.getTextOffset(), baseElement); if (source.isCanceled) return; if (source.targets.length == 0) { String message = getNotFoundMessage(project, editor, containingFile); // Cannot call showEditorHint, as it doesn't work for mockEditor instance JComponent label = HintUtil.createErrorLabel(message); label.setBorder(HintUtil.createHintBorder()); int flags = HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE | HintManager.HIDE_BY_SCROLLING; HintManager.getInstance().showHint(label, new RelativePoint(e), flags, 0); return; } showNotEmpty(project, source, popup -> popup.show(new RelativePoint(e))); }