From 6e8b5f6cdcb96e3b5d11f08f08711cac49b82b6b Mon Sep 17 00:00:00 2001 From: Yaroslav Lepenkin Date: Thu, 19 Feb 2015 17:56:51 +0300 Subject: [PATCH] Refactored way of providing notification info from ImportOptimizers: just return CollectingInfoRunnable instead of plain one. --- .../lang/java/JavaImportOptimizer.java | 28 +++++++-------- .../com/intellij/lang/ImportOptimizer.java | 8 +++++ .../lang/InfoCollectingImportOptimizer.java | 25 ------------- .../actions/OptimizeImportsProcessor.java | 35 ++++++++++++------- 4 files changed, 45 insertions(+), 51 deletions(-) delete mode 100644 platform/lang-api/src/com/intellij/lang/InfoCollectingImportOptimizer.java 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 388819312e34..eddd536d19fb 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaImportOptimizer.java @@ -16,7 +16,7 @@ package com.intellij.lang.java; -import com.intellij.lang.InfoCollectingImportOptimizer; +import com.intellij.lang.ImportOptimizer; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.project.Project; @@ -33,14 +33,12 @@ import org.jetbrains.annotations.Nullable; /** * @author max */ -public class JavaImportOptimizer implements InfoCollectingImportOptimizer { +public class JavaImportOptimizer implements ImportOptimizer { private static final Logger LOG = Logger.getInstance("#com.intellij.lang.java.JavaImportOptimizer"); - private int myImportListLengthDiff; @Override @NotNull public Runnable processFile(final PsiFile file) { - myImportListLengthDiff = 0; if (!(file instanceof PsiJavaFile)) { return EmptyRunnable.getInstance(); } @@ -48,7 +46,9 @@ public class JavaImportOptimizer implements InfoCollectingImportOptimizer { final PsiImportList newImportList = JavaCodeStyleManager.getInstance(project).prepareOptimizeImportsResult((PsiJavaFile)file); if (newImportList == null) return EmptyRunnable.getInstance(); - return new Runnable() { + return new CollectingInfoRunnable() { + private int myImportListLengthDiff = 0; + @Override public void run() { try { @@ -67,16 +67,16 @@ public class JavaImportOptimizer implements InfoCollectingImportOptimizer { LOG.error(e); } } - }; - } - @Nullable - @Override - public String getUserNotificationInfo() { - if (myImportListLengthDiff > 0) { - return "removed " + myImportListLengthDiff + " import" + (myImportListLengthDiff > 1 ? "s" : ""); - } - return null; + @Nullable + @Override + public String getUserNotificationInfo() { + if (myImportListLengthDiff > 0) { + return "removed " + myImportListLengthDiff + " import" + (myImportListLengthDiff > 1 ? "s" : ""); + } + return null; + } + }; } @Override diff --git a/platform/lang-api/src/com/intellij/lang/ImportOptimizer.java b/platform/lang-api/src/com/intellij/lang/ImportOptimizer.java index 2e2f12af1d0f..4aca7d3abec8 100644 --- a/platform/lang-api/src/com/intellij/lang/ImportOptimizer.java +++ b/platform/lang-api/src/com/intellij/lang/ImportOptimizer.java @@ -18,6 +18,7 @@ package com.intellij.lang; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Implementers of the interface encapsulate optimize imports process for the language. @@ -50,4 +51,11 @@ public interface ImportOptimizer { @NotNull Runnable processFile(PsiFile file); + /** + * In order to customize notification popup after reformat code action just return it from {@link #processFile} with proper information, + * by default "imports optimized" is shown. + */ + interface CollectingInfoRunnable extends Runnable { + @Nullable String getUserNotificationInfo(); + } } diff --git a/platform/lang-api/src/com/intellij/lang/InfoCollectingImportOptimizer.java b/platform/lang-api/src/com/intellij/lang/InfoCollectingImportOptimizer.java deleted file mode 100644 index b97c5b217ae5..000000000000 --- a/platform/lang-api/src/com/intellij/lang/InfoCollectingImportOptimizer.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.lang; - -import org.jetbrains.annotations.Nullable; - -public interface InfoCollectingImportOptimizer extends ImportOptimizer { - - @Nullable - String getUserNotificationInfo(); - -} diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsProcessor.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsProcessor.java index fd187c4335dd..51a92fde83d9 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsProcessor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/OptimizeImportsProcessor.java @@ -18,7 +18,6 @@ package com.intellij.codeInsight.actions; import com.intellij.codeInsight.CodeInsightBundle; import com.intellij.lang.ImportOptimizer; -import com.intellij.lang.InfoCollectingImportOptimizer; import com.intellij.lang.LanguageImportStatements; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; @@ -26,6 +25,7 @@ import com.intellij.openapi.util.EmptyRunnable; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -36,6 +36,7 @@ import java.util.concurrent.FutureTask; public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor { private static final String PROGRESS_TEXT = CodeInsightBundle.message("progress.text.optimizing.imports"); public static final String COMMAND_NAME = CodeInsightBundle.message("process.optimize.imports"); + private List myOptimizersMessages = ContainerUtil.newSmartList(); public OptimizeImportsProcessor(Project project) { super(project, COMMAND_NAME, PROGRESS_TEXT, false); @@ -83,8 +84,6 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor { } } - final ImportOptimizer optimizer = getInfoCollector() != null && optimizers.size() == 1 ? optimizers.iterator().next() : null; - Runnable runnable = !runnables.isEmpty() ? new Runnable() { @Override public void run() { @@ -92,11 +91,9 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor { try { for (Runnable runnable : runnables) { runnable.run(); + retrieveAndStoreNotificationInfo(runnable); } - if (optimizer != null) { - String message = retrieveMessage(optimizer); - getInfoCollector().setOptimizeImportsNotification(message); - } + putNotificationInfoIntoCollector(); } finally { CodeStyleManagerImpl.setSequentialProcessingAllowed(true); @@ -106,11 +103,25 @@ public class OptimizeImportsProcessor extends AbstractLayoutCodeProcessor { return new FutureTask(runnable, true); } - private static String retrieveMessage(@NotNull ImportOptimizer optimizer) { - String info = "imports optimized"; - if (optimizer instanceof InfoCollectingImportOptimizer) { - info = ((InfoCollectingImportOptimizer)optimizer).getUserNotificationInfo(); + private void retrieveAndStoreNotificationInfo(@NotNull Runnable runnable) { + if (runnable instanceof ImportOptimizer.CollectingInfoRunnable) { + String info = ((ImportOptimizer.CollectingInfoRunnable)runnable).getUserNotificationInfo(); + if (info != null) { + myOptimizersMessages.add(info); + } } - return info; + } + + private void putNotificationInfoIntoCollector() { + LayoutCodeInfoCollector collector = getInfoCollector(); + if (collector == null) { + return; + } + + String info = "imports optimized"; + if (myOptimizersMessages.size() == 1) { + info = myOptimizersMessages.get(0); + } + collector.setOptimizeImportsNotification(info); } }