From 7f754102be77482c5fc389e0bcf9f65e384a3fe6 Mon Sep 17 00:00:00 2001 From: Christopher Ng Date: Mon, 28 Aug 2023 09:08:37 -0700 Subject: [PATCH] Fix `java.lang.RuntimeException: Document is locked by write PSI operations` errors Also update to `google-java-format` 1.17.0 Fixes #960 FUTURE_COPYBARA_INTEGRATE_REVIEW=https://github.com/google/google-java-format/pull/960 from facboy:master 89f790262e90808ed2d45cf27d643eb0ffebd62f PiperOrigin-RevId: 560727815 --- idea_plugin/build.gradle.kts | 18 +++++++++--------- .../GoogleJavaFormatImportOptimizer.java | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/idea_plugin/build.gradle.kts b/idea_plugin/build.gradle.kts index 474c24d79..0aec5a7b6 100644 --- a/idea_plugin/build.gradle.kts +++ b/idea_plugin/build.gradle.kts @@ -14,7 +14,7 @@ * limitations under the License. */ -plugins { id("org.jetbrains.intellij") version "1.13.3" } +plugins { id("org.jetbrains.intellij") version "1.15.0" } apply(plugin = "org.jetbrains.intellij") @@ -22,7 +22,7 @@ apply(plugin = "java") repositories { mavenCentral() } -val googleJavaFormatVersion = "1.16.0" +val googleJavaFormatVersion = "1.17.0" java { sourceCompatibility = JavaVersion.VERSION_11 @@ -37,7 +37,7 @@ intellij { tasks { patchPluginXml { - version.set("${googleJavaFormatVersion}.2") + version.set("${googleJavaFormatVersion}.0") sinceBuild.set("213") untilBuild.set("") } @@ -49,12 +49,12 @@ tasks { withType().configureEach { jvmArgs( - "--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", - "--add-exports jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", - "--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", - "--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED", - "--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", - "--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", + "--add-exports", "jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", ) } } diff --git a/idea_plugin/src/main/java/com/google/googlejavaformat/intellij/GoogleJavaFormatImportOptimizer.java b/idea_plugin/src/main/java/com/google/googlejavaformat/intellij/GoogleJavaFormatImportOptimizer.java index 498c88526..6fda8befd 100644 --- a/idea_plugin/src/main/java/com/google/googlejavaformat/intellij/GoogleJavaFormatImportOptimizer.java +++ b/idea_plugin/src/main/java/com/google/googlejavaformat/intellij/GoogleJavaFormatImportOptimizer.java @@ -55,16 +55,24 @@ public boolean supports(@NotNull PsiFile file) { JavaFormatterOptions.Style style = GoogleJavaFormatSettings.getInstance(project).getStyle(); + final String origText = document.getText(); String text; try { - text = - ImportOrderer.reorderImports( - RemoveUnusedImports.removeUnusedImports(document.getText()), style); + text = ImportOrderer.reorderImports(RemoveUnusedImports.removeUnusedImports(origText), style); } catch (FormatterException e) { Notifications.displayParsingErrorNotification(project, file.getName()); return Runnables.doNothing(); } - return () -> document.setText(text); + return () -> { + if (documentManager.isDocumentBlockedByPsi(document)) { + documentManager.doPostponedOperationsAndUnblockDocument(document); + String newText = document.getText(); + if (!newText.equals(origText)) { + return; + } + } + document.setText(text); + }; } }