From 7f5d2f76e2d3166809945d24befe1fc1a01f3d86 Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 19 Jan 2024 13:16:22 -0800 Subject: [PATCH] Show different tooltip for build widget when there are no targets PiperOrigin-RevId: 599919395 --- ...erySyncInspectionWidgetActionProvider.java | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/base/src/com/google/idea/blaze/base/qsync/QuerySyncInspectionWidgetActionProvider.java b/base/src/com/google/idea/blaze/base/qsync/QuerySyncInspectionWidgetActionProvider.java index d3a9d1eee63..d6e945e2177 100644 --- a/base/src/com/google/idea/blaze/base/qsync/QuerySyncInspectionWidgetActionProvider.java +++ b/base/src/com/google/idea/blaze/base/qsync/QuerySyncInspectionWidgetActionProvider.java @@ -155,29 +155,14 @@ public JComponent createCustomComponent( @Override protected void updateToolTipText() { Project project = editor.getProject(); - if (project != null) { - HelpTooltip.dispose(this); - new HelpTooltip() - .setTitle("Build dependencies") - .setShortcut( - ActionManager.getInstance().getKeyboardShortcut("Blaze.BuildDependencies")) - .setDescription( - "Builds the external dependencies needed for this file and " - + " enables analysis") - .setLink( - "Settings...", - new Runnable() { - @Override - public void run() { - ShowSettingsUtil.getInstance() - .showSettingsDialog( - project, QuerySyncConfigurableProvider.getConfigurableClass()); - } - }) - .installOn(this); + if (project == null) { + return; } + HelpTooltip.dispose(this); + createPrimaryTooltip(project).installOn(this); } }; + button.setHorizontalTextPosition(SwingConstants.LEFT); button.setFont( new FontUIResource( @@ -192,6 +177,40 @@ public void run() { return button; } + private HelpTooltip createPrimaryTooltip(Project project) { + if (fileInEditorHasNoTargetsToBuild(project)) { + return new HelpTooltip() + .setTitle("Build dependencies") + .setDescription( + "This file is not owned by a project target with external dependencies."); + } else { + return new HelpTooltip() + .setTitle("Build dependencies") + .setShortcut(ActionManager.getInstance().getKeyboardShortcut("Blaze.BuildDependencies")) + .setDescription( + "Builds the external dependencies needed for this file and " + " enables analysis") + .setLink( + "Settings...", + () -> + ShowSettingsUtil.getInstance() + .showSettingsDialog( + project, QuerySyncConfigurableProvider.getConfigurableClass())); + } + } + + private boolean fileInEditorHasNoTargetsToBuild(Project project) { + PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); + VirtualFile vf = psiFile != null ? psiFile.getVirtualFile() : null; + QuerySyncManager querySyncManager = QuerySyncManager.getInstance(project); + if (vf != null + && querySyncManager.isProjectLoaded() + && !querySyncManager.operationInProgress()) { + TargetsToBuild toBuild = buildDepsHelper.getTargetsToEnableAnalysisFor(vf); + return toBuild.isEmpty(); + } + return false; + } + private void createGotItTooltip(ActionButtonWithText button) { Project project = editor.getProject(); if (project != null) {