From 3be31fb1cb1a0e01c7ffb516d46f692b39bef39b Mon Sep 17 00:00:00 2001 From: tyron12233 Date: Mon, 7 Feb 2022 01:02:09 +0800 Subject: [PATCH] fix: only add the current path if the container is not currently writing --- .../java/compiler/CompilerContainer.java | 4 ++++ .../java/util/JavaDataContextUtil.java | 23 +++++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/java-completion/src/main/java/com/tyron/completion/java/compiler/CompilerContainer.java b/java-completion/src/main/java/com/tyron/completion/java/compiler/CompilerContainer.java index ac626ec3d..5b9a7a286 100644 --- a/java-completion/src/main/java/com/tyron/completion/java/compiler/CompilerContainer.java +++ b/java-completion/src/main/java/com/tyron/completion/java/compiler/CompilerContainer.java @@ -70,6 +70,10 @@ public T get(Function1 fun) { } } + public boolean isWriting() { + return mIsWriting; + } + void initialize(Runnable runnable) { synchronized (mLock) { assertIsNotReader(); diff --git a/java-completion/src/main/java/com/tyron/completion/java/util/JavaDataContextUtil.java b/java-completion/src/main/java/com/tyron/completion/java/util/JavaDataContextUtil.java index 3b610dcfd..f69393983 100644 --- a/java-completion/src/main/java/com/tyron/completion/java/util/JavaDataContextUtil.java +++ b/java-completion/src/main/java/com/tyron/completion/java/util/JavaDataContextUtil.java @@ -13,6 +13,7 @@ import com.tyron.completion.java.JavaCompilerProvider; import com.tyron.completion.java.action.CommonJavaContextKeys; import com.tyron.completion.java.action.FindCurrentPath; +import com.tyron.completion.java.compiler.CompilerContainer; import com.tyron.completion.java.compiler.JavaCompilerService; import org.openjdk.source.tree.CompilationUnitTree; @@ -30,16 +31,20 @@ public static void addEditorKeys(DataContext context, Project project, File file JavaCompilerProvider service = CompilerService.getInstance().getIndex(JavaCompilerProvider.KEY); JavaCompilerService compiler = service.getCompiler(project, (JavaModule) currentModule); - compiler.getCachedContainer().run(task -> { - if (task != null) { - CompilationUnitTree root = task.root(file); - if (root != null) { - FindCurrentPath findCurrentPath = new FindCurrentPath(task.task); - TreePath currentPath = findCurrentPath.scan(root, cursor); - context.putData(CommonJavaContextKeys.CURRENT_PATH, currentPath); + CompilerContainer cachedContainer = compiler.getCachedContainer(); + // don't block the ui thread + if (!cachedContainer.isWriting()) { + cachedContainer.run(task -> { + if (task != null) { + CompilationUnitTree root = task.root(file); + if (root != null) { + FindCurrentPath findCurrentPath = new FindCurrentPath(task.task); + TreePath currentPath = findCurrentPath.scan(root, cursor); + context.putData(CommonJavaContextKeys.CURRENT_PATH, currentPath); + } } - } - }); + }); + } context.putData(CommonJavaContextKeys.COMPILER, compiler); } }