|
15 | 15 | import com.intellij.execution.filters.UrlFilter; |
16 | 16 | import com.intellij.execution.runners.ExecutionEnvironment; |
17 | 17 | import com.intellij.execution.runners.RunConfigurationWithSuppressedDefaultRunAction; |
| 18 | +import com.intellij.openapi.application.ModalityState; |
| 19 | +import com.intellij.openapi.application.ReadAction; |
18 | 20 | import com.intellij.openapi.diagnostic.Logger; |
19 | 21 | import com.intellij.openapi.module.Module; |
20 | 22 | import com.intellij.openapi.module.ModuleUtilCore; |
|
32 | 34 | import com.intellij.refactoring.listeners.RefactoringElementListener; |
33 | 35 | import com.intellij.refactoring.listeners.UndoRefactoringElementAdapter; |
34 | 36 | import com.intellij.util.PathUtil; |
| 37 | +import com.intellij.util.concurrency.AppExecutorUtil; |
35 | 38 | import com.intellij.util.xmlb.SkipDefaultValuesSerializationFilters; |
36 | 39 | import com.intellij.util.xmlb.XmlSerializer; |
37 | 40 | import com.jetbrains.lang.dart.ide.runner.DartConsoleFilter; |
38 | 41 | import io.flutter.FlutterUtils; |
39 | 42 | import io.flutter.console.FlutterConsoleFilter; |
| 43 | +import io.flutter.dart.FlutterDartAnalysisServer; |
40 | 44 | import io.flutter.run.common.RunMode; |
41 | 45 | import io.flutter.run.daemon.FlutterApp; |
42 | 46 | import io.flutter.sdk.FlutterSdkManager; |
@@ -222,18 +226,26 @@ protected void addConsoleFilters(@NotNull LaunchState launcher, |
222 | 226 | @NotNull ExecutionEnvironment env, |
223 | 227 | @NotNull MainFile mainFile, |
224 | 228 | @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()); |
237 | 249 | } |
238 | 250 |
|
239 | 251 | @NotNull |
|
0 commit comments