From 427a1cb8f33df472768bdf6110d7cd8492b7c859 Mon Sep 17 00:00:00 2001 From: Bartek Pacia Date: Tue, 13 Jan 2026 13:46:40 +0100 Subject: [PATCH] LSP-390 EquationsExternalizer: make a singleton to prevent externalizer hashcode mismatch errors in LSP LSP creates "a new copy of the world" for each request, and this caused EquationsExternalizer to be recreated too. GitOrigin-RevId: 3f56d2a933d3d96533f5afd4c206fcecde04a716 --- .../codeInspection/bytecodeAnalysis/BytecodeAnalysisGist.java | 2 +- .../codeInspection/bytecodeAnalysis/BytecodeAnalysisIndex.java | 2 ++ .../codeInspection/bytecodeAnalysis/ClassDataIndexer.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisGist.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisGist.java index 26e19928f714..cb1dbc33d3b9 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisGist.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisGist.java @@ -24,7 +24,7 @@ public final class BytecodeAnalysisGist { gist = GistManager.getInstance().newVirtualFileGist( "BytecodeAnalysisIndex", ClassDataIndexer.FINAL_VERSION, - new BytecodeAnalysisIndex.EquationsExternalizer(), + BytecodeAnalysisIndex.EquationsExternalizer.INSTANCE, new ClassDataIndexer() ); } diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisIndex.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisIndex.java index cafc09b63bd5..c7eed657483f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisIndex.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/BytecodeAnalysisIndex.java @@ -138,6 +138,8 @@ public final class BytecodeAnalysisIndex extends ScalarIndexExtension { * Externalizer for compressed equations. */ public static class EquationsExternalizer implements DataExternalizer> { + public static final EquationsExternalizer INSTANCE = new EquationsExternalizer(); + @Override public void save(@NotNull DataOutput out, Map value) throws IOException { DataInputOutputUtilRt.writeSeq(out, value.entrySet(), entry -> { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ClassDataIndexer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ClassDataIndexer.java index 1975ed724d09..41c6d4a76ac0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ClassDataIndexer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/bytecodeAnalysis/ClassDataIndexer.java @@ -284,7 +284,7 @@ public final class ClassDataIndexer implements VirtualFileGist.GistCalculator map) { try { UnsyncByteArrayOutputStream stream = new UnsyncByteArrayOutputStream(); - new BytecodeAnalysisIndex.EquationsExternalizer().save(new DataOutputStream(stream), map); + BytecodeAnalysisIndex.EquationsExternalizer.INSTANCE.save(new DataOutputStream(stream), map); ourTotalSize.addAndGet(stream.size()); ourTotalCount.incrementAndGet(); }