Search in sources :

Example 41 with HyperlinkListener

use of javax.swing.event.HyperlinkListener in project intellij-community by JetBrains.

the class NotificationsManagerImpl method createBalloon.

@NotNull
public static Balloon createBalloon(@Nullable final JComponent windowComponent, @NotNull final Notification notification, final boolean showCallout, final boolean hideOnClickOutside, @NotNull Ref<BalloonLayoutData> layoutDataRef, @NotNull Disposable parentDisposable) {
    final BalloonLayoutData layoutData = layoutDataRef.isNull() ? new BalloonLayoutData() : layoutDataRef.get();
    if (layoutData.groupId == null) {
        if (NotificationsConfigurationImpl.getSettings(notification.getGroupId()).isShouldLog()) {
            layoutData.groupId = notification.getGroupId();
            layoutData.id = notification.id;
        }
    } else {
        layoutData.groupId = null;
        layoutData.mergeData = null;
    }
    layoutDataRef.set(layoutData);
    if (layoutData.fillColor == null) {
        layoutData.fillColor = FILL_COLOR;
    }
    if (layoutData.borderColor == null) {
        layoutData.borderColor = BORDER_COLOR;
    }
    boolean actions = !notification.getActions().isEmpty();
    boolean showFullContent = layoutData.showFullContent || notification instanceof NotificationActionProvider;
    Color foregroundR = Gray._0;
    Color foregroundD = Gray._191;
    final Color foreground = new JBColor(foregroundR, foregroundD);
    final JEditorPane text = new JEditorPane() {

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if (layoutData.showMinSize) {
                Point location = getCollapsedTextEndLocation(this, layoutData);
                if (location != null) {
                    g.setColor(getForeground());
                    g.drawString("...", location.x, location.y + g.getFontMetrics().getAscent());
                }
            }
        }
    };
    text.setEditorKit(new HTMLEditorKit() {

        final HTMLEditorKit kit = UIUtil.getHTMLEditorKit();

        final HTMLFactory factory = new HTMLFactory() {

            public View create(Element e) {
                View view = super.create(e);
                if (view instanceof ParagraphView) {
                    // wrap too long words, for example: ATEST_TABLE_SIGNLE_ROW_UPDATE_AUTOCOMMIT_A_FIK
                    return new ParagraphView(e) {

                        protected SizeRequirements calculateMinorAxisRequirements(int axis, SizeRequirements r) {
                            if (r == null) {
                                r = new SizeRequirements();
                            }
                            r.minimum = (int) layoutPool.getMinimumSpan(axis);
                            r.preferred = Math.max(r.minimum, (int) layoutPool.getPreferredSpan(axis));
                            r.maximum = Integer.MAX_VALUE;
                            r.alignment = 0.5f;
                            return r;
                        }
                    };
                }
                return view;
            }
        };

        @Override
        public StyleSheet getStyleSheet() {
            return kit.getStyleSheet();
        }

        @Override
        public ViewFactory getViewFactory() {
            return factory;
        }
    });
    text.setForeground(foreground);
    final HyperlinkListener listener = NotificationsUtil.wrapListener(notification);
    if (listener != null) {
        text.addHyperlinkListener(listener);
    }
    String fontStyle = NotificationsUtil.getFontStyle();
    int prefSize = new JLabel(NotificationsUtil.buildHtml(notification, null, true, null, fontStyle)).getPreferredSize().width;
    String style = prefSize > BalloonLayoutConfiguration.MaxWidth ? BalloonLayoutConfiguration.MaxWidthStyle : null;
    if (layoutData.showFullContent) {
        style = prefSize > BalloonLayoutConfiguration.MaxFullContentWidth ? BalloonLayoutConfiguration.MaxFullContentWidthStyle : null;
    }
    String textR = NotificationsUtil.buildHtml(notification, style, true, foregroundR, fontStyle);
    String textD = NotificationsUtil.buildHtml(notification, style, true, foregroundD, fontStyle);
    LafHandler lafHandler = new LafHandler(text, textR, textD);
    layoutData.lafHandler = lafHandler;
    text.setEditable(false);
    text.setOpaque(false);
    if (UIUtil.isUnderNimbusLookAndFeel()) {
        text.setBackground(UIUtil.TRANSPARENT_COLOR);
    }
    text.setBorder(null);
    final JPanel content = new NonOpaquePanel(new BorderLayout());
    if (text.getCaret() != null) {
        text.setCaretPosition(0);
    }
    final JScrollPane pane = createBalloonScrollPane(text, false);
    pane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {

        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
            JScrollBar scrollBar = pane.getVerticalScrollBar();
            if (layoutData.showMinSize && scrollBar.getValue() > 0) {
                scrollBar.removeAdjustmentListener(this);
                scrollBar.setValue(0);
                scrollBar.addAdjustmentListener(this);
            }
        }
    });
    LinkLabel<Void> expandAction = null;
    int lines = 3;
    if (notification.hasTitle()) {
        lines--;
    }
    if (actions) {
        lines--;
    }
    layoutData.fullHeight = text.getPreferredSize().height;
    layoutData.twoLineHeight = calculateContentHeight(lines);
    layoutData.maxScrollHeight = Math.min(layoutData.fullHeight, calculateContentHeight(10));
    layoutData.configuration = BalloonLayoutConfiguration.create(notification, layoutData, actions);
    if (layoutData.welcomeScreen) {
        layoutData.maxScrollHeight = layoutData.fullHeight;
    } else if (!showFullContent && layoutData.maxScrollHeight != layoutData.fullHeight) {
        pane.setViewport(new GradientViewport(text, JBUI.insets(10, 0), true) {

            @Nullable
            @Override
            protected Color getViewColor() {
                return layoutData.fillColor;
            }

            @Override
            protected void paintGradient(Graphics g) {
                if (!layoutData.showMinSize) {
                    super.paintGradient(g);
                }
            }
        });
    }
    configureBalloonScrollPane(pane, layoutData.fillColor);
    if (showFullContent) {
        pane.setPreferredSize(text.getPreferredSize());
    } else if (layoutData.twoLineHeight < layoutData.fullHeight) {
        text.setPreferredSize(null);
        Dimension size = text.getPreferredSize();
        size.height = layoutData.twoLineHeight;
        text.setPreferredSize(size);
        text.setSize(size);
        layoutData.showMinSize = true;
        pane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        pane.setPreferredSize(size);
        text.setCaret(new TextCaret(layoutData));
        expandAction = new LinkLabel<>(null, AllIcons.Ide.Notification.Expand, new LinkListener<Void>() {

            @Override
            public void linkSelected(LinkLabel link, Void ignored) {
                layoutData.showMinSize = !layoutData.showMinSize;
                text.setPreferredSize(null);
                Dimension size = text.getPreferredSize();
                if (layoutData.showMinSize) {
                    size.height = layoutData.twoLineHeight;
                    pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
                    link.setIcon(AllIcons.Ide.Notification.Expand);
                    link.setHoveringIcon(AllIcons.Ide.Notification.ExpandHover);
                } else {
                    text.select(0, 0);
                    size.height = layoutData.fullHeight;
                    pane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
                    link.setIcon(AllIcons.Ide.Notification.Collapse);
                    link.setHoveringIcon(AllIcons.Ide.Notification.CollapseHover);
                }
                text.setPreferredSize(size);
                text.setSize(size);
                if (!layoutData.showMinSize) {
                    size = new Dimension(size.width, layoutData.maxScrollHeight);
                }
                pane.setPreferredSize(size);
                content.doLayout();
                layoutData.doLayout.run();
            }
        });
        expandAction.setHoveringIcon(AllIcons.Ide.Notification.ExpandHover);
    }
    final CenteredLayoutWithActions layout = new CenteredLayoutWithActions(text, layoutData);
    JPanel centerPanel = new NonOpaquePanel(layout) {

        @Override
        protected void paintChildren(Graphics g) {
            super.paintChildren(g);
            Component title = layout.getTitle();
            if (title != null && layoutData.showActions != null && layoutData.showActions.compute()) {
                int width = layoutData.configuration.allActionsOffset;
                int x = getWidth() - width - JBUI.scale(5);
                int y = layoutData.configuration.topSpaceHeight;
                int height = title instanceof JEditorPane ? getFirstLineHeight((JEditorPane) title) : title.getHeight();
                g.setColor(layoutData.fillColor);
                g.fillRect(x, y, width, height);
                width = layoutData.configuration.beforeGearSpace;
                x -= width;
                ((Graphics2D) g).setPaint(new GradientPaint(x, y, ColorUtil.withAlpha(layoutData.fillColor, 0.2), x + width, y, layoutData.fillColor));
                g.fillRect(x, y, width, height);
            }
        }
    };
    content.add(centerPanel, BorderLayout.CENTER);
    if (notification.hasTitle()) {
        String titleStyle = StringUtil.defaultIfEmpty(fontStyle, "") + "white-space:nowrap;";
        String titleR = NotificationsUtil.buildHtml(notification, titleStyle, false, foregroundR, null);
        String titleD = NotificationsUtil.buildHtml(notification, titleStyle, false, foregroundD, null);
        JLabel title = new JLabel();
        lafHandler.setTitle(title, titleR, titleD);
        title.setOpaque(false);
        if (UIUtil.isUnderNimbusLookAndFeel()) {
            title.setBackground(UIUtil.TRANSPARENT_COLOR);
        }
        title.setForeground(foreground);
        centerPanel.add(title, BorderLayout.NORTH);
    }
    if (expandAction != null) {
        centerPanel.add(expandAction, BorderLayout.EAST);
    }
    if (notification.hasContent()) {
        centerPanel.add(layoutData.welcomeScreen ? text : pane, BorderLayout.CENTER);
    }
    if (!layoutData.welcomeScreen) {
        final Icon icon = NotificationsUtil.getIcon(notification);
        JComponent iconComponent = new JComponent() {

            @Override
            protected void paintComponent(Graphics g) {
                super.paintComponent(g);
                icon.paintIcon(this, g, layoutData.configuration.iconOffset.width, layoutData.configuration.iconOffset.height);
            }
        };
        iconComponent.setOpaque(false);
        iconComponent.setPreferredSize(new Dimension(layoutData.configuration.iconPanelWidth, 2 * layoutData.configuration.iconOffset.height + icon.getIconHeight()));
        content.add(iconComponent, BorderLayout.WEST);
    }
    JPanel buttons = createButtons(notification, content, listener);
    if (buttons != null) {
        layoutData.groupId = null;
        layoutData.mergeData = null;
        buttons.setBorder(new EmptyBorder(0, 0, JBUI.scale(5), JBUI.scale(7)));
    }
    HoverAdapter hoverAdapter = new HoverAdapter();
    hoverAdapter.addSource(content);
    hoverAdapter.addSource(centerPanel);
    hoverAdapter.addSource(text);
    hoverAdapter.addSource(pane);
    if (buttons == null && actions) {
        createActionPanel(notification, centerPanel, layoutData.configuration.actionGap, hoverAdapter);
    }
    if (expandAction != null) {
        hoverAdapter.addComponent(expandAction, component -> {
            Rectangle bounds;
            Point location = SwingUtilities.convertPoint(content.getParent(), content.getLocation(), component.getParent());
            if (layoutData.showMinSize) {
                Component centerComponent = layoutData.welcomeScreen ? text : pane;
                Point centerLocation = SwingUtilities.convertPoint(centerComponent.getParent(), centerComponent.getLocation(), component.getParent());
                bounds = new Rectangle(location.x, centerLocation.y, content.getWidth(), centerComponent.getHeight());
            } else {
                bounds = new Rectangle(location.x, component.getY(), content.getWidth(), component.getHeight());
                JBInsets.addTo(bounds, JBUI.insets(5, 0, 7, 0));
            }
            return bounds;
        });
    }
    hoverAdapter.initListeners();
    if (layoutData.mergeData != null) {
        createMergeAction(layoutData, content);
    }
    text.setSize(text.getPreferredSize());
    Dimension paneSize = new Dimension(text.getPreferredSize());
    int maxWidth = JBUI.scale(600);
    if (windowComponent != null) {
        maxWidth = Math.min(maxWidth, windowComponent.getWidth() - 20);
    }
    if (paneSize.width > maxWidth) {
        pane.setPreferredSize(new Dimension(maxWidth, paneSize.height + UIUtil.getScrollBarWidth()));
    }
    final BalloonBuilder builder = JBPopupFactory.getInstance().createBalloonBuilder(content);
    builder.setFillColor(layoutData.fillColor).setCloseButtonEnabled(buttons == null).setShowCallout(showCallout).setShadow(false).setAnimationCycle(200).setHideOnClickOutside(hideOnClickOutside).setHideOnAction(hideOnClickOutside).setHideOnKeyOutside(hideOnClickOutside).setHideOnFrameResize(false).setBorderColor(layoutData.borderColor).setBorderInsets(JBUI.emptyInsets());
    if (layoutData.fadeoutTime != 0) {
        builder.setFadeoutTime(layoutData.fadeoutTime);
    }
    final BalloonImpl balloon = (BalloonImpl) builder.createBalloon();
    balloon.setAnimationEnabled(false);
    notification.setBalloon(balloon);
    balloon.setShadowBorderProvider(new NotificationBalloonShadowBorderProvider(layoutData.fillColor, layoutData.borderColor));
    if (!layoutData.welcomeScreen && buttons == null) {
        balloon.setActionProvider(new NotificationBalloonActionProvider(balloon, layout.getTitle(), layoutData, notification.getGroupId()));
    }
    Disposer.register(parentDisposable, balloon);
    return balloon;
}
Also used : NonOpaquePanel(com.intellij.ui.components.panels.NonOpaquePanel) HyperlinkListener(javax.swing.event.HyperlinkListener) EmptyBorder(javax.swing.border.EmptyBorder) GradientViewport(com.intellij.ui.components.GradientViewport) ParagraphView(javax.swing.text.html.ParagraphView) ParagraphView(javax.swing.text.html.ParagraphView) LinkLabel(com.intellij.ui.components.labels.LinkLabel) NotNull(org.jetbrains.annotations.NotNull)

Example 42 with HyperlinkListener

use of javax.swing.event.HyperlinkListener in project intellij-community by JetBrains.

the class FileInEditorProcessor method processCode.

public void processCode() {
    if (myShouldOptimizeImports) {
        myProcessor = new OptimizeImportsProcessor(myProject, myFile);
    }
    if (myProcessChangesTextOnly && !FormatChangedTextUtil.hasChanges(myFile)) {
        myNoChangesDetected = true;
    }
    myProcessor = mixWithReformatProcessor(myProcessor);
    if (myShouldRearrangeCode) {
        myProcessor = mixWithRearrangeProcessor(myProcessor);
    }
    if (shouldNotify()) {
        myProcessor.setCollectInfo(true);
        myProcessor.setPostRunnable(() -> {
            String message = prepareMessage();
            if (!myEditor.isDisposed() && myEditor.getComponent().isShowing()) {
                HyperlinkListener hyperlinkListener = new HyperlinkAdapter() {

                    @Override
                    protected void hyperlinkActivated(HyperlinkEvent e) {
                        AnAction action = ActionManager.getInstance().getAction("ShowReformatFileDialog");
                        DataManager manager = DataManager.getInstance();
                        if (manager != null) {
                            DataContext context = manager.getDataContext(myEditor.getContentComponent());
                            action.actionPerformed(AnActionEvent.createFromAnAction(action, null, "", context));
                        }
                    }
                };
                showHint(myEditor, message, hyperlinkListener);
            }
        });
    }
    myProcessor.run();
}
Also used : DataContext(com.intellij.openapi.actionSystem.DataContext) HyperlinkEvent(javax.swing.event.HyperlinkEvent) HyperlinkListener(javax.swing.event.HyperlinkListener) DataManager(com.intellij.ide.DataManager) AnAction(com.intellij.openapi.actionSystem.AnAction) HyperlinkAdapter(com.intellij.ui.HyperlinkAdapter)

Example 43 with HyperlinkListener

use of javax.swing.event.HyperlinkListener in project intellij-community by JetBrains.

the class IntentionDescriptionPanel method setupPoweredByPanel.

private void setupPoweredByPanel(final IntentionActionMetaData actionMetaData) {
    PluginId pluginId = actionMetaData == null ? null : actionMetaData.getPluginId();
    JComponent owner;
    if (pluginId == null) {
        @NonNls String label = XmlStringUtil.wrapInHtml("<b>" + ApplicationNamesInfo.getInstance().getFullProductName() + "</b>");
        owner = new JLabel(label);
    } else {
        final IdeaPluginDescriptor pluginDescriptor = PluginManager.getPlugin(pluginId);
        HyperlinkLabel label = new HyperlinkLabel(CodeInsightBundle.message("powered.by.plugin", pluginDescriptor.getName()));
        label.addHyperlinkListener(new HyperlinkListener() {

            @Override
            public void hyperlinkUpdate(HyperlinkEvent e) {
                final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
                final PluginManagerConfigurable pluginConfigurable = new PluginManagerConfigurable(PluginManagerUISettings.getInstance());
                final Project project = ProjectManager.getInstance().getDefaultProject();
                util.editConfigurable(project, pluginConfigurable, () -> pluginConfigurable.select(pluginDescriptor));
            }
        });
        owner = label;
    }
    //myPoweredByContainer.setVisible(true);
    myPoweredByPanel.removeAll();
    myPoweredByPanel.add(owner, BorderLayout.CENTER);
}
Also used : NonNls(org.jetbrains.annotations.NonNls) HyperlinkEvent(javax.swing.event.HyperlinkEvent) ShowSettingsUtil(com.intellij.openapi.options.ShowSettingsUtil) IdeaPluginDescriptor(com.intellij.ide.plugins.IdeaPluginDescriptor) PluginId(com.intellij.openapi.extensions.PluginId) PluginManagerConfigurable(com.intellij.ide.plugins.PluginManagerConfigurable) Project(com.intellij.openapi.project.Project) HyperlinkListener(javax.swing.event.HyperlinkListener) HyperlinkLabel(com.intellij.ui.HyperlinkLabel)

Example 44 with HyperlinkListener

use of javax.swing.event.HyperlinkListener in project intellij-community by JetBrains.

the class ExportTestResultsAction method actionPerformed.

@Override
public void actionPerformed(AnActionEvent e) {
    final Project project = e.getProject();
    LOG.assertTrue(project != null);
    final ExportTestResultsConfiguration config = ExportTestResultsConfiguration.getInstance(project);
    final String name = ExecutionBundle.message("export.test.results.filename", PathUtil.suggestFileName(myRunConfiguration.getName()));
    String filename = name + "." + config.getExportFormat().getDefaultExtension();
    boolean showDialog = true;
    while (showDialog) {
        final ExportTestResultsDialog d = new ExportTestResultsDialog(project, config, filename);
        if (!d.showAndGet()) {
            return;
        }
        filename = d.getFileName();
        showDialog = getOutputFile(config, project, filename).exists() && Messages.showOkCancelDialog(project, ExecutionBundle.message("export.test.results.file.exists.message", filename), ExecutionBundle.message("export.test.results.file.exists.title"), Messages.getQuestionIcon()) != Messages.OK;
    }
    final String filename_ = filename;
    ProgressManager.getInstance().run(new Task.Backgroundable(project, ExecutionBundle.message("export.test.results.task.name"), false, new PerformInBackgroundOption() {

        @Override
        public boolean shouldStartInBackground() {
            return true;
        }

        @Override
        public void processSentToBackground() {
        }
    }) {

        @Override
        public void run(@NotNull ProgressIndicator indicator) {
            indicator.setIndeterminate(true);
            final File outputFile = getOutputFile(config, project, filename_);
            final String outputText;
            try {
                outputText = getOutputText(config);
                if (outputText == null) {
                    return;
                }
            } catch (IOException | SAXException | TransformerException ex) {
                LOG.warn(ex);
                showBalloon(project, MessageType.ERROR, ExecutionBundle.message("export.test.results.failed", ex.getMessage()), null);
                return;
            } catch (RuntimeException ex) {
                ExportTestResultsConfiguration c = new ExportTestResultsConfiguration();
                c.setExportFormat(ExportTestResultsConfiguration.ExportFormat.Xml);
                c.setOpenResults(false);
                try {
                    String xml = getOutputText(c);
                    LOG.error(LogMessageEx.createEvent("Failed to export test results", ExceptionUtil.getThrowableText(ex), null, null, new Attachment("dump.xml", xml)));
                } catch (Throwable ignored) {
                    LOG.error("Failed to export test results", ex);
                }
                return;
            }
            final Ref<VirtualFile> result = new Ref<>();
            final Ref<String> error = new Ref<>();
            ApplicationManager.getApplication().invokeAndWait(new Runnable() {

                @Override
                public void run() {
                    result.set(ApplicationManager.getApplication().runWriteAction(new Computable<VirtualFile>() {

                        @Override
                        public VirtualFile compute() {
                            outputFile.getParentFile().mkdirs();
                            final VirtualFile parent = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(outputFile.getParentFile());
                            if (parent == null || !parent.isValid()) {
                                error.set(ExecutionBundle.message("failed.to.create.output.file", outputFile.getPath()));
                                return null;
                            }
                            try {
                                VirtualFile result = parent.findChild(outputFile.getName());
                                if (result == null) {
                                    result = parent.createChildData(this, outputFile.getName());
                                }
                                VfsUtil.saveText(result, outputText);
                                return result;
                            } catch (IOException e) {
                                LOG.warn(e);
                                error.set(e.getMessage());
                                return null;
                            }
                        }
                    }));
                }
            });
            if (!result.isNull()) {
                if (config.isOpenResults()) {
                    openEditorOrBrowser(result.get(), project, config.getExportFormat() == ExportTestResultsConfiguration.ExportFormat.Xml);
                } else {
                    HyperlinkListener listener = new HyperlinkListener() {

                        @Override
                        public void hyperlinkUpdate(HyperlinkEvent e) {
                            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                                openEditorOrBrowser(result.get(), project, config.getExportFormat() == ExportTestResultsConfiguration.ExportFormat.Xml);
                            }
                        }
                    };
                    showBalloon(project, MessageType.INFO, ExecutionBundle.message("export.test.results.succeeded", outputFile.getName()), listener);
                }
            } else {
                showBalloon(project, MessageType.ERROR, ExecutionBundle.message("export.test.results.failed", error.get()), null);
            }
        }
    });
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) HyperlinkEvent(javax.swing.event.HyperlinkEvent) Attachment(com.intellij.openapi.diagnostic.Attachment) IOException(java.io.IOException) Project(com.intellij.openapi.project.Project) Ref(com.intellij.openapi.util.Ref) HyperlinkListener(javax.swing.event.HyperlinkListener) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File) Computable(com.intellij.openapi.util.Computable)

Example 45 with HyperlinkListener

use of javax.swing.event.HyperlinkListener in project intellij-community by JetBrains.

the class RenameProcessor method performRefactoring.

@Override
public void performRefactoring(@NotNull UsageInfo[] usages) {
    List<Runnable> postRenameCallbacks = new ArrayList<>();
    final MultiMap<PsiElement, UsageInfo> classified = classifyUsages(myAllRenames.keySet(), usages);
    for (final PsiElement element : myAllRenames.keySet()) {
        String newName = myAllRenames.get(element);
        final RefactoringElementListener elementListener = getTransaction().getElementListener(element);
        final RenamePsiElementProcessor renamePsiElementProcessor = RenamePsiElementProcessor.forElement(element);
        Runnable postRenameCallback = renamePsiElementProcessor.getPostRenameCallback(element, newName, elementListener);
        final Collection<UsageInfo> infos = classified.get(element);
        try {
            RenameUtil.doRename(element, newName, infos.toArray(new UsageInfo[infos.size()]), myProject, elementListener);
        } catch (final IncorrectOperationException e) {
            RenameUtil.showErrorMessage(e, element, myProject);
            return;
        }
        if (postRenameCallback != null) {
            postRenameCallbacks.add(postRenameCallback);
        }
    }
    for (Runnable runnable : postRenameCallbacks) {
        runnable.run();
    }
    List<NonCodeUsageInfo> nonCodeUsages = new ArrayList<>();
    for (UsageInfo usage : usages) {
        if (usage instanceof NonCodeUsageInfo) {
            nonCodeUsages.add((NonCodeUsageInfo) usage);
        }
    }
    myNonCodeUsages = nonCodeUsages.toArray(new NonCodeUsageInfo[nonCodeUsages.size()]);
    if (!mySkippedUsages.isEmpty()) {
        if (!ApplicationManager.getApplication().isUnitTestMode() && !ApplicationManager.getApplication().isHeadlessEnvironment()) {
            ApplicationManager.getApplication().invokeLater(() -> {
                final IdeFrame ideFrame = WindowManager.getInstance().getIdeFrame(myProject);
                if (ideFrame != null) {
                    StatusBarEx statusBar = (StatusBarEx) ideFrame.getStatusBar();
                    HyperlinkListener listener = new HyperlinkListener() {

                        @Override
                        public void hyperlinkUpdate(HyperlinkEvent e) {
                            if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED)
                                return;
                            Messages.showMessageDialog("<html>Following usages were safely skipped:<br>" + StringUtil.join(mySkippedUsages, unresolvableCollisionUsageInfo -> unresolvableCollisionUsageInfo.getDescription(), "<br>") + "</html>", "Not All Usages Were Renamed", null);
                        }
                    };
                    statusBar.notifyProgressByBalloon(MessageType.WARNING, "<html><body>Unable to rename certain usages. <a href=\"\">Browse</a></body></html>", null, listener);
                }
            }, ModalityState.NON_MODAL);
        }
    }
}
Also used : DescriptiveNameUtil(com.intellij.lang.findUsages.DescriptiveNameUtil) IdeFrame(com.intellij.openapi.wm.IdeFrame) java.util(java.util) MessageType(com.intellij.openapi.ui.MessageType) HyperlinkEvent(javax.swing.event.HyperlinkEvent) ModalityState(com.intellij.openapi.application.ModalityState) RefactoringElementListener(com.intellij.refactoring.listeners.RefactoringElementListener) NonNls(org.jetbrains.annotations.NonNls) Computable(com.intellij.openapi.util.Computable) UsageInfo(com.intellij.usageView.UsageInfo) RefactoringBundle(com.intellij.refactoring.RefactoringBundle) BaseRefactoringProcessor(com.intellij.refactoring.BaseRefactoringProcessor) RefactoringEventListener(com.intellij.refactoring.listeners.RefactoringEventListener) AutomaticRenamer(com.intellij.refactoring.rename.naming.AutomaticRenamer) ContainerUtil(com.intellij.util.containers.ContainerUtil) CopyFilesOrDirectoriesHandler(com.intellij.refactoring.copy.CopyFilesOrDirectoriesHandler) Project(com.intellij.openapi.project.Project) Messages(com.intellij.openapi.ui.Messages) RefactoringEventData(com.intellij.refactoring.listeners.RefactoringEventData) Logger(com.intellij.openapi.diagnostic.Logger) MultiMap(com.intellij.util.containers.MultiMap) Extensions(com.intellij.openapi.extensions.Extensions) ProgressManager(com.intellij.openapi.progress.ProgressManager) HyperlinkListener(javax.swing.event.HyperlinkListener) IncorrectOperationException(com.intellij.util.IncorrectOperationException) StatusBarEx(com.intellij.openapi.wm.ex.StatusBarEx) StringUtil(com.intellij.openapi.util.text.StringUtil) WindowManager(com.intellij.openapi.wm.WindowManager) MoveRenameUsageInfo(com.intellij.refactoring.util.MoveRenameUsageInfo) LightElement(com.intellij.psi.impl.light.LightElement) AutomaticRenamerFactory(com.intellij.refactoring.rename.naming.AutomaticRenamerFactory) UsageViewUtil(com.intellij.usageView.UsageViewUtil) UsageViewDescriptor(com.intellij.usageView.UsageViewDescriptor) CommonRefactoringUtil(com.intellij.refactoring.util.CommonRefactoringUtil) Nullable(org.jetbrains.annotations.Nullable) NonCodeUsageInfo(com.intellij.refactoring.util.NonCodeUsageInfo) ConflictsDialog(com.intellij.refactoring.ui.ConflictsDialog) ApplicationManager(com.intellij.openapi.application.ApplicationManager) RelatedUsageInfo(com.intellij.refactoring.util.RelatedUsageInfo) com.intellij.psi(com.intellij.psi) NotNull(org.jetbrains.annotations.NotNull) Ref(com.intellij.openapi.util.Ref) HyperlinkEvent(javax.swing.event.HyperlinkEvent) RefactoringElementListener(com.intellij.refactoring.listeners.RefactoringElementListener) NonCodeUsageInfo(com.intellij.refactoring.util.NonCodeUsageInfo) IdeFrame(com.intellij.openapi.wm.IdeFrame) HyperlinkListener(javax.swing.event.HyperlinkListener) IncorrectOperationException(com.intellij.util.IncorrectOperationException) StatusBarEx(com.intellij.openapi.wm.ex.StatusBarEx) UsageInfo(com.intellij.usageView.UsageInfo) MoveRenameUsageInfo(com.intellij.refactoring.util.MoveRenameUsageInfo) NonCodeUsageInfo(com.intellij.refactoring.util.NonCodeUsageInfo) RelatedUsageInfo(com.intellij.refactoring.util.RelatedUsageInfo)

Aggregations

HyperlinkListener (javax.swing.event.HyperlinkListener)59 HyperlinkEvent (javax.swing.event.HyperlinkEvent)57 JEditorPane (javax.swing.JEditorPane)15 URL (java.net.URL)11 JScrollPane (javax.swing.JScrollPane)9 JPanel (javax.swing.JPanel)8 JTextPane (javax.swing.JTextPane)7 VirtualFile (com.intellij.openapi.vfs.VirtualFile)6 Dimension (java.awt.Dimension)6 IOException (java.io.IOException)6 NotNull (org.jetbrains.annotations.NotNull)6 HyperlinkLabel (com.intellij.ui.HyperlinkLabel)5 URI (java.net.URI)5 HTMLDocument (javax.swing.text.html.HTMLDocument)5 HTMLEditorKit (javax.swing.text.html.HTMLEditorKit)5 Project (com.intellij.openapi.project.Project)4 BorderLayout (java.awt.BorderLayout)4 ActionEvent (java.awt.event.ActionEvent)4 AnAction (com.intellij.openapi.actionSystem.AnAction)3 MouseEvent (java.awt.event.MouseEvent)3