Skip to content

Commit d3490db

Browse files
authored
[perf] stop blocking on SdkRunConfig.addConsoleFilters (#8095)
The hunt for slow ops continues... Addresses: ``` java.lang.Throwable: Slow operations are prohibited on EDT. See SlowOperations.assertSlowOperationsAreAllowed javadoc. at com.intellij.openapi.diagnostic.Logger.error(Logger.java:376) at com.intellij.util.SlowOperations.assertSlowOperationsAreAllowed(SlowOperations.java:114) at com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexDataImpl.ensureIsUpToDate(WorkspaceFileIndexDataImpl.kt:153) at com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexDataImpl.getFileInfo(WorkspaceFileIndexDataImpl.kt:98) at com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexImpl.getFileInfo(WorkspaceFileIndexImpl.kt:267) at com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexImpl.findFileSet(WorkspaceFileIndexImpl.kt:220) at com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexImpl.isInContent(WorkspaceFileIndexImpl.kt:86) at com.intellij.openapi.roots.impl.ProjectFileIndexImpl.isInContent(ProjectFileIndexImpl.java:211) at com.jetbrains.lang.dart.util.PubspecYamlUtil.findPubspecYamlFile(PubspecYamlUtil.java:58) at com.jetbrains.lang.dart.util.DartUrlResolverImpl.<init>(DartUrlResolverImpl.java:47) at com.jetbrains.lang.dart.util.DartUrlResolver.getInstance(DartUrlResolver.java:36) at com.jetbrains.lang.dart.ide.runner.DartConsoleFilter.<init>(DartConsoleFilter.java:44) at io.flutter.run.SdkRunConfig.addConsoleFilters(SdkRunConfig.java:228) at io.flutter.run.SdkRunConfig.getState(SdkRunConfig.java:194) at io.flutter.run.SdkRunConfig.getState(SdkRunConfig.java:56) ``` See: #8089 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read the [Flutter Style Guide] _recently_, and have followed its advice. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/master/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
1 parent abbe6f5 commit d3490db

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

flutter-idea/src/io/flutter/run/SdkRunConfig.java

+24-12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.intellij.execution.filters.UrlFilter;
1616
import com.intellij.execution.runners.ExecutionEnvironment;
1717
import com.intellij.execution.runners.RunConfigurationWithSuppressedDefaultRunAction;
18+
import com.intellij.openapi.application.ModalityState;
19+
import com.intellij.openapi.application.ReadAction;
1820
import com.intellij.openapi.diagnostic.Logger;
1921
import com.intellij.openapi.module.Module;
2022
import com.intellij.openapi.module.ModuleUtilCore;
@@ -32,11 +34,13 @@
3234
import com.intellij.refactoring.listeners.RefactoringElementListener;
3335
import com.intellij.refactoring.listeners.UndoRefactoringElementAdapter;
3436
import com.intellij.util.PathUtil;
37+
import com.intellij.util.concurrency.AppExecutorUtil;
3538
import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters;
3639
import com.intellij.util.xmlb.XmlSerializer;
3740
import com.jetbrains.lang.dart.ide.runner.DartConsoleFilter;
3841
import io.flutter.FlutterUtils;
3942
import io.flutter.console.FlutterConsoleFilter;
43+
import io.flutter.dart.FlutterDartAnalysisServer;
4044
import io.flutter.run.common.RunMode;
4145
import io.flutter.run.daemon.FlutterApp;
4246
import io.flutter.sdk.FlutterSdkManager;
@@ -222,18 +226,26 @@ protected void addConsoleFilters(@NotNull LaunchState launcher,
222226
@NotNull ExecutionEnvironment env,
223227
@NotNull MainFile mainFile,
224228
@Nullable Module module) {
225-
// Set up additional console filters.
226-
final TextConsoleBuilder builder = launcher.getConsoleBuilder();
227-
// file:, package:, and dart: references
228-
builder.addFilter(new DartConsoleFilter(env.getProject(), mainFile.getFile()));
229-
//// links often found when running tests
230-
//builder.addFilter(new DartRelativePathsConsoleFilter(env.getProject(), mainFile.getAppDir().getPath()));
231-
if (module != null) {
232-
// various flutter run links
233-
builder.addFilter(new FlutterConsoleFilter(module));
234-
}
235-
// general urls
236-
builder.addFilter(new UrlFilter());
229+
// Creating console filters is expensive so we want to make sure we are not blocking.
230+
// See: https://github.com/flutter/flutter-intellij/issues/8089
231+
ReadAction.nonBlocking(() -> {
232+
// Set up additional console filters.
233+
final TextConsoleBuilder builder = launcher.getConsoleBuilder();
234+
if (builder == null) return null;
235+
// file:, package:, and dart: references
236+
builder.addFilter(new DartConsoleFilter(env.getProject(), mainFile.getFile()));
237+
//// links often found when running tests
238+
//builder.addFilter(new DartRelativePathsConsoleFilter(env.getProject(), mainFile.getAppDir().getPath()));
239+
if (module != null) {
240+
// various flutter run links
241+
builder.addFilter(new FlutterConsoleFilter(module));
242+
}
243+
// general urls
244+
builder.addFilter(new UrlFilter());
245+
return null;
246+
})
247+
.expireWith(FlutterDartAnalysisServer.getInstance(getProject()))
248+
.submit(AppExecutorUtil.getAppExecutorService());
237249
}
238250

239251
@NotNull

0 commit comments

Comments
 (0)