From 5be155b243fc2aeff2488bf82c7bac32d6edfddd Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 22 Dec 2022 13:42:49 +0100 Subject: [PATCH] Java: get rid of resolve in event thread in import optimizer (IDEA-305546) and produce more accurate message about imports added/removed GitOrigin-RevId: acc8f196d10a5b82af025ade711a274cf6ef796e --- .../lang/java/JavaImportOptimizer.java | 38 +++++-------------- 1 file changed, 10 insertions(+), 28 deletions(-) diff --git a/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java b/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java index b7ab92793b34..eedd9a43cf17 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java @@ -1,9 +1,6 @@ -// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. - +// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.lang.java; -import com.google.common.collect.HashMultiset; -import com.google.common.collect.Multiset; import com.intellij.ide.scratch.ScratchUtil; import com.intellij.java.JavaBundle; import com.intellij.lang.ImportOptimizer; @@ -18,15 +15,17 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.templateLanguages.TemplateLanguageUtil; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.IncorrectOperationException; -import com.intellij.util.SlowOperations; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + public class JavaImportOptimizer implements ImportOptimizer { private static final Logger LOG = Logger.getInstance(JavaImportOptimizer.class); @Override @NotNull - public Runnable processFile(@NotNull final PsiFile file) { + public Runnable processFile(@NotNull PsiFile file) { if (!(file instanceof PsiJavaFile)) { return EmptyRunnable.getInstance(); } @@ -40,10 +39,6 @@ public class JavaImportOptimizer implements ImportOptimizer { @Override public void run() { - SlowOperations.allowSlowOperations(this::doRun); - } - - private void doRun() { try { final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject()); final Document document = manager.getDocument(file); @@ -52,30 +47,17 @@ public class JavaImportOptimizer implements ImportOptimizer { } final PsiImportList oldImportList = ((PsiJavaFile)file).getImportList(); assert oldImportList != null; - final Multiset oldImports = HashMultiset.create(); - for (PsiImportStatement statement : oldImportList.getImportStatements()) { - oldImports.add(statement.resolve()); + final List oldImports = new ArrayList<>(); + for (PsiImportStatementBase statement : oldImportList.getAllImportStatements()) { + oldImports.add(statement.getText()); } - - final Multiset oldStaticImports = HashMultiset.create(); - for (PsiImportStaticStatement statement : oldImportList.getImportStaticStatements()) { - oldStaticImports.add(statement.resolve()); - } - oldImportList.replace(newImportList); - for (PsiImportStatement statement : newImportList.getImportStatements()) { - if (!oldImports.remove(statement.resolve())) { + for (PsiImportStatementBase statement : newImportList.getAllImportStatements()) { + if (!oldImports.remove(statement.getText())) { myImportsAdded++; } } myImportsRemoved += oldImports.size(); - - for (PsiImportStaticStatement statement : newImportList.getImportStaticStatements()) { - if (!oldStaticImports.remove(statement.resolve())) { - myImportsAdded++; - } - } - myImportsRemoved += oldStaticImports.size(); } catch (IncorrectOperationException e) { LOG.error(e);