diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/PostHighlightingPass.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/PostHighlightingPass.java index 042abef112cd..5ce90c6956bb 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/PostHighlightingPass.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/PostHighlightingPass.java @@ -49,6 +49,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; @@ -172,29 +173,32 @@ public class PostHighlightingPass extends TextEditorHighlightingPass { private void optimizeImportsOnTheFly(@NotNull final Editor editor) { if (myHasRedundantImports || myHasMissortedImports) { - invokeOnTheFlyImportOptimizer(new Runnable() { - public void run() { - if (myProject.isDisposed() || editor.isDisposed()) { - return; - } - OptimizeImportsFix optimizeImportsFix = new OptimizeImportsFix(); - if (optimizeImportsFix.isAvailable(myProject, editor, myFile) && myFile.isWritable()) { - PsiDocumentManager.getInstance(myProject).commitAllDocuments(); + final OptimizeImportsFix optimizeImportsFix = new OptimizeImportsFix(); + if (optimizeImportsFix.isAvailable(myProject, editor, myFile) && myFile.isWritable()) { + invokeOnTheFlyImportOptimizer(new Runnable() { + public void run() { optimizeImportsFix.invoke(myProject, editor, myFile); } - } - }); + }, myFile, editor); + } } } - public static void invokeOnTheFlyImportOptimizer(final Runnable runnable) { + public static void invokeOnTheFlyImportOptimizer(@NotNull final Runnable runnable, @NotNull final PsiFile file, @NotNull final Editor editor) { ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { + if (file.getProject().isDisposed() || editor.isDisposed()) return; + PsiDocumentManager.getInstance(file.getProject()).commitAllDocuments(); + String beforeText = file.getText(); CommandProcessor.getInstance().runUndoTransparentAction(new Runnable() { public void run() { ApplicationManager.getApplication().runWriteAction(runnable); } }); + String afterText = file.getText(); + if (Comparing.strEqual(beforeText, afterText)) { + LOG.error("Import optimizer for the '"+file.getVirtualFile().getPath()+"' hasn't optimized any imports. Text:\n"+afterText); + } } }); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java index 019dcb7bf06b..01fc6ec4b8ea 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyUnusedImportPass.java @@ -34,7 +34,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiFile; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; @@ -54,6 +53,7 @@ import java.util.Set; */ public class GroovyUnusedImportPass extends TextEditorHighlightingPass { private final GroovyFile myFile; + private final Editor myEditor; public static final Logger LOG = Logger.getInstance("org.jetbrains.plugins.groovy.codeInspection.local.GroovyUnusedImportsPass"); private volatile Set myUnusedImports = Collections.emptySet(); private volatile Runnable myOptimizeRunnable; @@ -61,6 +61,7 @@ public class GroovyUnusedImportPass extends TextEditorHighlightingPass { public GroovyUnusedImportPass(GroovyFile file, Editor editor) { super(file.getProject(), editor.getDocument(), true); myFile = file; + myEditor = editor; } public void doCollectInformation(ProgressIndicator progress) { @@ -124,10 +125,9 @@ public class GroovyUnusedImportPass extends TextEditorHighlightingPass { PostHighlightingPass.invokeOnTheFlyImportOptimizer(new Runnable() { @Override public void run() { - PsiDocumentManager.getInstance(myProject).commitAllDocuments(); optimize.run(); } - }); + },myFile,myEditor); } }