From 70db7bb059caf13d711f33c2b2640d3249b1aab5 Mon Sep 17 00:00:00 2001 From: Jaime Wren Date: Tue, 29 Jul 2025 12:32:34 -0700 Subject: [PATCH] Remove the "Scope analysis to the current package" feature from the Dart problem view --- third_party/CHANGELOG.md | 1 + .../dart/analyzer/DartServerRootsHandler.java | 45 ++++--------------- .../DartAnalysisServerSettingsForm.form | 24 ++-------- .../DartAnalysisServerSettingsForm.java | 17 ------- .../DartProblemsPresentationHelper.java | 10 +---- .../ide/errorTreeView/DartProblemsView.java | 20 +-------- .../errorTreeView/DartProblemsViewPanel.java | 9 ---- .../DartProblemsViewSettings.java | 6 --- .../lang/dart/util/DartBuildFileUtil.java | 5 +-- .../lang/dart/util/PubspecYamlUtil.java | 5 +-- .../resources/messages/DartBundle.properties | 1 - 11 files changed, 19 insertions(+), 124 deletions(-) diff --git a/third_party/CHANGELOG.md b/third_party/CHANGELOG.md index 050e8f0c7..435fc8d64 100644 --- a/third_party/CHANGELOG.md +++ b/third_party/CHANGELOG.md @@ -5,6 +5,7 @@ - Vendor change from "JetBrains" to "Google" - Build system change from Basel to Gradle - Removal of the old Code Coverage support, all references to com.intellij.coverage.* + - Remove the "Scope analysis to the current package" feature from the Dart problem view - New Dart language feature: Dot Shorthands (https://youtrack.jetbrains.com/issue/IDEA-370100) - Support new 'Null-Aware Elements’ syntax (https://youtrack.jetbrains.com/issue/IDEA-374053) - Fix: IDE freezes after inserting a piece of Dart code (https://youtrack.jetbrains.com/issue/IDEA-231468) diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/analyzer/DartServerRootsHandler.java b/third_party/src/main/java/com/jetbrains/lang/dart/analyzer/DartServerRootsHandler.java index 58564f0f7..48a52bc96 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/analyzer/DartServerRootsHandler.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/analyzer/DartServerRootsHandler.java @@ -82,20 +82,6 @@ void scheduleDartRootsUpdate(@Nullable Runnable onSuccess) { final List newIncludedRootPaths = new SmartList<>(); final List newExcludedRootPaths = new SmartList<>(); - final boolean isPackageScopedAnalysis = - DartProblemsView.getScopeAnalysisMode(myProject) == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage; - - if (isPackageScopedAnalysis) { - final VirtualFile currentFile = DartProblemsView.getInstance(myProject).getCurrentFile(); - if (currentFile == null || - ProjectFileIndex.getInstance(myProject).isInLibraryClasses(currentFile) || - !currentFile.isInLocalFileSystem()) { - return null; // keep server roots as is until another file is open - } - - newIncludedRootPaths.add(getEnclosingDartPackageDirectoryPath(currentFile)); - } - final String dotIdeaPath = PathUtil.getParentPath(StringUtil.notNullize(myProject.getProjectFilePath())); if (dotIdeaPath.endsWith("/.idea")) { newExcludedRootPaths.add(dotIdeaPath); @@ -105,9 +91,7 @@ void scheduleDartRootsUpdate(@Nullable Runnable onSuccess) { for (ContentEntry contentEntry : ModuleRootManager.getInstance(module).getContentEntries()) { final String contentEntryUrl = contentEntry.getUrl(); if (contentEntryUrl.startsWith(URLUtil.FILE_PROTOCOL + URLUtil.SCHEME_SEPARATOR)) { - if (!isPackageScopedAnalysis) { - newIncludedRootPaths.add(VfsUtilCore.urlToPath(contentEntryUrl)); - } + newIncludedRootPaths.add(VfsUtilCore.urlToPath(contentEntryUrl)); for (String excludedUrl : contentEntry.getExcludeFolderUrls()) { // Analysis Server knows about special 'packages' folders, IDE doesn't need to explicitly list them as excluded. if (excludedUrl.startsWith(contentEntryUrl) && !excludedUrl.endsWith("/packages")) { @@ -138,26 +122,15 @@ private void sendSetAnalysisRootsRequest(@NotNull List newIncludedRoots, boolean isInIncludedRoots(@Nullable VirtualFile vFile) { if (vFile == null) return false; - final DartProblemsViewSettings.ScopedAnalysisMode scopedAnalysisMode = DartProblemsView.getScopeAnalysisMode(myProject); - if (scopedAnalysisMode == DartProblemsViewSettings.ScopedAnalysisMode.All) { - final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); - if (fileIndex.isInLibraryClasses(vFile)) return true; + final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(myProject).getFileIndex(); + if (fileIndex.isInLibraryClasses(vFile)) return true; - final Module module = fileIndex.getModuleForFile(vFile); - if (module != null && DartSdkLibUtil.isDartSdkEnabled(module)) { - return true; - } - else if (vFile.getName().equals("AndroidManifest.xml")) { - // These types of files can be part of an android module, not dart sdk enabled, - // but should still be considered in the root for Dart Analysis errors and warnings. - for (String root : myIncludedRootPaths) { - if (vFile.getPath().startsWith(root + "/")) { - return true; - } - } - } - } - else if (scopedAnalysisMode == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage) { + final Module module = fileIndex.getModuleForFile(vFile); + if (module != null && DartSdkLibUtil.isDartSdkEnabled(module)) { + return true; + } else if (vFile.getName().equals("AndroidManifest.xml")) { + // These types of files can be part of an android module, not dart sdk enabled, + // but should still be considered in the root for Dart Analysis errors and warnings. for (String root : myIncludedRootPaths) { if (vFile.getPath().startsWith(root + "/")) { return true; diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.form b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.form index 53a4f436f..c407ccc1a 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.form +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.form @@ -1,6 +1,6 @@
- + @@ -10,7 +10,7 @@ - + @@ -18,29 +18,13 @@ - + - - - - - - - - - - - - - - - - @@ -50,7 +34,7 @@ - + diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.java b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.java index c08ad1452..430a28435 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartAnalysisServerSettingsForm.java @@ -4,7 +4,6 @@ import com.intellij.openapi.project.Project; import com.intellij.ui.HoverHyperlinkLabel; import com.intellij.ui.HyperlinkAdapter; -import com.intellij.ui.components.JBCheckBox; import com.jetbrains.lang.dart.DartBundle; import com.jetbrains.lang.dart.sdk.DartConfigurable; import org.jetbrains.annotations.NotNull; @@ -23,7 +22,6 @@ interface ServerSettingsListener { private JPanel myMainPanel; private HoverHyperlinkLabel myDartSettingsHyperlink; private HoverHyperlinkLabel myAnalysisDiagnosticsHyperlink; - private JBCheckBox packageScopedAnalysisCheckbox; DartAnalysisServerSettingsForm(final @NotNull Project project) { myProject = project; @@ -46,22 +44,7 @@ protected void hyperlinkActivated(final @NotNull HyperlinkEvent e) { }); } - public void reset(final @NotNull DartProblemsPresentationHelper presentationHelper) { - packageScopedAnalysisCheckbox.setSelected(presentationHelper.getScopedAnalysisMode() == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage); - } - - public void addListener(final @NotNull ServerSettingsListener serverSettingsListener) { - packageScopedAnalysisCheckbox.addActionListener(e -> serverSettingsListener.settingsChanged()); - } - public JPanel getMainPanel() { return myMainPanel; } - - public @NotNull DartProblemsViewSettings.ScopedAnalysisMode getScopeAnalysisMode() { - if (packageScopedAnalysisCheckbox.isSelected()) { - return DartProblemsViewSettings.ScopedAnalysisMode.DartPackage; - } - return DartProblemsViewSettings.ScopedAnalysisMode.All; - } } diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsPresentationHelper.java b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsPresentationHelper.java index 6fb71209c..8a1fdbc43 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsPresentationHelper.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsPresentationHelper.java @@ -66,15 +66,11 @@ void updateFromFilterSettingsUI(@NotNull DartProblemsFilterForm form) { mySettings.fileFilterMode = form.getFileFilterMode(); } - void updateFromServerSettingsUI(@NotNull DartAnalysisServerSettingsForm form) { - mySettings.scopedAnalysisMode = form.getScopeAnalysisMode(); - } - boolean areFiltersApplied() { if (mySettings.showErrors != DartProblemsViewSettings.SHOW_ERRORS_DEFAULT) return true; if (mySettings.showWarnings != DartProblemsViewSettings.SHOW_WARNINGS_DEFAULT) return true; if (mySettings.showHints != DartProblemsViewSettings.SHOW_HINTS_DEFAULT) return true; - return mySettings.fileFilterMode != DartProblemsViewSettings.FILE_FILTER_MODE_DEFAULT; + return mySettings.fileFilterMode != DartProblemsViewSettings.FILE_FILTER_MODE_DEFAULT; } boolean setCurrentFile(@Nullable VirtualFile file) { @@ -121,10 +117,6 @@ DartProblemsViewSettings.FileFilterMode getFileFilterMode() { return mySettings.fileFilterMode; } - DartProblemsViewSettings.ScopedAnalysisMode getScopedAnalysisMode() { - return mySettings.scopedAnalysisMode; - } - @Nullable VirtualFile getCurrentFile() { return myCurrentFile; } diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsView.java b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsView.java index f529ee9e7..8a42ead8c 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsView.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsView.java @@ -90,8 +90,6 @@ public void run() { } ReadAction.nonBlocking(() -> { - DartProblemsViewSettings.ScopedAnalysisMode scopedAnalysisMode = - getInstance(myProject).myPresentationHelper.getScopedAnalysisMode(); Map> filePathToDartProblems = new HashMap<>(); for (Map.Entry> entry : filePathToErrors.entrySet()) { @@ -99,8 +97,7 @@ public void run() { List analysisErrors = entry.getValue(); VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(filePath); - boolean fileOk = vFile != null && (scopedAnalysisMode != DartProblemsViewSettings.ScopedAnalysisMode.All || - ProjectFileIndex.getInstance(myProject).isInContent(vFile)); + boolean fileOk = vFile != null && ProjectFileIndex.getInstance(myProject).isInContent(vFile); List dartProblems = fileOk ? ContainerUtil.map(analysisErrors, analysisError -> new DartProblem(myProject, analysisError)) : Collections.emptyList(); @@ -110,9 +107,7 @@ public void run() { return filePathToDartProblems; }) .expireWith(getInstance(myProject)) - .finishOnUiThread(ModalityState.nonModal(), filePathToDartProblems -> { - panel.setErrors(filePathToDartProblems); - }) + .finishOnUiThread(ModalityState.nonModal(), panel::setErrors) .submit(AppExecutorUtil.getAppExecutorService()); } }; @@ -183,13 +178,6 @@ private void updateIcon() { return project.getService(DartProblemsView.class); } - public static DartProblemsViewSettings.ScopedAnalysisMode getScopeAnalysisMode(final @NotNull Project project) { - if (!DartAnalysisServerService.getInstance(project).isServerProcessActive()) { - return DartProblemsViewSettings.SCOPED_ANALYSIS_MODE_DEFAULT; - } - return getInstance(project).myPresentationHelper.getScopedAnalysisMode(); - } - public VirtualFile getCurrentFile() { return myPresentationHelper.getCurrentFile(); } @@ -310,10 +298,6 @@ public void setCurrentFile(final @Nullable VirtualFile file) { myPresentationHelper.getFileFilterMode() != DartProblemsViewSettings.FileFilterMode.All) { panel.fireGroupingOrFilterChanged(); } - - if (myPresentationHelper.getScopedAnalysisMode() == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage) { - DartAnalysisServerService.getInstance(myProject).ensureAnalysisRootsUpToDate(); - } } public void updateErrorsForFile(final @NotNull String filePath, @NotNull List errors) { diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewPanel.java b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewPanel.java index c25e136da..3649acadf 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewPanel.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewPanel.java @@ -322,13 +322,6 @@ public void filtersResetRequested() { private void showAnalysisServerSettingsPopup() { DartAnalysisServerSettingsForm serverSettingsForm = new DartAnalysisServerSettingsForm(myProject); - serverSettingsForm.reset(myPresentationHelper); - - serverSettingsForm.addListener(() -> { - myPresentationHelper.updateFromServerSettingsUI(serverSettingsForm); - DartAnalysisServerService.getInstance(myProject).ensureAnalysisRootsUpToDate(); - }); - createAndShowPopup(DartBundle.message("dart.problems.view.popup.title.analysis.server.settings"), serverSettingsForm.getMainPanel()); } @@ -453,8 +446,6 @@ private class AnalysisServerSettingsAction extends DumbAwareAction implements To @Override public void update(@NotNull AnActionEvent e) { - boolean asByDefault = myPresentationHelper.getScopedAnalysisMode() == DartProblemsViewSettings.SCOPED_ANALYSIS_MODE_DEFAULT; - Toggleable.setSelected(e.getPresentation(), !asByDefault); } @Override diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewSettings.java b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewSettings.java index 1cb16e12b..e13e58125 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewSettings.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/ide/errorTreeView/DartProblemsViewSettings.java @@ -7,15 +7,12 @@ public class DartProblemsViewSettings { public enum FileFilterMode {All, ContentRoot, DartPackage, Directory, File} - public enum ScopedAnalysisMode {All, DartPackage} - static final boolean AUTO_SCROLL_TO_SOURCE_DEFAULT = false; static final boolean GROUP_BY_SEVERITY_DEFAULT = true; static final boolean SHOW_ERRORS_DEFAULT = true; static final boolean SHOW_WARNINGS_DEFAULT = true; static final boolean SHOW_HINTS_DEFAULT = true; static final FileFilterMode FILE_FILTER_MODE_DEFAULT = FileFilterMode.All; - static final ScopedAnalysisMode SCOPED_ANALYSIS_MODE_DEFAULT = ScopedAnalysisMode.All; @Attribute(value = "auto-scroll-to-source") public boolean autoScrollToSource = AUTO_SCROLL_TO_SOURCE_DEFAULT; @@ -32,7 +29,4 @@ public enum ScopedAnalysisMode {All, DartPackage} public boolean showWarnings = SHOW_WARNINGS_DEFAULT; @Attribute(value = "show-hints") public boolean showHints = SHOW_HINTS_DEFAULT; - - @Attribute(value = "scoped-analysis-mode") - public ScopedAnalysisMode scopedAnalysisMode = SCOPED_ANALYSIS_MODE_DEFAULT; } diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/util/DartBuildFileUtil.java b/third_party/src/main/java/com/jetbrains/lang/dart/util/DartBuildFileUtil.java index 534f5f126..53be15a65 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/util/DartBuildFileUtil.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/util/DartBuildFileUtil.java @@ -25,10 +25,7 @@ public final class DartBuildFileUtil { final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex(); VirtualFile parent = contextFile.isDirectory() ? contextFile : contextFile.getParent(); - boolean isPackageScopedAnalysis = - DartProblemsView.getScopeAnalysisMode(project) == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage; - - while (parent != null && (isPackageScopedAnalysis || fileIndex.isInContent(parent))) { + while (parent != null && (fileIndex.isInContent(parent))) { final VirtualFile file = parent.findChild(BUILD_FILE_NAME); if (file != null && !file.isDirectory()) { final VirtualFile parent2 = parent.getParent(); diff --git a/third_party/src/main/java/com/jetbrains/lang/dart/util/PubspecYamlUtil.java b/third_party/src/main/java/com/jetbrains/lang/dart/util/PubspecYamlUtil.java index f81bdd21d..2b680966e 100644 --- a/third_party/src/main/java/com/jetbrains/lang/dart/util/PubspecYamlUtil.java +++ b/third_party/src/main/java/com/jetbrains/lang/dart/util/PubspecYamlUtil.java @@ -51,10 +51,7 @@ public static boolean isPubspecFile(final @NotNull VirtualFile file) { VirtualFile current = contextFile; VirtualFile parent = contextFile.isDirectory() ? contextFile : contextFile.getParent(); - boolean isPackageScopedAnalysis = - DartProblemsView.getScopeAnalysisMode(project) == DartProblemsViewSettings.ScopedAnalysisMode.DartPackage; - - while (parent != null && (LIB_DIR_NAME.equals(current.getName()) || isPackageScopedAnalysis || fileIndex.isInContent(parent))) { + while (parent != null && (LIB_DIR_NAME.equals(current.getName()) || fileIndex.isInContent(parent))) { current = parent; final VirtualFile file = parent.findChild(PUBSPEC_YAML); if (file != null && !file.isDirectory()) { diff --git a/third_party/src/main/resources/messages/DartBundle.properties b/third_party/src/main/resources/messages/DartBundle.properties index bf2c593b0..f7284cbd1 100644 --- a/third_party/src/main/resources/messages/DartBundle.properties +++ b/third_party/src/main/resources/messages/DartBundle.properties @@ -254,7 +254,6 @@ group.by.severity=Group by Severity group.by.severity.description=Group by severity: errors in the top of the table, then come warnings, and hints in the end open.dart.plugin.settings=Open Dart plugin settings analysis.server.settings.diagnostics=View analyzer diagnostics -analysis.server.settings.package.analysis=Scope analysis to the current package action.DartProblemsViewPanel.open.documentation.text=Open Documentation action.DartProblemsViewPanel.open.documentation.description=Open detailed problem description in browser # this text becomes a hyperlink that is added to the red code tooltip right after the error message. Example: "Dead code. (Documentation)"