diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index f9d22e8931f6..3e62d59e1d64 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -21,79 +21,47 @@ */ package com.intellij.compiler.impl; -import com.intellij.CommonBundle; -import com.intellij.analysis.AnalysisScope; +import com.intellij.*; +import com.intellij.analysis.*; import com.intellij.compiler.*; -import com.intellij.compiler.make.CacheCorruptedException; -import com.intellij.compiler.make.CacheUtils; -import com.intellij.compiler.make.DependencyCache; -import com.intellij.compiler.progress.CompilerTask; -import com.intellij.diagnostic.IdeErrorsDialog; -import com.intellij.diagnostic.PluginException; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; +import com.intellij.compiler.make.*; +import com.intellij.compiler.progress.*; +import com.intellij.diagnostic.*; +import com.intellij.openapi.application.*; import com.intellij.openapi.compiler.*; import com.intellij.openapi.compiler.Compiler; -import com.intellij.openapi.compiler.ex.CompileContextEx; -import com.intellij.openapi.compiler.ex.CompilerPathsEx; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.extensions.PluginId; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.fileTypes.StdFileTypes; -import com.intellij.openapi.module.LanguageLevelUtil; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.compiler.ex.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.ex.ProjectRootManagerEx; -import com.intellij.openapi.roots.ui.configuration.CommonContentEntriesEditor; -import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.roots.ex.*; +import com.intellij.openapi.roots.ui.configuration.*; +import com.intellij.openapi.ui.*; import com.intellij.openapi.util.*; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.ToolWindowId; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.packageDependencies.DependenciesBuilder; -import com.intellij.packageDependencies.ForwardDependenciesBuilder; -import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.PsiCompiledElement; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.util.Chunk; -import com.intellij.util.LocalTimeCounter; -import com.intellij.util.StringBuilderSpinAllocator; -import com.intellij.util.ThrowableRunnable; +import com.intellij.openapi.util.io.*; +import com.intellij.openapi.util.registry.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.packageDependencies.*; +import com.intellij.pom.java.*; +import com.intellij.psi.*; +import com.intellij.util.*; import com.intellij.util.concurrency.Semaphore; -import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.*; import com.intellij.util.containers.HashMap; -import com.intellij.util.containers.MultiMap; -import com.intellij.util.containers.OrderedSet; -import gnu.trove.TObjectHashingStrategy; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; +import gnu.trove.*; +import org.jetbrains.annotations.*; import java.io.*; import java.util.*; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import java.util.HashSet; +import java.util.concurrent.*; public class CompileDriver { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.CompileDriver"); @@ -512,7 +480,7 @@ public class CompileDriver { final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); if (statusBar != null) { // because this code is in invoke later, the code may work for already closed project // in case another project was opened in the frame while the compiler was working (See SCR# 28591) - statusBar.setInfo(statusMessage); + StatusBar.Info.set(statusMessage, myProject); if (duration > ONE_MINUTE_MS) { final MessageType messageType = errorCount > 0 ? MessageType.ERROR : warningCount > 0 ? MessageType.WARNING : MessageType.INFO; ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.MESSAGES_WINDOW, messageType, statusMessage); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java index de572869e7c5..5d399e4410f9 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java @@ -15,40 +15,31 @@ */ package com.intellij.compiler.impl; -import com.intellij.codeInsight.daemon.impl.actions.SuppressFix; -import com.intellij.codeInsight.daemon.impl.actions.SuppressForClassFix; -import com.intellij.compiler.CompilerConfiguration; -import com.intellij.compiler.CompilerConfigurationImpl; -import com.intellij.compiler.CompilerWorkspaceConfiguration; -import com.intellij.compiler.HelpID; -import com.intellij.compiler.options.CompilerConfigurable; +import com.intellij.codeInsight.daemon.impl.actions.*; +import com.intellij.compiler.*; +import com.intellij.compiler.options.*; import com.intellij.ide.errorTreeView.*; -import com.intellij.ide.util.treeView.NodeDescriptor; +import com.intellij.ide.util.treeView.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.compiler.CompilerBundle; -import com.intellij.openapi.compiler.options.ExcludeEntryDescription; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.OpenFileDescriptor; -import com.intellij.openapi.module.LanguageLevelUtil; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.options.ShowSettingsUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.JavaSdk; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vcs.FileStatusManager; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.pom.Navigatable; -import com.intellij.pom.java.LanguageLevel; +import com.intellij.openapi.application.*; +import com.intellij.openapi.command.*; +import com.intellij.openapi.compiler.*; +import com.intellij.openapi.compiler.options.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.options.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.projectRoots.*; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vfs.*; +import com.intellij.pom.*; +import com.intellij.pom.java.*; import com.intellij.psi.*; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; @@ -222,7 +213,7 @@ public class CompilerErrorTreeView extends NewErrorTreeViewPanel { return new SuppressFix(id) { @Override @SuppressWarnings({"SimplifiableIfStatement"}) - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) { if (getContainer(context) instanceof PsiClass) return false; return super.isAvailable(project, editor, context); } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactPackagingProcessingItem.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactPackagingProcessingItem.java index 790472ae4505..9db67e89b0e3 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactPackagingProcessingItem.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactPackagingProcessingItem.java @@ -16,19 +16,16 @@ package com.intellij.packaging.impl.compiler; -import com.intellij.compiler.impl.packagingCompiler.DestinationInfo; -import com.intellij.compiler.impl.FileProcessingCompilerStateCache; -import com.intellij.openapi.compiler.FileProcessingCompiler; -import com.intellij.openapi.compiler.ValidityState; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.SmartList; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.compiler.impl.*; +import com.intellij.compiler.impl.packagingCompiler.*; +import com.intellij.openapi.compiler.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vfs.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.ArrayList; -import java.util.List; -import java.io.IOException; +import java.io.*; +import java.util.*; /** * @author nik @@ -80,7 +77,7 @@ public class ArtifactPackagingProcessingItem implements FileProcessingCompiler.P public List getEnabledDestinations() { if (myEnabledDestinations == null) { - myEnabledDestinations = new ArrayList(); + myEnabledDestinations = new SmartList(); for (Pair destination : myDestinations) { if (destination.getSecond()) { myEnabledDestinations.add(destination.getFirst()); @@ -94,4 +91,4 @@ public class ArtifactPackagingProcessingItem implements FileProcessingCompiler.P public ValidityState getValidityState() { return new ArtifactPackagingItemValidityState(getEnabledDestinations(), mySourceFileModified, myOldState); } -} \ No newline at end of file +} diff --git a/java/execution/openapi/src/com/intellij/execution/configurations/JavaRunConfigurationModule.java b/java/execution/openapi/src/com/intellij/execution/configurations/JavaRunConfigurationModule.java index 0e83b49c8af1..439d18fc1721 100644 --- a/java/execution/openapi/src/com/intellij/execution/configurations/JavaRunConfigurationModule.java +++ b/java/execution/openapi/src/com/intellij/execution/configurations/JavaRunConfigurationModule.java @@ -15,23 +15,15 @@ */ package com.intellij.execution.configurations; -import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.Project; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.search.GlobalSearchScope; -import gnu.trove.THashSet; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.execution.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import com.intellij.psi.search.*; +import gnu.trove.*; +import org.jetbrains.annotations.*; -import java.util.Arrays; -import java.util.Collection; -import java.util.Set; +import java.util.*; /** * @author spleaner @@ -77,7 +69,11 @@ public class JavaRunConfigurationModule extends RunConfigurationModule { return Arrays.asList(ModuleManager.getInstance(project).getModules()); } else { - return ModuleUtil.collectModulesDependsOn(modules); + final Set result = new HashSet(); + for (Module module : modules) { + ModuleUtil.collectModulesDependsOn(module, result); + } + return result; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressFix.java index 1826a6ba4e5a..4b8410232448 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/SuppressFix.java @@ -15,28 +15,23 @@ */ package com.intellij.codeInsight.daemon.impl.actions; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.HighlightDisplayKey; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.*; import com.intellij.codeInspection.*; -import com.intellij.lang.java.JavaLanguage; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.impl.storage.ClasspathStorage; -import com.intellij.openapi.ui.Messages; +import com.intellij.lang.java.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.roots.impl.storage.*; +import com.intellij.openapi.ui.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.impl.source.jsp.jspJava.JspHolderMethod; -import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.javadoc.PsiDocTag; -import com.intellij.psi.javadoc.PsiDocTagValue; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.impl.source.jsp.jspJava.*; +import com.intellij.psi.javadoc.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author ven @@ -81,7 +76,7 @@ public class SuppressFix extends SuppressIntentionAction { return InspectionsBundle.message("suppress.inspection.family"); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) { PsiDocCommentOwner container = getContainer(context); boolean isValid = container != null && !(container instanceof JspHolderMethod); if (!isValid) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveRedundantElseAction.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveRedundantElseAction.java index 4f9d56c3e3a2..404cfdd98054 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveRedundantElseAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveRedundantElseAction.java @@ -15,18 +15,17 @@ */ package com.intellij.codeInsight.daemon.impl.quickfix; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.daemon.QuickFixBundle; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author ven @@ -44,7 +43,7 @@ public class RemoveRedundantElseAction extends PsiElementBaseIntentionAction { return QuickFixBundle.message("remove.redundant.else.fix"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { if (element instanceof PsiKeyword && element.getParent() instanceof PsiIfStatement && PsiKeyword.ELSE.equals(element.getText())) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SurroundWithArrayFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SurroundWithArrayFix.java index fc87c9b150e3..f2c693530d3d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SurroundWithArrayFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/SurroundWithArrayFix.java @@ -20,23 +20,17 @@ */ package com.intellij.codeInsight.daemon.impl.quickfix; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.TargetElementUtil; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.util.ArrayUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.Collection; +import java.util.*; public class SurroundWithArrayFix extends PsiElementBaseIntentionAction { private final PsiCall myMethodCall; @@ -55,7 +49,7 @@ public class SurroundWithArrayFix extends PsiElementBaseIntentionAction { return getText(); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { return getExpression(element) != null; } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationFix.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationFix.java index 3234e1bc583b..5e56e77d8dc6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddDeprecationAnnotationFix.java @@ -22,12 +22,11 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.intention.AddAnnotationFix; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; public class AddDeprecationAnnotationFix extends AddAnnotationFix { public AddDeprecationAnnotationFix() { @@ -36,7 +35,7 @@ public class AddDeprecationAnnotationFix extends AddAnnotationFix { @Override - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { if (!super.isAvailable(project, editor, element)) { return false; } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddNullableNotNullAnnotationFix.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddNullableNotNullAnnotationFix.java index 0e0c056a31ca..e4d251f00d54 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddNullableNotNullAnnotationFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddNullableNotNullAnnotationFix.java @@ -22,13 +22,12 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.codeInsight.intention.AddAnnotationFix; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; public class AddNullableNotNullAnnotationFix extends AddAnnotationFix { public AddNullableNotNullAnnotationFix(final String annotation, final String annotationToRemove) { @@ -40,7 +39,7 @@ public class AddNullableNotNullAnnotationFix extends AddAnnotationFix { } @Override - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { if (!super.isAvailable(project, editor, element)) { return false; } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java index 3c55df1d3802..670798b00dc0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java @@ -15,23 +15,18 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.highlighting.HighlightManager; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.colors.EditorColors; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.highlighting.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.colors.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.util.IncorrectOperationException; -import gnu.trove.TIntArrayList; -import gnu.trove.TIntProcedure; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import gnu.trove.*; +import org.jetbrains.annotations.*; /** * @author ven @@ -44,8 +39,8 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction return CodeInsightBundle.message("intention.add.on.demand.static.import.family"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null || !PsiUtil.isLanguageLevel5OrHigher(element)) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false; if (!(element instanceof PsiIdentifier) || !(element.getParent() instanceof PsiReferenceExpression)) { return false; } diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddSingleMemberStaticImportAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddSingleMemberStaticImportAction.java index c2ac71cde06c..2d36ed2489ce 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddSingleMemberStaticImportAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddSingleMemberStaticImportAction.java @@ -19,20 +19,17 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Key; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.tree.java.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAction { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.AddSingleMemberStaticImportAction"); @@ -43,8 +40,8 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc return CodeInsightBundle.message("intention.add.single.member.static.import.family"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null || !PsiUtil.isLanguageLevel5OrHigher(element)) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false; PsiFile file = element.getContainingFile(); if (element instanceof PsiIdentifier && element.getParent() instanceof PsiReferenceExpression && ((PsiReferenceExpression)element.getParent()).getQualifierExpression() != null) { diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ColorChooserIntentionAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ColorChooserIntentionAction.java index 375643fa2b22..4d31a536726e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ColorChooserIntentionAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ColorChooserIntentionAction.java @@ -22,25 +22,23 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.patterns.PlatformPatterns; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.patterns.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.ui.ColorChooser; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.util.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import java.awt.*; public class ColorChooserIntentionAction extends PsiElementBaseIntentionAction { - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { if (PlatformPatterns.psiElement().inside(PlatformPatterns.psiElement(PsiNewExpression.class)).accepts(element)) { final PsiNewExpression expression = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false); if (expression != null) { diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java index 21eebf076ace..f5cde3acaf88 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertAbsolutePathToRelativeIntentionAction.java @@ -15,19 +15,14 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiReference; -import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; -import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference; -import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceOwner; -import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.resolve.reference.impl.*; +import com.intellij.psi.impl.source.resolve.reference.impl.providers.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author spleaner @@ -39,8 +34,7 @@ public class ConvertAbsolutePathToRelativeIntentionAction extends PsiElementBase } @Override - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { final PsiFile containingFile = element.getContainingFile(); if (containingFile == null) return false; diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java index a504b6a73602..ca7987aadf45 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateSubclassAction.java @@ -24,27 +24,24 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtil; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil; -import com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind; -import com.intellij.codeInsight.generation.OverrideImplementUtil; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.TextRange; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.codeInsight.daemon.impl.quickfix.*; +import com.intellij.codeInsight.generation.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.ex.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.impl.source.PostprocessReformattingAspect; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; public class CreateSubclassAction extends PsiElementBaseIntentionAction { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.ImplementAbstractClassAction"); @@ -61,8 +58,7 @@ public class CreateSubclassAction extends PsiElementBaseIntentionAction { return CodeInsightBundle.message("intention.implement.abstract.class.family"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { PsiClass psiClass = PsiTreeUtil.getParentOfType(element, PsiClass.class); if (psiClass == null || psiClass.isAnnotationType() || psiClass.isEnum() || psiClass instanceof PsiAnonymousClass || psiClass.hasModifierProperty(PsiModifier.FINAL)) { diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java index dbdb6975e1e0..de8a46a551a4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/InvertIfConditionAction.java @@ -24,29 +24,25 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightServicesUtil; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.codeStyle.*; import com.intellij.psi.controlFlow.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.List; +import java.util.*; public class InvertIfConditionAction extends PsiElementBaseIntentionAction { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.InvertIfConditionAction"); - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { int offset = editor.getCaretModel().getOffset(); final PsiIfStatement ifStatement = PsiTreeUtil.getParentOfType(element, PsiIfStatement.class); diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MakeTypeGenericAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MakeTypeGenericAction.java index 05f78aa4955d..a93aa1027012 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MakeTypeGenericAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MakeTypeGenericAction.java @@ -15,19 +15,15 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.CaretModel; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Pair; -import com.intellij.pom.java.LanguageLevel; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.util.PsiUtil; -import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author dsl @@ -46,8 +42,7 @@ public class MakeTypeGenericAction extends PsiElementBaseIntentionAction { return CodeInsightBundle.message("intention.make.type.generic.text", variableName, newTypeName); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false; if (!element.isWritable()) return false; return findVariable(element) != null; diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java index 454a77dc13ba..b14c6a53f4a6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/MoveInitializerToConstructorAction.java @@ -15,28 +15,22 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil; -import com.intellij.codeInsight.daemon.impl.quickfix.CreateFromUsageUtils; -import com.intellij.codeInsight.highlighting.HighlightManager; -import com.intellij.codeInsight.intention.IntentionAction; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.codeInsight.intention.QuickFixFactory; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.colors.EditorColors; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Ref; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.codeInsight.daemon.impl.quickfix.*; +import com.intellij.codeInsight.highlighting.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.colors.*; +import com.intellij.openapi.editor.markup.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.impl.source.jsp.jspJava.JspClass; -import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.jsp.jspJava.*; +import com.intellij.psi.javadoc.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -54,8 +48,7 @@ public class MoveInitializerToConstructorAction extends PsiElementBaseIntentionA return CodeInsightBundle.message("intention.move.initializer.to.constructor"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { if (element instanceof PsiCompiledElement) return false; final PsiField field = PsiTreeUtil.getParentOfType(element, PsiField.class, false, PsiMember.class, PsiCodeBlock.class, PsiDocComment.class); if (field == null || field.hasModifierProperty(PsiModifier.STATIC)) return false; diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitDeclarationAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitDeclarationAction.java index d34d8206f64c..def977c63ca2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitDeclarationAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitDeclarationAction.java @@ -15,18 +15,16 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.javadoc.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author max @@ -37,8 +35,7 @@ public class SplitDeclarationAction extends PsiElementBaseIntentionAction { return CodeInsightBundle.message("intention.split.declaration.family"); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { int offset = editor.getCaretModel().getOffset(); if (!(element instanceof PsiJavaToken)) return false; diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java index ad524a3f2bc8..63b6cc80aab7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java @@ -15,19 +15,16 @@ */ package com.intellij.codeInsight.intention.impl; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.ScrollType; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author mike @@ -35,8 +32,7 @@ import org.jetbrains.annotations.Nullable; public class SplitIfAction extends PsiElementBaseIntentionAction { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.SplitIfAction"); - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { if (!(element instanceof PsiJavaToken)) { return false; diff --git a/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java b/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java index 254cf8873097..455ba396a951 100644 --- a/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java +++ b/java/java-impl/src/com/intellij/psi/impl/AllowedApiFilterExtension.java @@ -20,16 +20,16 @@ */ package com.intellij.psi.impl; -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.psi.PsiElement; +import com.intellij.openapi.extensions.*; +import com.intellij.psi.*; +import org.jetbrains.annotations.*; public abstract class AllowedApiFilterExtension { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.allowedApiFilter"); - public abstract boolean isClassForbidden(String fqn, PsiElement place); + public abstract boolean isClassForbidden(@NotNull String fqn, @NotNull PsiElement place); - public static boolean isClassAllowed(String fqn, PsiElement place) { + public static boolean isClassAllowed(@NotNull String fqn, @NotNull PsiElement place) { for (AllowedApiFilterExtension extension : Extensions.getExtensions(EP_NAME)) { if (extension.isClassForbidden(fqn, place)) return false; } diff --git a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java index 646e8ec342cb..1ab4fe729c40 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceDialog.java @@ -15,18 +15,14 @@ */ package com.intellij.refactoring.extractInterface; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.JavaRefactoringSettings; -import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.classMembers.DelegatingMemberInfoModel; -import com.intellij.refactoring.classMembers.MemberInfoBase; -import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseDialog; -import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseProcessor; -import com.intellij.refactoring.ui.MemberSelectionPanel; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.classMembers.MemberInfo; +import com.intellij.refactoring.*; +import com.intellij.refactoring.classMembers.*; +import com.intellij.refactoring.extractSuperclass.*; +import com.intellij.refactoring.ui.*; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; import javax.swing.*; import java.awt.*; @@ -112,7 +108,7 @@ class ExtractInterfaceDialog extends ExtractSuperBaseDialog { _panel = new JPanel(new BorderLayout()); myPackageLabel = new JLabel(); - myPackageLabel.setText(RefactoringBundle.message("package.for.new.interface")); + myPackageLabel.setText(getPackageNameLabelText()); _panel.add(myPackageLabel, BorderLayout.NORTH); _panel.add(myPackageNameField, BorderLayout.CENTER); @@ -144,6 +140,11 @@ class ExtractInterfaceDialog extends ExtractSuperBaseDialog { return myInterfaceNameLabel; } + @Override + protected String getPackageNameLabelText() { + return isExtractSuperclass() ? RefactoringBundle.message("package.for.new.interface") : "Package name for original class"; + } + protected JLabel getPackageNameLabel() { return myPackageLabel; } diff --git a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceProcessor.java index 39adc1f9a225..774d74e79f37 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractInterface/ExtractInterfaceProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2010 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. @@ -15,12 +15,12 @@ */ package com.intellij.refactoring.extractInterface; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.refactoring.extractSuperclass.ExtractSuperBaseProcessor; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.util.IncorrectOperationException; +import com.intellij.refactoring.extractSuperclass.*; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; +import com.intellij.util.*; /** * @author dsl @@ -37,7 +37,7 @@ public class ExtractInterfaceProcessor extends ExtractSuperBaseProcessor { } protected PsiClass extractSuper(String superClassName) throws IncorrectOperationException { - return ExtractInterfaceHandler.extractInterface(myTargetDirectory, myClass, superClassName, myMemberInfos, myJavaDocPolicy); + return ExtractInterfaceHandler.extractInterface(myClass.getContainingFile().getContainingDirectory(), myClass, superClassName, myMemberInfos, myJavaDocPolicy); } protected boolean isSuperInheritor(PsiClass aClass) { diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java index 4d2ebcfa25a6..5107c82f3dc0 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseDialog.java @@ -15,29 +15,24 @@ */ package com.intellij.refactoring.extractSuperclass; -import com.intellij.ide.util.PackageUtil; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.help.HelpManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.ide.util.*; +import com.intellij.openapi.command.*; +import com.intellij.openapi.help.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.vfs.*; import com.intellij.psi.*; -import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.ui.DocCommentPanel; -import com.intellij.refactoring.ui.PackageNameReferenceEditorCombo; -import com.intellij.refactoring.ui.RefactoringDialog; -import com.intellij.refactoring.util.CommonRefactoringUtil; -import com.intellij.refactoring.util.RefactoringMessageUtil; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.ui.RecentsManager; -import com.intellij.util.IncorrectOperationException; +import com.intellij.refactoring.*; +import com.intellij.refactoring.ui.*; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; +import com.intellij.ui.*; +import com.intellij.util.*; import javax.swing.*; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.List; +import java.awt.event.*; +import java.util.*; /** * @author dsl @@ -132,11 +127,13 @@ public abstract class ExtractSuperBaseDialog extends RefactoringDialog { protected void updateDialogForExtractSubclass() { getClassNameLabel().setText(RefactoringBundle.message("extractSuper.rename.original.class.to")); + getPackageNameLabel().setText(getPackageNameLabelText()); getPreviewAction().setEnabled(true); } protected void updateDialogForExtractSuperclass() { getClassNameLabel().setText(getClassNameLabelText()); + getPackageNameLabel().setText(getPackageNameLabelText()); getPreviewAction().setEnabled(false); } @@ -158,6 +155,8 @@ public abstract class ExtractSuperBaseDialog extends RefactoringDialog { protected abstract JLabel getPackageNameLabel(); + protected abstract String getPackageNameLabelText(); + protected abstract String getEntityName(); public int getJavaDocPolicy() { diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseProcessor.java index 0ab66518f250..41bbc173a766 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperBaseProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2010 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. @@ -15,28 +15,23 @@ */ package com.intellij.refactoring.extractSuperclass; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.psi.util.InheritanceUtil; -import com.intellij.psi.util.MethodSignatureUtil; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.turnRefsToSuper.TurnRefsToSuperProcessorBase; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.usageView.UsageInfo; -import com.intellij.usageView.UsageViewDescriptor; -import com.intellij.usageView.UsageViewUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.search.*; +import com.intellij.psi.search.searches.*; +import com.intellij.psi.util.*; +import com.intellij.refactoring.*; +import com.intellij.refactoring.turnRefsToSuper.*; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; +import com.intellij.usageView.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.ArrayList; -import java.util.Collection; +import java.util.*; /** * @author dsl @@ -125,6 +120,11 @@ public abstract class ExtractSuperBaseProcessor extends TurnRefsToSuperProcessor final String oldQualifiedName = myClass.getQualifiedName(); myClass.setName(myNewClassName); PsiClass superClass = extractSuper(superClassName); + final PsiDirectory initialDirectory = myClass.getContainingFile().getContainingDirectory(); + if (myTargetDirectory != initialDirectory) { + myTargetDirectory.add(myClass.getContainingFile().copy()); + myClass.getContainingFile().delete(); + } for (final UsageInfo usage : usages) { if (usage instanceof BindToOldUsageInfo) { final PsiReference reference = usage.getReference(); diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassProcessor.java index 679183079b8f..1633ab297da4 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperClassProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2010 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. @@ -15,11 +15,11 @@ */ package com.intellij.refactoring.extractSuperclass; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.util.IncorrectOperationException; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; +import com.intellij.util.*; /** * @author dsl @@ -34,7 +34,7 @@ public class ExtractSuperClassProcessor extends ExtractSuperBaseProcessor { protected PsiClass extractSuper(final String superClassName) throws IncorrectOperationException { - return ExtractSuperClassUtil.extractSuperClass(myProject, myTargetDirectory, superClassName, myClass, myMemberInfos, myJavaDocPolicy); + return ExtractSuperClassUtil.extractSuperClass(myProject, myClass.getContainingFile().getContainingDirectory(), superClassName, myClass, myMemberInfos, myJavaDocPolicy); } protected boolean isSuperInheritor(PsiClass aClass) { diff --git a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java index 5929516883cb..d6aef307ab96 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/extractSuperclass/ExtractSuperclassDialog.java @@ -15,25 +15,18 @@ */ package com.intellij.refactoring.extractSuperclass; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMember; -import com.intellij.psi.PsiMethod; -import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.JavaRefactoringSettings; -import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.classMembers.MemberInfoChange; -import com.intellij.refactoring.classMembers.MemberInfoModel; -import com.intellij.refactoring.memberPullUp.PullUpHelper; -import com.intellij.refactoring.ui.MemberSelectionPanel; -import com.intellij.refactoring.util.DocCommentPolicy; -import com.intellij.refactoring.util.classMembers.InterfaceContainmentVerifier; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.refactoring.util.classMembers.UsesAndInterfacesDependencyMemberInfoModel; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import com.intellij.refactoring.*; +import com.intellij.refactoring.classMembers.*; +import com.intellij.refactoring.memberPullUp.*; +import com.intellij.refactoring.ui.*; +import com.intellij.refactoring.util.*; +import com.intellij.refactoring.util.classMembers.*; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; +import java.util.*; import java.util.List; class ExtractSuperclassDialog extends ExtractSuperBaseDialog { @@ -96,7 +89,7 @@ class ExtractSuperclassDialog extends ExtractSuperBaseDialog { _panel = new JPanel(new BorderLayout()); myPackageLabel = new JLabel(); - myPackageLabel.setText(RefactoringBundle.message("package.for.new.superclass")); + myPackageLabel.setText(getPackageNameLabelText()); _panel.add(myPackageLabel, BorderLayout.NORTH); _panel.add(myPackageNameField, BorderLayout.CENTER); //_panel.add(myBtnPackageChooser, BorderLayout.EAST); @@ -120,6 +113,11 @@ class ExtractSuperclassDialog extends ExtractSuperBaseDialog { return myPackageLabel; } + @Override + protected String getPackageNameLabelText() { + return isExtractSuperclass() ? RefactoringBundle.message("package.for.new.superclass") : "Package name for original class"; + } + protected String getEntityName() { return RefactoringBundle.message("ExtractSuperClass.superclass"); } diff --git a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaClassProcessor.java index f3a71534b293..92a5a3a3a1d4 100644 --- a/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/rename/RenameJavaClassProcessor.java @@ -15,32 +15,25 @@ */ package com.intellij.refactoring.rename; -import com.intellij.codeInsight.ChangeContextUtil; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Pair; +import com.intellij.codeInsight.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.searches.ClassInheritorsSearch; -import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.search.*; +import com.intellij.psi.search.searches.*; import com.intellij.psi.util.ClassUtil; -import com.intellij.refactoring.HelpID; -import com.intellij.refactoring.JavaRefactoringSettings; -import com.intellij.refactoring.RefactoringBundle; -import com.intellij.refactoring.listeners.RefactoringElementListener; -import com.intellij.refactoring.util.MoveRenameUsageInfo; -import com.intellij.refactoring.util.RefactoringUtil; -import com.intellij.usageView.UsageInfo; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.containers.MultiMap; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.refactoring.*; +import com.intellij.refactoring.listeners.*; +import com.intellij.refactoring.util.*; +import com.intellij.usageView.*; +import com.intellij.util.*; +import com.intellij.util.containers.*; +import org.jetbrains.annotations.*; import java.util.*; -import java.util.regex.Pattern; +import java.util.HashSet; +import java.util.regex.*; /** * @author yole @@ -217,7 +210,7 @@ public class RenameJavaClassProcessor extends RenamePsiElementProcessor { } } } - else { + else if (!(aClass instanceof PsiTypeParameter)) { final String qualifiedNameAfterRename = RenameUtil.getQualifiedNameAfterRename(aClass.getQualifiedName(), newName); Project project = element.getProject(); final PsiClass conflictingClass = diff --git a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java index 02c42ead0b0b..2d2c2d5892a1 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java +++ b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java @@ -15,26 +15,20 @@ */ package com.intellij.refactoring.util.duplicates; -import com.intellij.codeInsight.PsiEquivalenceUtil; -import com.intellij.lang.ASTNode; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.Pair; +import com.intellij.codeInsight.*; +import com.intellij.lang.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.util.*; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; -import com.intellij.psi.impl.source.PsiImmediateClassType; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.util.InheritanceUtil; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.refactoring.extractMethod.InputVariables; -import com.intellij.refactoring.util.RefactoringUtil; -import com.intellij.util.ArrayUtil; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.containers.IntArrayList; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.*; +import com.intellij.psi.tree.*; +import com.intellij.psi.util.*; +import com.intellij.refactoring.extractMethod.*; +import com.intellij.refactoring.util.*; +import com.intellij.util.*; +import com.intellij.util.containers.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -406,6 +400,10 @@ public class DuplicatesFinder { if (contextClass != null && InheritanceUtil.isInheritorOrSelf(thisClass, contextClass, true)) { contextClass = thisClass; } + final PsiClass thisCandidate = RefactoringUtil.getThisClass(candidate); + if (thisCandidate != null && InheritanceUtil.isInheritorOrSelf(thisCandidate, contextClass, true)) { + contextClass = thisCandidate; + } return contextClass != null && match.putParameter(parameter, RefactoringUtil.createThisExpression(patternQualifier.getManager(), contextClass)); } diff --git a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java index 3918fdbde1ea..327d062ed71e 100644 --- a/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java +++ b/java/java-impl/src/com/intellij/testIntegration/createTest/CreateTestAction.java @@ -15,33 +15,29 @@ */ package com.intellij.testIntegration.createTest; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtil; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightNamesUtil; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.fileEditor.ex.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vfs.*; import com.intellij.psi.*; -import com.intellij.psi.impl.source.PostprocessReformattingAspect; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.refactoring.util.classMembers.MemberInfo; -import com.intellij.testIntegration.TestFrameworkDescriptor; -import com.intellij.testIntegration.TestIntegrationUtils; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.*; +import com.intellij.psi.search.*; +import com.intellij.psi.util.*; +import com.intellij.refactoring.util.classMembers.*; +import com.intellij.testIntegration.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.Collection; +import java.util.*; public class CreateTestAction extends PsiElementBaseIntentionAction { @NotNull @@ -54,8 +50,7 @@ public class CreateTestAction extends PsiElementBaseIntentionAction { return getText(); } - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null) return false; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { if (Extensions.getExtensions(TestFrameworkDescriptor.EXTENSION_NAME).length == 0) return false; if (!isAvailableForElement(element)) return false; diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java new file mode 100644 index 000000000000..eccbde54a2ec --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2010 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. + */ +public class BaseClass extends JComponent { +} + +class SubClass extends BaseClass { + void a() { + System.out.println(getLocation()); + } +} + +class Util { + public static void method(BaseClass base) { + System.out.println(base.getLocation()); + } +} diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after new file mode 100644 index 000000000000..181a189485cc --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/CorrectThis.java.after @@ -0,0 +1,14 @@ +public class BaseClass extends JComponent { +} + +class SubClass extends BaseClass { + void a() { + Util.method(SubClass.this); + } +} + +class Util { + public static void method(BaseClass base) { + System.out.println(base.getLocation()); + } +} diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java new file mode 100644 index 000000000000..fe28257806d7 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java @@ -0,0 +1,18 @@ +/* + * Copyright 2000-2010 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. + */ +public class Test extends String> {} + +class P {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after new file mode 100644 index 000000000000..b4f9ab017419 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameCollisions/RenameTypeParameterToExistingClassName.java.after @@ -0,0 +1,3 @@ +public class Test

{} + +class P {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java index 147c3e6c6ed7..cc6e5789936c 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java @@ -49,4 +49,8 @@ public class FindMethodDuplicatesMiscTest extends FindMethodDuplicatesBaseTest { public void testDetectNameConflictsWithStatic() throws Exception { doTest(); } + + public void testCorrectThis() throws Exception { + doTest(); + } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java index 1a069c4712fa..9a7d0c9fb162 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameCollisionsTest.java @@ -1,18 +1,17 @@ package com.intellij.refactoring; -import com.intellij.JavaTestUtil; -import com.intellij.codeInsight.TargetElementUtilBase; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.psi.PsiElement; -import com.intellij.refactoring.rename.RenameProcessor; -import com.intellij.refactoring.rename.RenameUtil; -import com.intellij.refactoring.util.MoveRenameUsageInfo; -import com.intellij.testFramework.LightCodeInsightTestCase; -import com.intellij.usageView.UsageInfo; -import org.junit.Assert; +import com.intellij.*; +import com.intellij.codeInsight.*; +import com.intellij.openapi.projectRoots.*; +import com.intellij.openapi.projectRoots.impl.*; +import com.intellij.psi.*; +import com.intellij.refactoring.rename.*; +import com.intellij.refactoring.util.*; +import com.intellij.testFramework.*; +import com.intellij.usageView.*; +import org.junit.*; -import java.util.HashMap; +import java.util.*; /** * @author sashache @@ -157,6 +156,10 @@ public class RenameCollisionsTest extends LightCodeInsightTestCase { fail("Conflicts were not found"); } + public void testRenameTypeParameterToExistingClassName() throws Exception { + doTest("P"); + } + private void doTest(final String newName) throws Exception { configureByFile(BASE_PATH + getTestName(false) + ".java"); PsiElement element = TargetElementUtilBase diff --git a/java/openapi/src/com/intellij/codeInsight/intention/AddAnnotationFix.java b/java/openapi/src/com/intellij/codeInsight/intention/AddAnnotationFix.java index f66e320f9af6..b1ce68592410 100644 --- a/java/openapi/src/com/intellij/codeInsight/intention/AddAnnotationFix.java +++ b/java/openapi/src/com/intellij/codeInsight/intention/AddAnnotationFix.java @@ -16,28 +16,18 @@ package com.intellij.codeInsight.intention; -import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.codeInsight.CodeInsightBundle; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.ExternalAnnotationsManager; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.lang.findUsages.FindUsagesProvider; -import com.intellij.lang.findUsages.LanguageFindUsages; -import com.intellij.openapi.command.undo.UndoUtil; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.CaretModel; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInspection.*; +import com.intellij.lang.findUsages.*; +import com.intellij.openapi.command.undo.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleSettingsManager; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * @author ven @@ -104,8 +94,8 @@ public class AddAnnotationFix extends PsiElementBaseIntentionAction implements L return listOwner; } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { - if (element == null || !element.isValid()) return false; + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { + if (!element.isValid()) return false; if (!PsiUtil.isLanguageLevel5OrHigher(element)) return false; final PsiModifierListOwner owner; if (myModifierListOwner != null) { @@ -139,7 +129,7 @@ public class AddAnnotationFix extends PsiElementBaseIntentionAction implements L final int position = caretModel.getOffset(); element = file.findElementAt(position); } - return isAvailable(project, editor, element); + return element != null && isAvailable(project, editor, element); } public void invoke(@NotNull final Project project, Editor editor, PsiFile file) throws IncorrectOperationException { diff --git a/platform/icons/src/ide/emptyFatalError.png b/platform/icons/src/ide/emptyFatalError.png new file mode 100755 index 000000000000..7594291f2229 Binary files /dev/null and b/platform/icons/src/ide/emptyFatalError.png differ diff --git a/platform/icons/src/ide/error_notifications.png b/platform/icons/src/ide/error_notifications.png old mode 100644 new mode 100755 index ef68f6af4209..eb7a60ab863e Binary files a/platform/icons/src/ide/error_notifications.png and b/platform/icons/src/ide/error_notifications.png differ diff --git a/platform/icons/src/ide/fatalError.png b/platform/icons/src/ide/fatalError.png new file mode 100755 index 000000000000..a4e89efdd4ea Binary files /dev/null and b/platform/icons/src/ide/fatalError.png differ diff --git a/platform/icons/src/ide/hectorNo.png b/platform/icons/src/ide/hectorNo.png new file mode 100755 index 000000000000..9328a0876e6c Binary files /dev/null and b/platform/icons/src/ide/hectorNo.png differ diff --git a/platform/icons/src/ide/hectorOff.png b/platform/icons/src/ide/hectorOff.png new file mode 100755 index 000000000000..7633890568c4 Binary files /dev/null and b/platform/icons/src/ide/hectorOff.png differ diff --git a/platform/icons/src/ide/hectorOn.png b/platform/icons/src/ide/hectorOn.png new file mode 100755 index 000000000000..f5e1dbde1c06 Binary files /dev/null and b/platform/icons/src/ide/hectorOn.png differ diff --git a/platform/icons/src/ide/incomingChangesOff.png b/platform/icons/src/ide/incomingChangesOff.png new file mode 100755 index 000000000000..ff844dc2103e Binary files /dev/null and b/platform/icons/src/ide/incomingChangesOff.png differ diff --git a/platform/icons/src/ide/incomingChangesOn.png b/platform/icons/src/ide/incomingChangesOn.png new file mode 100755 index 000000000000..47740a5e1f51 Binary files /dev/null and b/platform/icons/src/ide/incomingChangesOn.png differ diff --git a/platform/icons/src/ide/info_notifications.png b/platform/icons/src/ide/info_notifications.png old mode 100644 new mode 100755 index eab75749bbec..c2219320b016 Binary files a/platform/icons/src/ide/info_notifications.png and b/platform/icons/src/ide/info_notifications.png differ diff --git a/platform/icons/src/ide/notifications.png b/platform/icons/src/ide/notifications.png old mode 100644 new mode 100755 index 0a76ee62fc78..91b2201f1121 Binary files a/platform/icons/src/ide/notifications.png and b/platform/icons/src/ide/notifications.png differ diff --git a/platform/icons/src/ide/read_notifications.png b/platform/icons/src/ide/read_notifications.png deleted file mode 100644 index 77bedbcc15e2..000000000000 Binary files a/platform/icons/src/ide/read_notifications.png and /dev/null differ diff --git a/platform/icons/src/ide/readonly.png b/platform/icons/src/ide/readonly.png new file mode 100755 index 000000000000..a73f5535c94f Binary files /dev/null and b/platform/icons/src/ide/readonly.png differ diff --git a/platform/icons/src/ide/readwrite.png b/platform/icons/src/ide/readwrite.png new file mode 100755 index 000000000000..469f8f1f4a5f Binary files /dev/null and b/platform/icons/src/ide/readwrite.png differ diff --git a/platform/icons/src/ide/statusbar_arrows.png b/platform/icons/src/ide/statusbar_arrows.png new file mode 100644 index 000000000000..92e314aaeccd Binary files /dev/null and b/platform/icons/src/ide/statusbar_arrows.png differ diff --git a/platform/icons/src/ide/warning_notifications.png b/platform/icons/src/ide/warning_notifications.png old mode 100644 new mode 100755 index ac2d621ec097..1d5528563ab3 Binary files a/platform/icons/src/ide/warning_notifications.png and b/platform/icons/src/ide/warning_notifications.png differ diff --git a/platform/icons/src/process/step_passive.png b/platform/icons/src/process/step_passive.png old mode 100644 new mode 100755 index 0d878a65958e..c5537698a346 Binary files a/platform/icons/src/process/step_passive.png and b/platform/icons/src/process/step_passive.png differ diff --git a/platform/lang-api/src/com/intellij/codeInsight/intention/PsiElementBaseIntentionAction.java b/platform/lang-api/src/com/intellij/codeInsight/intention/PsiElementBaseIntentionAction.java index bb23165dd5ca..adc150baa41e 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/intention/PsiElementBaseIntentionAction.java +++ b/platform/lang-api/src/com/intellij/codeInsight/intention/PsiElementBaseIntentionAction.java @@ -22,14 +22,11 @@ */ package com.intellij.codeInsight.intention; -import com.intellij.codeInsight.intention.impl.BaseIntentionAction; -import com.intellij.openapi.editor.CaretModel; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.codeInsight.intention.impl.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import org.jetbrains.annotations.*; public abstract class PsiElementBaseIntentionAction extends BaseIntentionAction { @@ -42,12 +39,14 @@ public abstract class PsiElementBaseIntentionAction extends BaseIntentionAction * @param element the element under caret. * @return true if the intention is available, false otherwise. */ - public abstract boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element); + public abstract boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element); public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { if (!file.getManager().isInProject(file)) return false; final CaretModel caretModel = editor.getCaretModel(); final int position = caretModel.getOffset(); - return isAvailable(project, editor, file.findElementAt(position)); + final PsiElement element = file.findElementAt(position); + if (element == null) return false; + return isAvailable(project, editor, element); } } \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java index b6a9d2069824..0cde5d9df65e 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/ModuleBasedConfiguration.java @@ -16,20 +16,14 @@ package com.intellij.execution.configurations; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.WriteExternalException; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.util.*; +import org.jdom.*; +import org.jetbrains.annotations.*; -import java.util.Arrays; -import java.util.Collection; +import java.util.*; public abstract class ModuleBasedConfiguration extends RuntimeConfiguration { private static final Logger LOG = Logger.getInstance("#com.intellij.execution.configurations.ModuleBasedConfiguration"); @@ -106,7 +100,10 @@ public abstract class ModuleBasedConfiguration modules = ModuleUtil.collectModulesDependsOn(Arrays.asList(classModules)); + final Set modules = new HashSet(); + for (Module classModule : classModules) { + ModuleUtil.collectModulesDependsOn(classModule, modules); + } if (modules.contains(originalModule)) setModule(originalModule); } } diff --git a/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java b/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java index ad0737d53169..c5e1ef4a5db0 100644 --- a/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/module/ModuleUtil.java @@ -19,19 +19,15 @@ */ package com.intellij.openapi.module; -import com.intellij.openapi.application.ReadAction; -import com.intellij.openapi.application.Result; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.application.*; +import com.intellij.openapi.project.*; import com.intellij.openapi.roots.*; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vfs.*; +import com.intellij.psi.*; import com.intellij.util.containers.HashSet; -import com.intellij.util.graph.Graph; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.util.graph.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -169,6 +165,7 @@ public class ModuleUtil { return element.getUserData(KEY_MODULE); } + //ignores export flag public static void getDependencies(@NotNull Module module, Set modules) { if (modules.contains(module)) return; modules.add(module); @@ -178,16 +175,32 @@ public class ModuleUtil { } } - public static Collection collectModulesDependsOn(@NotNull final Collection modules) { - if (modules.isEmpty()) return Collections.emptyList(); - final HashSet result = new HashSet(); - final Project project = modules.iterator().next().getProject(); - final ModuleManager moduleManager = ModuleManager.getInstance(project); - for (final Module module : modules) { - result.add(module); - result.addAll(moduleManager.getModuleDependentModules(module)); + /** + * collect transitive module dependants + * @param module to find dependencies on + * @param result resulted set + */ + public static void collectModulesDependsOn(@NotNull final Module module, final Set result) { + if (result.contains(module)) return; + result.add(module); + final ModuleManager moduleManager = ModuleManager.getInstance(module.getProject()); + final List dependentModules = moduleManager.getModuleDependentModules(module); + for (final Module dependentModule : dependentModules) { + final OrderEntry[] orderEntries = ModuleRootManager.getInstance(dependentModule).getOrderEntries(); + for (OrderEntry o : orderEntries) { + if (o instanceof ModuleOrderEntry) { + final ModuleOrderEntry orderEntry = (ModuleOrderEntry)o; + if (orderEntry.getModule() == module) { + if (orderEntry.isExported()) { + collectModulesDependsOn(dependentModule, result); + } else { + result.add(dependentModule); + } + break; + } + } + } } - return result; } @NotNull diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java index 6c14fadc30d7..98e0398777e2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonCodeAnalyzerImpl.java @@ -16,54 +16,35 @@ package com.intellij.codeInsight.daemon.impl; -import com.intellij.codeHighlighting.BackgroundEditorHighlighter; -import com.intellij.codeHighlighting.HighlightingPass; +import com.intellij.codeHighlighting.*; import com.intellij.codeHighlighting.Pass; -import com.intellij.codeHighlighting.TextEditorHighlightingPass; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings; -import com.intellij.codeInsight.daemon.LineMarkerInfo; -import com.intellij.codeInsight.daemon.ReferenceImporter; -import com.intellij.codeInsight.hint.HintManager; -import com.intellij.codeInsight.intention.impl.IntentionHintComponent; -import com.intellij.concurrency.Job; -import com.intellij.lang.annotation.HighlightSeverity; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; +import com.intellij.codeInsight.daemon.*; +import com.intellij.codeInsight.hint.*; +import com.intellij.codeInsight.intention.impl.*; +import com.intellij.concurrency.*; +import com.intellij.lang.annotation.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.ex.EditorMarkupModel; -import com.intellij.openapi.editor.markup.MarkupModel; -import com.intellij.openapi.editor.markup.RangeHighlighter; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.StdFileTypes; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.editor.markup.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.impl.text.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; import com.intellij.openapi.util.*; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.packageDependencies.DependencyValidationManager; -import com.intellij.psi.PsiCompiledElement; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiFileSystemItem; -import com.intellij.psi.search.scope.packageSet.NamedScope; -import com.intellij.psi.search.scope.packageSet.NamedScopeManager; -import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; -import com.intellij.util.Alarm; -import com.intellij.util.SmartList; -import com.intellij.util.containers.ContainerUtil; -import gnu.trove.THashMap; -import gnu.trove.THashSet; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; +import com.intellij.openapi.vfs.*; +import com.intellij.packageDependencies.*; +import com.intellij.psi.*; +import com.intellij.psi.search.scope.packageSet.*; +import com.intellij.util.*; +import com.intellij.util.containers.*; +import gnu.trove.*; +import org.jdom.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -101,7 +82,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx @NonNls private static final String FILE_TAG = "file"; @NonNls private static final String URL_ATT = "url"; private DaemonListeners myDaemonListeners; - private StatusBarUpdater myStatusBarUpdater; private final PassExecutorService myPassExecutorService; private static final Key> HIGHLIGHTS_TO_REMOVE_KEY = Key.create("HIGHLIGHTS_TO_REMOVE"); private int myModificationCount = 0; @@ -146,9 +126,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx public void projectOpened() { assert !myInitialized : "Double Initializing"; - myStatusBarUpdater = new StatusBarUpdater(myProject); - Disposer.register(myProject, myStatusBarUpdater); - myDaemonListeners = new DaemonListeners(myProject, this, myEditorTracker); Disposer.register(myProject, myDaemonListeners); reloadScopes(); @@ -474,11 +451,6 @@ public class DaemonCodeAnalyzerImpl extends DaemonCodeAnalyzer implements JDOMEx markup.putUserData(HIGHLIGHTS_IN_EDITOR_DOCUMENT_KEY, Collections.unmodifiableList(highlightsToSet)); markup.putUserData(HIGHLIGHTS_TO_REMOVE_KEY, Collections.unmodifiableList(highlightsToRemove)); - - DaemonCodeAnalyzer codeAnalyzer = DaemonCodeAnalyzer.getInstance(project); - if (codeAnalyzer instanceof DaemonCodeAnalyzerImpl && ((DaemonCodeAnalyzerImpl)codeAnalyzer).myStatusBarUpdater != null) { - ((DaemonCodeAnalyzerImpl)codeAnalyzer).myStatusBarUpdater.updateStatus(); - } } private static void stripWarningsCoveredByErrors(final Project project, List highlights, MarkupModel markup) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java deleted file mode 100644 index fe9e057c6e39..000000000000 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/StatusBarUpdater.java +++ /dev/null @@ -1,95 +0,0 @@ - -/* - * Copyright 2000-2009 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.codeInsight.daemon.impl; - -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.event.CaretEvent; -import com.intellij.openapi.editor.event.CaretListener; -import com.intellij.openapi.editor.ex.DocumentEx; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.FileEditorManagerAdapter; -import com.intellij.openapi.fileEditor.FileEditorManagerEvent; -import com.intellij.openapi.fileEditor.FileEditorManagerListener; -import com.intellij.openapi.project.DumbAwareRunnable; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; - -public class StatusBarUpdater implements Disposable { - private final Project myProject; - private final UpdateStatusRunnable myUpdateStatusRunnable = new UpdateStatusRunnable(); - - public StatusBarUpdater(Project project) { - myProject = project; - - CaretListener caretListener = new CaretListener() { - public void caretPositionChanged(CaretEvent e) { - ApplicationManager.getApplication().invokeLater(myUpdateStatusRunnable); - } - }; - EditorFactory.getInstance().getEventMulticaster().addCaretListener(caretListener, this); - - project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() { - @Override - public void selectionChanged(FileEditorManagerEvent event) { - ApplicationManager.getApplication().invokeLater(myUpdateStatusRunnable); - } - }); - } - - public void dispose() { - } - - public void updateStatus() { - Editor editor = FileEditorManager.getInstance(myProject).getSelectedTextEditor(); - if (editor == null || !editor.getContentComponent().hasFocus()){ - return; - } - - final Document document = editor.getDocument(); - if (document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate()) return; - - int offset = editor.getCaretModel().getOffset(); - DaemonCodeAnalyzer codeAnalyzer = DaemonCodeAnalyzer.getInstance(myProject); - HighlightInfo info = ((DaemonCodeAnalyzerImpl)codeAnalyzer).findHighlightByOffset(document, offset, false); - String text = info != null && info.description != null ? info.description : ""; - - StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); - if (statusBar instanceof StatusBarEx) { - StatusBarEx barEx = (StatusBarEx)statusBar; - if (!text.equals(barEx.getInfo())){ - statusBar.setInfo(text); - } - barEx.update(editor); - } - } - - private class UpdateStatusRunnable implements DumbAwareRunnable { - public void run() { - if (!myProject.isDisposed()) { - updateStatus(); - } - } - } -} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/actions/AbstractSuppressByNoInspectionCommentFix.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/actions/AbstractSuppressByNoInspectionCommentFix.java index b1d8f4be1630..1268698df18a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/actions/AbstractSuppressByNoInspectionCommentFix.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/actions/AbstractSuppressByNoInspectionCommentFix.java @@ -16,27 +16,19 @@ package com.intellij.codeInsight.daemon.impl.actions; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInspection.InspectionsBundle; -import com.intellij.codeInspection.SuppressIntentionAction; -import com.intellij.codeInspection.SuppressionUtil; -import com.intellij.lang.Commenter; -import com.intellij.lang.LanguageCommenters; -import com.intellij.openapi.command.undo.UndoUtil; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileTypes.LanguageFileType; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiComment; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiParserFacade; -import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.codeInsight.*; +import com.intellij.codeInspection.*; +import com.intellij.lang.*; +import com.intellij.openapi.command.undo.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import java.util.Collections; -import java.util.List; +import java.util.*; /** * @author Roman.Chernyatchik @@ -94,8 +86,8 @@ public abstract class AbstractSuppressByNoInspectionCommentFix extends SuppressI container.getParent().addBefore(comment, container); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) { - return context != null && context.getManager().isInProject(context) && getContainer(context) != null; + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) { + return context.getManager().isInProject(context) && getContainer(context) != null; } public void invoke(final Project project, @Nullable Editor editor, final PsiElement element) throws IncorrectOperationException { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java index 8167486e69e9..a430ebb61128 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java @@ -16,21 +16,17 @@ package com.intellij.codeInsight.hint; -import com.intellij.lang.parameterInfo.ParameterInfoHandler; -import com.intellij.lang.parameterInfo.ParameterInfoUIContextEx; -import com.intellij.openapi.editor.Editor; -import com.intellij.psi.PsiElement; -import com.intellij.ui.SideBorder; -import com.intellij.ui.SplittingUtil; -import com.intellij.ui.StrikeoutLabel; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; +import com.intellij.lang.parameterInfo.*; +import com.intellij.openapi.editor.*; +import com.intellij.psi.*; +import com.intellij.ui.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.border.LineBorder; +import javax.swing.border.*; import java.awt.*; -import java.util.EnumSet; +import java.util.*; class ParameterInfoComponent extends JPanel{ private final Object[] myObjects; @@ -182,7 +178,7 @@ class ParameterInfoComponent extends JPanel{ public void setup(String text, int highlightStartOffset, int highlightEndOffset, boolean isDisabled, boolean strikeout, boolean isDisabledBeforeHighlight, Color background) { removeAll(); - String[] lines = SplittingUtil.splitText(text, getFontMetrics(BOLD_FONT), myWidthLimit, ','); + String[] lines = UIUtil.splitText(text, getFontMetrics(BOLD_FONT), myWidthLimit, ','); myOneLineComponents = new OneLineComponent[lines.length]; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java index ff423b6dc5e1..4318a65a2cb6 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/problems/WolfTheProblemSolverImpl.java @@ -17,42 +17,28 @@ package com.intellij.codeInsight.problems; import com.intellij.codeInsight.daemon.impl.*; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder; -import com.intellij.lang.annotation.HighlightSeverity; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.impl.LaterInvocator; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; -import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vcs.FileStatusListener; -import com.intellij.openapi.vcs.FileStatusManager; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.lang.annotation.*; +import com.intellij.openapi.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.application.impl.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.module.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.vcs.*; import com.intellij.openapi.vfs.*; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.problems.Problem; -import com.intellij.problems.WolfTheProblemSolver; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.problems.*; import com.intellij.psi.*; -import com.intellij.util.containers.ContainerUtil; -import gnu.trove.THashMap; -import gnu.trove.THashSet; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; +import com.intellij.util.containers.*; +import gnu.trove.*; +import org.jetbrains.annotations.*; import java.util.*; @@ -316,10 +302,10 @@ public class WolfTheProblemSolverImpl extends WolfTheProblemSolver { return true; } - private static String saveStatusBarInfo(StatusBar statusBar) { + private static String saveStatusBarInfo(final StatusBar statusBar) { String oldInfo = null; if (statusBar instanceof StatusBarEx) { - oldInfo = ((StatusBarEx)statusBar).getInfo(); + oldInfo = statusBar.getInfo(); } return oldInfo; } diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java index d3e2b4d0baea..129497e0e2c2 100644 --- a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java +++ b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java @@ -16,57 +16,41 @@ package com.intellij.find.findUsages; -import com.intellij.codeInsight.hint.HintManager; -import com.intellij.codeInsight.hint.HintManagerImpl; -import com.intellij.codeInsight.hint.HintUtil; -import com.intellij.find.FindBundle; -import com.intellij.lang.findUsages.LanguageFindUsages; -import com.intellij.navigation.NavigationItem; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.IdeActions; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; +import com.intellij.codeInsight.hint.*; +import com.intellij.find.*; +import com.intellij.lang.findUsages.*; +import com.intellij.navigation.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorLocation; -import com.intellij.openapi.fileEditor.TextEditor; -import com.intellij.openapi.keymap.KeymapUtil; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.keymap.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; import com.intellij.openapi.util.*; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.wm.*; import com.intellij.psi.*; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.SearchScope; -import com.intellij.ui.LightweightHint; +import com.intellij.psi.search.*; +import com.intellij.ui.*; import com.intellij.ui.content.Content; -import com.intellij.usageView.UsageInfo; +import com.intellij.usageView.*; import com.intellij.usageView.UsageViewManager; -import com.intellij.usageView.UsageViewUtil; import com.intellij.usages.*; -import com.intellij.usages.impl.UsageViewManagerImpl; -import com.intellij.util.Processor; -import com.intellij.util.containers.ContainerUtil; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.usages.impl.*; +import com.intellij.util.*; +import com.intellij.util.containers.*; +import org.jdom.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.*; public class FindUsagesManager implements JDOMExternalizable { private static final Logger LOG = Logger.getInstance("#com.intellij.find.findParameterUsages.FindUsagesManager"); @@ -446,8 +430,7 @@ public class FindUsagesManager implements JDOMExternalizable { } private void clearStatusBar() { - StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); - statusBar.setInfo(""); + StatusBar.Info.set("", myProject); } private static String getSearchAgainMessage(PsiElement element, final FileSearchScope direction) { @@ -481,8 +464,7 @@ public class FindUsagesManager implements JDOMExternalizable { showEditorHint(message, textEditor.getEditor()); } else { - StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); - statusBar.setInfo(message); + StatusBar.Info.set(message, myProject); } } diff --git a/platform/lang-impl/src/com/intellij/openapi/wm/impl/status/TogglePopupHintsPanel.java b/platform/lang-impl/src/com/intellij/openapi/wm/impl/status/TogglePopupHintsPanel.java index 98b893f1c6d9..7876b29fe694 100644 --- a/platform/lang-impl/src/com/intellij/openapi/wm/impl/status/TogglePopupHintsPanel.java +++ b/platform/lang-impl/src/com/intellij/openapi/wm/impl/status/TogglePopupHintsPanel.java @@ -16,42 +16,68 @@ package com.intellij.openapi.wm.impl.status; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.impl.HectorComponent; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil; -import com.intellij.ide.DataManager; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.profile.codeInspection.InspectionProjectProfileManager; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.ui.UIBundle; -import com.intellij.ui.awt.RelativePoint; -import com.intellij.util.ui.EmptyIcon; -import org.jetbrains.annotations.Nullable; +import com.intellij.codeInsight.daemon.*; +import com.intellij.codeInsight.daemon.impl.*; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.ide.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.ex.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.profile.codeInspection.*; +import com.intellij.psi.*; +import com.intellij.ui.*; +import com.intellij.ui.awt.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.*; -public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{ - private static final Icon INSPECTIONS_ICON = IconLoader.getIcon("/objectBrowser/showGlobalInspections.png"); - private static final Icon INSPECTIONS_OFF_ICON = IconLoader.getIcon("/general/inspectionsOff.png"); - private static final Icon EMPTY_ICON = new EmptyIcon(INSPECTIONS_ICON.getIconWidth(), INSPECTIONS_ICON.getIconHeight()); +public class TogglePopupHintsPanel implements StatusBarWidget, StatusBarWidget.IconPresentation { + private static final Icon INSPECTIONS_ICON = IconLoader.getIcon("/ide/hectorOn.png"); + private static final Icon INSPECTIONS_OFF_ICON = IconLoader.getIcon("/ide/hectorOff.png"); + private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/hectorNo.png"); - private final JLabel myHectorLabel = new JLabel(EMPTY_ICON); + private Icon myCurrentIcon; + private String myToolTipText; + private StatusBar myStatusBar; - public TogglePopupHintsPanel(final StatusBar statusBar) { - super(new GridBagLayout()); - myHectorLabel.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { + public TogglePopupHintsPanel(@NotNull final Project project) { + myCurrentIcon = EMPTY_ICON; + project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() { + @Override + public void selectionChanged(FileEditorManagerEvent event) { + updateStatus(); + } + + @Override + public void fileOpened(FileEditorManager source, VirtualFile file) { + updateStatus(); + } + }); + } + + public void dispose() { + } + + @NotNull + public Icon getIcon() { + return myCurrentIcon; + } + + public String getTooltipText() { + return myToolTipText; + } + + public Consumer getClickConsumer() { + return new Consumer() { + public void consume(final MouseEvent e) { Point point = new Point(0, 0); final PsiFile file = getCurrentFile(); if (file != null) { @@ -59,33 +85,36 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{ final HectorComponent component = new HectorComponent(file); final Dimension dimension = component.getPreferredSize(); point = new Point(point.x - dimension.width, point.y - dimension.height); - component.showComponent(new RelativePoint(TogglePopupHintsPanel.this, point)); + component.showComponent(new RelativePoint(e.getComponent(), point)); } } - }); - myHectorLabel.setIconTextGap(0); - - add(myHectorLabel, new GridBagConstraints(0, 0, 1, 1, 0, 1, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0)); - - StatusBarTooltipper.install(this, myHectorLabel, statusBar); + }; } + @NotNull + public String ID() { + return "InspectionProfile"; + } - - public JComponent getComponent() { + public Presentation getPresentation(@NotNull Type type) { return this; } + public void install(@NotNull final StatusBar statusBar) { + myStatusBar = statusBar; + } + public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - updateStatus(); - String text = componentSelected == null ? null : componentSelected.getToolTipText(); - setCursor(Cursor.getPredefinedCursor(text == null ? Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR)); - return text; + //updateStatus(); + //String text = componentSelected == null ? null : componentSelected.getToolTipText(); + //setCursor(Cursor.getPredefinedCursor(text == null ? Cursor.DEFAULT_CURSOR : Cursor.HAND_CURSOR)); + return ""; } public void clear() { - myHectorLabel.setIcon(EMPTY_ICON); - myHectorLabel.setToolTipText(null); + myCurrentIcon = EMPTY_ICON; + myToolTipText = null; + myStatusBar.updateWidget(ID()); } public void updateStatus() { @@ -94,21 +123,22 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{ private void updateStatus(PsiFile file) { if (isStateChangeable(file)) { - String tooltip; if (HighlightLevelUtil.shouldInspect(file)) { - myHectorLabel.setIcon(INSPECTIONS_ICON); - tooltip = "Current inspection profile: " + InspectionProjectProfileManager.getInstance(file.getProject()).getInspectionProfile().getName() + ". "; + myCurrentIcon = INSPECTIONS_ICON; + myToolTipText = "Current inspection profile: " + InspectionProjectProfileManager.getInstance(file.getProject()).getInspectionProfile().getName() + ". "; } else { - myHectorLabel.setIcon(INSPECTIONS_OFF_ICON); - tooltip = "Inspections are off. "; + myCurrentIcon = INSPECTIONS_OFF_ICON; + myToolTipText = "Inspections are off. "; } - myHectorLabel.setToolTipText(tooltip + UIBundle.message("popup.hints.panel.click.to.configure.highlighting.tooltip.text")); + myToolTipText += UIBundle.message("popup.hints.panel.click.to.configure.highlighting.tooltip.text"); } else { - myHectorLabel.setIcon(EMPTY_ICON); - myHectorLabel.setToolTipText(null); + myCurrentIcon = EMPTY_ICON; + myToolTipText = null; } + + myStatusBar.updateWidget(ID()); } private static boolean isStateChangeable(PsiFile file) { @@ -131,10 +161,6 @@ public class TogglePopupHintsPanel extends JPanel implements StatusBarPatch{ @Nullable private Project getCurrentProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this)); - } - - public Point getToolTipLocation(MouseEvent event) { - return new Point(0, -20); + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar)); } } diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java index d320a53b8622..04c6aa50b381 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java @@ -16,63 +16,44 @@ package com.intellij.packageDependencies.ui; -import com.intellij.CommonBundle; -import com.intellij.analysis.AnalysisScope; -import com.intellij.analysis.AnalysisScopeBundle; -import com.intellij.analysis.PerformAnalysisInBackgroundOption; -import com.intellij.codeInsight.hint.HintUtil; -import com.intellij.ide.CommonActionsManager; -import com.intellij.ide.ExporterToTextFile; -import com.intellij.openapi.Disposable; +import com.intellij.*; +import com.intellij.analysis.*; +import com.intellij.codeInsight.hint.*; +import com.intellij.ide.*; +import com.intellij.openapi.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.actionSystem.ex.ComboBoxAction; -import com.intellij.openapi.components.PathMacroManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.help.HelpManager; -import com.intellij.openapi.options.ShowSettingsUtil; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.ui.Splitter; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.JDOMUtil; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; +import com.intellij.openapi.actionSystem.ex.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.help.*; +import com.intellij.openapi.options.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; import com.intellij.packageDependencies.*; -import com.intellij.packageDependencies.actions.AnalyzeDependenciesHandler; -import com.intellij.packageDependencies.actions.BackwardDependenciesHandler; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiManager; -import com.intellij.psi.search.scope.packageSet.NamedScope; -import com.intellij.psi.search.scope.packageSet.PackageSet; +import com.intellij.packageDependencies.actions.*; +import com.intellij.psi.*; +import com.intellij.psi.search.scope.packageSet.*; import com.intellij.ui.*; import com.intellij.ui.content.Content; import com.intellij.ui.treeStructure.Tree; -import com.intellij.usageView.UsageViewBundle; +import com.intellij.usageView.*; import com.intellij.util.*; -import com.intellij.util.ui.UIUtil; -import com.intellij.util.ui.tree.TreeUtil; -import org.jdom.Document; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.util.ui.*; +import com.intellij.util.ui.tree.*; +import org.jdom.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.event.ChangeListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; +import javax.swing.event.*; +import javax.swing.tree.*; import java.awt.*; import java.util.*; import java.util.List; @@ -177,16 +158,14 @@ public class DependenciesPanel extends JPanel implements Disposable, DataProvide PackageDependenciesNode selectedNode = (PackageDependenciesNode)path.getLastPathComponent(); traverseToLeaves(selectedNode, denyRules, allowRules); } - final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); if (denyRules.length() + allowRules.length() > 0) { - statusBar.setInfo(AnalysisScopeBundle.message("status.bar.rule.violation.message", + StatusBar.Info.set(AnalysisScopeBundle.message("status.bar.rule.violation.message", ((denyRules.length() == 0 || allowRules.length() == 0) ? 1 : 2), (denyRules.length() > 0 ? denyRules.toString() + (allowRules.length() > 0 ? "; " : "") : " ") + - (allowRules.length() > 0 ? allowRules.toString() : " "))); - + (allowRules.length() > 0 ? allowRules.toString() : " ")), myProject); } else { - statusBar.setInfo(AnalysisScopeBundle.message("status.bar.no.rule.violation.message")); + StatusBar.Info.set(AnalysisScopeBundle.message("status.bar.no.rule.violation.message"), myProject); } } }); diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java index 2d383bc79d91..c02a4763989b 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/InspectionProjectProfileManager.java @@ -15,35 +15,25 @@ */ package com.intellij.profile.codeInspection; -import com.intellij.codeInsight.daemon.impl.SeverityRegistrar; -import com.intellij.codeInsight.daemon.impl.analysis.HighlightingSettingsPerFile; -import com.intellij.codeInspection.InspectionProfile; -import com.intellij.codeInspection.ex.InspectionProfileImpl; -import com.intellij.codeInspection.ex.InspectionProfileWrapper; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.codeInsight.daemon.impl.*; +import com.intellij.codeInsight.daemon.impl.analysis.*; +import com.intellij.codeInspection.*; +import com.intellij.codeInspection.ex.*; +import com.intellij.openapi.application.*; import com.intellij.openapi.components.*; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.startup.StartupManager; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.WriteExternalException; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.impl.status.TogglePopupHintsPanel; -import com.intellij.openapi.Disposable; -import com.intellij.packageDependencies.DependencyValidationManager; -import com.intellij.profile.DefaultProjectProfileManager; -import com.intellij.profile.Profile; -import com.intellij.psi.PsiElement; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.project.*; +import com.intellij.openapi.startup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.openapi.wm.impl.status.*; +import com.intellij.packageDependencies.*; +import com.intellij.profile.*; +import com.intellij.psi.*; +import org.jdom.*; +import org.jetbrains.annotations.*; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * User: anna @@ -110,8 +100,6 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage return getInspectionProfile(); } - - public InspectionProfileWrapper getProfileWrapper(){ final InspectionProfile profile = getInspectionProfile(); final String profileName = profile.getName(); @@ -151,13 +139,8 @@ public class InspectionProjectProfileManager extends DefaultProjectProfileManage public void projectOpened() { myStatusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject); - myTogglePopupHintsPanel = new TogglePopupHintsPanel(myStatusBar); - myStatusBar.addFileStatusComponent(myTogglePopupHintsPanel); - Disposer.register(myProject, new Disposable() { - public void dispose() { - myStatusBar.removeFileStatusComponent(myTogglePopupHintsPanel); - } - }); + myTogglePopupHintsPanel = new TogglePopupHintsPanel(myProject); + myStatusBar.addWidget(myTogglePopupHintsPanel, myProject); StartupManager.getInstance(myProject).registerPostStartupActivity(new Runnable() { public void run() { final Set profiles = new HashSet(); diff --git a/platform/platform-api/src/com/intellij/execution/process/ProcessTerminatedListener.java b/platform/platform-api/src/com/intellij/execution/process/ProcessTerminatedListener.java index 28f3ed9b2a5c..31cf488773e3 100644 --- a/platform/platform-api/src/com/intellij/execution/process/ProcessTerminatedListener.java +++ b/platform/platform-api/src/com/intellij/execution/process/ProcessTerminatedListener.java @@ -15,12 +15,12 @@ */ package com.intellij.execution.process; -import com.intellij.ide.IdeBundle; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.wm.WindowManager; -import org.jetbrains.annotations.NonNls; +import com.intellij.ide.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.annotations.*; /** * @author dyoma @@ -67,7 +67,7 @@ public class ProcessTerminatedListener extends ProcessAdapter { if (myProject != null) ApplicationManager.getApplication().invokeLater(new Runnable(){ public void run() { if (myProject.isDisposed()) return; - WindowManager.getInstance().getStatusBar(myProject).setInfo(message); + StatusBar.Info.set(message, myProject); } }); } diff --git a/platform/platform-api/src/com/intellij/notification/Notification.java b/platform/platform-api/src/com/intellij/notification/Notification.java index d29f3bc14029..1e0b655a107c 100644 --- a/platform/platform-api/src/com/intellij/notification/Notification.java +++ b/platform/platform-api/src/com/intellij/notification/Notification.java @@ -15,13 +15,12 @@ */ package com.intellij.notification; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.ui.popup.Balloon; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.ui.popup.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import java.lang.ref.WeakReference; +import java.lang.ref.*; /** * @author spleaner @@ -98,6 +97,13 @@ public class Notification { public void setBalloon(@Nullable final Balloon balloon) { if (balloon != null) { myBalloonRef = new WeakReference(balloon); + } else { + myBalloonRef = null; } } + + @Nullable + public Balloon getBalloon() { + return myBalloonRef == null ? null : myBalloonRef.get(); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarPatch.java b/platform/platform-api/src/com/intellij/openapi/wm/CustomStatusBarWidget.java similarity index 67% rename from platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarPatch.java rename to platform/platform-api/src/com/intellij/openapi/wm/CustomStatusBarWidget.java index a6a32add40db..7bb8b840e481 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarPatch.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/CustomStatusBarWidget.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2010 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. @@ -13,20 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.wm.impl.status; - -import com.intellij.openapi.editor.Editor; +package com.intellij.openapi.wm; import javax.swing.*; /** - * @author cdr + * User: spLeaner */ -public interface StatusBarPatch { +public interface CustomStatusBarWidget extends StatusBarWidget { + JComponent getComponent(); - //returns updated tooltip/text - String updateStatusBar(Editor selected, final JComponent componentSelected); - - void clear(); } diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBar.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBar.java index c6d6881fb471..0972e4a3f238 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/StatusBar.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/StatusBar.java @@ -15,37 +15,56 @@ */ package com.intellij.openapi.wm; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.startup.*; +import com.intellij.util.messages.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -public interface StatusBar { - /** - * Set status bar text - * @param s text to be shown in the status bar - */ - void setInfo(@Nullable String s); +/** + * @author spleaner + */ +public interface StatusBar extends StatusBarInfo { + @SuppressWarnings({"AbstractClassNeverImplemented"}) + abstract class Info implements StatusBarInfo { + public static final Topic TOPIC = Topic.create("IdeStatusBar.Text", StatusBarInfo.class); + + private Info() {} + + public static void set(@Nullable final String text, @Nullable final Project project) { + if (project != null && !project.isInitialized() && !project.isDisposed()) { + StartupManager.getInstance(project).runWhenProjectIsInitialized(new Runnable() { + public void run() { + project.getMessageBus().syncPublisher(TOPIC).setInfo(text); + } + }); + return; + } + + final MessageBus bus = project == null ? ApplicationManager.getApplication().getMessageBus() : project.getMessageBus(); + bus.syncPublisher(TOPIC).setInfo(text); + } + } + + void addWidget(@NotNull StatusBarWidget widget); + void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor); + + void addWidget(@NotNull StatusBarWidget widget, @NotNull Disposable parentDisposable); + void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor, @NotNull Disposable parentDisposable); /** - * Add arbitrary component indicating something related to status in the status bar. The component shall be - * small enough to keep visual status bar appearance metaphor. - * @param c - custom component to be added to the status bar. + * @deprecated use addWidget instead */ + @Deprecated void addCustomIndicationComponent(@NotNull JComponent c); - - /** - * Shows animated notification popup. - * @param content Content of the notification - * @param backgroundColor background color for the notification. Be sure use light colors since bright onces - * look noisy. See {@link com.intellij.ui.LightColors} for convinient colors - */ - void fireNotificationPopup(@NotNull JComponent content, final Color backgroundColor); - void removeCustomIndicationComponent(@NotNull JComponent c); - void startRefreshIndication(String tooltipText); + void removeWidget(@NotNull String id); + void updateWidget(@NotNull String id); - void stopRefreshIndication(); + void fireNotificationPopup(@NotNull JComponent content, Color backgroundColor); } diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarCustomComponentFactory.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarCustomComponentFactory.java index 662f066dae11..d61be7953026 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarCustomComponentFactory.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarCustomComponentFactory.java @@ -15,12 +15,16 @@ */ package com.intellij.openapi.wm; -import com.intellij.openapi.extensions.ExtensionPointName; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.extensions.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import java.util.EventListener; +import java.util.*; +/** + * @deprecated use StatusBarWidget instead + */ +@Deprecated public abstract class StatusBarCustomComponentFactory implements EventListener { public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.statusBarComponent"); diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java new file mode 100644 index 000000000000..61285dc62b58 --- /dev/null +++ b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarInfo.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2010 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.openapi.wm; + +import org.jetbrains.annotations.*; + +/** + * User: spLeaner + */ +public interface StatusBarInfo { + + /** + * Set status bar text + * @param s text to be shown in the status bar + */ + void setInfo(@Nullable String s); + + String getInfo(); +} diff --git a/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java new file mode 100644 index 000000000000..da7aef112d89 --- /dev/null +++ b/platform/platform-api/src/com/intellij/openapi/wm/StatusBarWidget.java @@ -0,0 +1,129 @@ +/* + * Copyright 2000-2010 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.openapi.wm; + +import com.intellij.openapi.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; + +import javax.swing.*; +import javax.swing.border.*; +import java.awt.*; +import java.awt.event.*; + +/** + * User: spLeaner + */ +public interface StatusBarWidget extends Disposable { + + enum Type { + DEFAULT, MAC + } + + interface Presentation { + @Nullable + String getTooltipText(); + + @Nullable + Consumer getClickConsumer(); + } + + interface IconPresentation extends Presentation { + @NotNull + Icon getIcon(); + } + + interface TextPresentation extends Presentation { + @NotNull + String getText(); + + @NotNull + String getMaxPossibleText(); + } + + interface MultipleTextValuesPresentation extends Presentation { + @NotNull + ListPopup getPopupStep(); + + @Nullable + String getSelectedValue(); + + @NotNull + String getMaxValue(); + } + + @NotNull + String ID(); + + @Nullable + Presentation getPresentation(@NotNull Type type); + + void install(@NotNull final StatusBar statusBar); + + class WidgetBorder implements Border { + public static final WidgetBorder INSTANCE = new WidgetBorder(); + + private static final Color TOP = new Color(227, 227, 227); + private static final Color LEFT1_FROM = new Color(161, 161, 161); + private static final Color LEFT1_TO = new Color(133, 133, 133); + private static final Color LEFT2_FROM = new Color(220, 220, 220); + private static final Color LEFT2_TO = new Color(184, 184, 184); + private static final Color LEFT1_FROM_INACTIVE = new Color(190, 190, 190); + private static final Color PIXEL = LEFT1_FROM_INACTIVE; + private static final Color LEFT1_TO_INACTIVE = new Color(180, 180, 180); + + private static final Color SEPARATOR_COLOR = new Color(215, 215, 215); + + public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { + final Graphics2D g2 = (Graphics2D)g.create(); + if (SystemInfo.isMac) { + final Window window = SwingUtilities.getWindowAncestor(c); + if (window != null && window.isActive()) { + g2.setPaint(new GradientPaint(0, 0, LEFT1_FROM, 0, height, LEFT1_TO)); + g2.drawLine(x, y, x, y + height); + + g2.setPaint(new GradientPaint(0, 0, LEFT2_FROM, 0, height, LEFT2_TO)); + g2.drawLine(x + 1, y, x + 1, y + height); + + g2.setColor(PIXEL); + g2.drawLine(x, y, x, y); + + g2.setColor(TOP); + g2.drawLine(x + 2, y, x + width - 2, y); + } + else { + g2.setPaint(new GradientPaint(0, 0, LEFT1_FROM_INACTIVE, 0, height, LEFT1_TO_INACTIVE)); + g2.drawLine(x, y, x, y + height); + } + } else { + g2.setColor(SEPARATOR_COLOR); + g2.drawLine(x, y, x, y + height); + } + + g2.dispose(); + } + + public Insets getBorderInsets(Component c) { + return new Insets(2, SystemInfo.isMac ? 4 : 4, 2, 2); + } + + public boolean isBorderOpaque() { + return false; + } + } +} diff --git a/platform/platform-api/src/com/intellij/ui/StatusBarInformer.java b/platform/platform-api/src/com/intellij/ui/StatusBarInformer.java deleted file mode 100644 index c10526fab9ae..000000000000 --- a/platform/platform-api/src/com/intellij/ui/StatusBarInformer.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2000-2009 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.ui; - -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.IdeFrame; - -import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.*; - -import org.jetbrains.annotations.Nullable; - -public class StatusBarInformer { - - private String myText; - private StatusBar myStatusBar; - private JComponent myComponent; - - public StatusBarInformer(final JComponent component, String text) { - this(component, text, null); - } - - public StatusBarInformer(final JComponent component, String text, StatusBar statusBar) { - myText = text; - myStatusBar = statusBar; - myComponent = component; - myComponent.addMouseListener(new MouseAdapter() { - public void mouseEntered(final MouseEvent e) { - final StatusBar bar = getStatusBar(); - final String text = getText(); - if (bar != null) { - bar.setInfo(text); - } - myComponent.setToolTipText(text); - } - - public void mouseExited(final MouseEvent e) { - final StatusBar bar = getStatusBar(); - if (bar != null) { - bar.setInfo(null); - } - myComponent.setToolTipText(null); - } - }); - } - - @Nullable - protected String getText() { - return myText; - } - - @Nullable - protected StatusBar getStatusBar() { - if (myStatusBar != null) return myStatusBar; - final Window window = SwingUtilities.getWindowAncestor(myComponent); - if (window instanceof IdeFrame) { - return ((IdeFrame)window).getStatusBar(); - } - return null; - } -} diff --git a/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java b/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java index b1c4a46625ba..9eb238572450 100644 --- a/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java +++ b/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java @@ -15,23 +15,18 @@ */ package com.intellij.ui.components.labels; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.ui.UI; -import com.intellij.util.ui.UIUtil; +import com.intellij.openapi.application.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.util.ui.*; import javax.swing.*; -import javax.swing.border.Border; +import javax.swing.border.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.util.HashSet; -import java.util.Set; +import java.awt.event.*; +import java.util.*; /** * @author kir @@ -246,14 +241,11 @@ public class LinkLabel extends JLabel { setActive(false); } - private void setStatusBarText(String statusBarText) { + private static void setStatusBarText(String statusBarText) { if (ApplicationManager.getApplication() == null) return; // makes this component work in UIDesigner preview. final Project[] projects = ProjectManager.getInstance().getOpenProjects(); for (Project project : projects) { - final StatusBar bar = WindowManager.getInstance().getStatusBar(project); - if (bar != null) { - bar.setInfo(statusBarText); - } + StatusBar.Info.set(statusBarText, project); } } diff --git a/platform/platform-api/src/com/intellij/util/ui/AnimatedIcon.java b/platform/platform-api/src/com/intellij/util/ui/AnimatedIcon.java index 72144f1242a1..2fba827b9995 100644 --- a/platform/platform-api/src/com/intellij/util/ui/AnimatedIcon.java +++ b/platform/platform-api/src/com/intellij/util/ui/AnimatedIcon.java @@ -16,7 +16,7 @@ package com.intellij.util.ui; -import com.intellij.openapi.Disposable; +import com.intellij.openapi.*; import javax.swing.*; import java.awt.*; @@ -186,6 +186,9 @@ public abstract class AnimatedIcon extends JComponent implements Disposable { return myPaintPassive ? myPassiveIcon : myEmptyPassiveIcon; } + public boolean isRunning() { + return myAnimator.isRunning(); + } public boolean isAnimated() { return true; diff --git a/platform/platform-impl/src/com/intellij/diagnostic/IdeMessagePanel.java b/platform/platform-impl/src/com/intellij/diagnostic/IdeMessagePanel.java index d833ef360c87..fb63a9a7f551 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/IdeMessagePanel.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/IdeMessagePanel.java @@ -15,23 +15,20 @@ */ package com.intellij.diagnostic; -import com.intellij.concurrency.JobScheduler; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.wm.impl.status.StatusBarPatch; -import com.intellij.ui.LightColors; -import com.intellij.ui.popup.NotificationPopup; +import com.intellij.concurrency.*; +import com.intellij.ide.util.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.ui.popup.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.concurrent.TimeUnit; +import java.awt.event.*; +import java.util.concurrent.*; -public class IdeMessagePanel extends JPanel implements MessagePoolListener, StatusBarPatch { +public class IdeMessagePanel extends JPanel implements MessagePoolListener, CustomStatusBarWidget { private final IconPane myIdeFatal; private final IconPane[] myIcons; @@ -42,11 +39,12 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat private boolean myOpeningInProgress; private final MessagePool myMessagePool; private boolean myNotificationPopupAlreadyShown = false; - private final Icon myIcon = IconLoader.getIcon("/general/ideFatalError.png"); + private final Icon myIcon = IconLoader.getIcon("/ide/fatalError.png"); + private final Icon myEmptyIcon = IconLoader.getIcon("/ide/emptyFatalError.png"); public IdeMessagePanel(MessagePool messagePool) { super(new BorderLayout()); - myIdeFatal = new IconPane(myIcon, + myIdeFatal = new IconPane(myIcon, myEmptyIcon, DiagnosticBundle.message("error.notification.empty.text"), new ActionListener() { public void actionPerformed(ActionEvent e) { openFatals(); @@ -63,20 +61,29 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat JobScheduler.getScheduler().scheduleAtFixedRate(new Blinker(), (long)1, (long)1, TimeUnit.SECONDS); updateFatalErrorsIcon(); + + setOpaque(false); + } + + @NotNull + public String ID() { + return "FatalError"; + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void dispose() { + } + + public void install(@NotNull StatusBar statusBar) { } public JComponent getComponent() { return this; } - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - return null; - } - - public void clear() { - - } - private void openFatals() { if (myDialog != null) return; if (myOpeningInProgress) return; @@ -222,12 +229,14 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat private boolean myIsActive; private final ActionListener myListener; - public IconPane(Icon aIcon, String aEmptyText, ActionListener aListener) { - myIcon = new IconWrapper(aIcon); + public IconPane(Icon aIcon, Icon offIcon, String aEmptyText, ActionListener aListener) { + myIcon = new IconWrapper(aIcon, offIcon); myEmptyText = aEmptyText; myListener = aListener; setIcon(myIcon); + setBorder(BorderFactory.createEmptyBorder(0, 1, 0, 1)); + addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (myIsActive) { @@ -268,9 +277,11 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat private final Icon myIcon; private boolean myEnabled; private boolean myShouldPaint = true; + private Icon myOffIcon; - public IconWrapper(Icon aIcon) { + public IconWrapper(Icon aIcon, Icon offIcon) { myIcon = aIcon; + myOffIcon = offIcon; } public void setIconPainted(boolean aPainted) { @@ -288,6 +299,8 @@ public class IdeMessagePanel extends JPanel implements MessagePoolListener, Stat public void paintIcon(Component c, Graphics g, int x, int y) { if (myEnabled && myShouldPaint) { myIcon.paintIcon(c, g, x, y); + } else if (myOffIcon != null) { + myOffIcon.paintIcon(c, g, x, y); } } diff --git a/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java b/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java index ea6282d016e4..d0a2f8b9b8c1 100644 --- a/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java @@ -15,19 +15,18 @@ */ package com.intellij.ide.util; -import com.intellij.ide.IdeBundle; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.LogicalPosition; -import com.intellij.openapi.editor.ScrollType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; +import com.intellij.ide.*; +import com.intellij.openapi.application.ex.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; import javax.swing.*; import java.awt.*; public class GotoLineNumberDialog extends DialogWrapper { - private JLabel myLabel; private JTextField myField; + private JTextField myOffsetField; private final Editor myEditor; public GotoLineNumberDialog(Project project, Editor editor){ @@ -40,6 +39,22 @@ public class GotoLineNumberDialog extends DialogWrapper { protected void doOKAction(){ final LogicalPosition currentPosition = myEditor.getCaretModel().getLogicalPosition(); int lineNumber = getLineNumber(currentPosition.line + 1); + if (isInternal() && myOffsetField.getText().length() > 0) { + try { + final int offset = Integer.parseInt(myOffsetField.getText()); + if (offset < myEditor.getDocument().getTextLength()) { + myEditor.getCaretModel().moveToOffset(offset); + myEditor.getScrollingModel().scrollToCaret(ScrollType.CENTER); + myEditor.getSelectionModel().removeSelection(); + super.doOKAction(); + } + return; + } + catch (NumberFormatException e) { + return; + } + } + if (lineNumber <= 0) return; int columnNumber = getColumnNumber(currentPosition.column); @@ -76,6 +91,10 @@ public class GotoLineNumberDialog extends DialogWrapper { } } + private static boolean isInternal() { + return ApplicationManagerEx.getApplicationEx().isInternal(); + } + public JComponent getPreferredFocusedComponent() { return myField; } @@ -108,8 +127,8 @@ public class GotoLineNumberDialog extends DialogWrapper { gbConstraints.weightx = 0; gbConstraints.weighty = 1; gbConstraints.anchor = GridBagConstraints.EAST; - myLabel = new JLabel(IdeBundle.message("editbox.line.number")); - panel.add(myLabel, gbConstraints); + JLabel label = new JLabel(IdeBundle.message("editbox.line.number")); + panel.add(label, gbConstraints); gbConstraints.fill = GridBagConstraints.BOTH; gbConstraints.weightx = 1; @@ -117,6 +136,20 @@ public class GotoLineNumberDialog extends DialogWrapper { panel.add(myField, gbConstraints); myField.setToolTipText(IdeBundle.message("tooltip.syntax.linenumber.columnnumber")); + if (isInternal()) { + gbConstraints.gridy = 1; + gbConstraints.weightx = 0; + gbConstraints.weighty = 1; + gbConstraints.anchor = GridBagConstraints.EAST; + final JLabel offsetLabel = new JLabel("Offset:"); + panel.add(offsetLabel, gbConstraints); + + gbConstraints.fill = GridBagConstraints.BOTH; + gbConstraints.weightx = 1; + myOffsetField = new MyTextField(); + panel.add(myOffsetField, gbConstraints); + } + return panel; } } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java b/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java index b217777b66ce..1b53b9dda8f9 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/IdeNotificationArea.java @@ -15,50 +15,164 @@ */ package com.intellij.notification.impl; -import com.intellij.ide.DataManager; -import com.intellij.notification.impl.ui.NotificationComponent; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.impl.status.StatusBarImpl; -import com.intellij.openapi.wm.impl.status.StatusBarPatch; -import com.intellij.openapi.wm.impl.status.StatusBarTooltipper; -import org.jetbrains.annotations.Nullable; +import com.intellij.ide.*; +import com.intellij.notification.*; +import com.intellij.notification.impl.ui.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.lang.ref.*; /** * @author spleaner */ -public class IdeNotificationArea implements StatusBarPatch { - private final NotificationComponent myNotificationComponent; +public class IdeNotificationArea implements StatusBarWidget, StatusBarWidget.IconPresentation, NotificationModelListener { + private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/notifications.png"); + private static final Icon ERROR_ICON = IconLoader.getIcon("/ide/error_notifications.png"); + private static final Icon WARNING_ICON = IconLoader.getIcon("/ide/warning_notifications.png"); + private static final Icon INFO_ICON = IconLoader.getIcon("/ide/info_notifications.png"); - public IdeNotificationArea(final StatusBarImpl statusBar) { - myNotificationComponent = new NotificationComponent(this); + private WeakReference myPopupRef; + private Icon myCurrentIcon = EMPTY_ICON; + private StatusBar myStatusBar; - StatusBarTooltipper.install(this, statusBar); + public IdeNotificationArea() { } - public JComponent getComponent() { - return myNotificationComponent; + public Presentation getPresentation(@NotNull Type type) { + return this; + } + + public void dispose() { + getManager().removeListener(this); // clean up + cancelPopup(); + } + + public void install(@NotNull StatusBar statusBar) { + myStatusBar = statusBar; + getManager().addListener(this); + } + + private void cancelPopup() { + if (myPopupRef != null) { + final JBPopup popup = myPopupRef.get(); + if (popup != null) { + popup.cancel(); + } + + myPopupRef = null; + } } @Nullable - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { + private Project getProject() { + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar)); + } + + public Consumer getClickConsumer() { + return new Consumer() { + public void consume(MouseEvent mouseEvent) { + toggleList(); + } + }; + } + + private static NotificationsManagerImpl getManager() { + return NotificationsManagerImpl.getNotificationsManagerImpl(); + } + + private void toggleList() { + JBPopup popup = null; + if (myPopupRef != null) { + popup = myPopupRef.get(); + myPopupRef = null; + } + + if (popup != null && popup.isVisible()) { + popup.cancel(); + } else { + myPopupRef = new WeakReference(NotificationsListPanel.show(getProject(), (JComponent) myStatusBar)); + } + } + + @NotNull + public Icon getIcon() { + return myCurrentIcon; + } + + public String getTooltipText() { final NotificationsManagerImpl manager = NotificationsManagerImpl.getNotificationsManagerImpl(); if (manager.hasNotifications(getProject())) { final int count = manager.count(getProject()); return String.format("%s notification%s pending", count, count == 1 ? "" : "s"); } - return null; + return "No new notifications"; } - public void clear() { + @NotNull + public String ID() { + return "Notifications"; } - @Nullable - public Project getProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(myNotificationComponent)); + public void updateStatus() { + final NotificationsManagerImpl manager = getManager(); + + Icon icon = EMPTY_ICON; + final NotificationType maximumType = manager.getMaximumType(getProject()); + if (maximumType != null) { + switch (maximumType) { + case WARNING: + icon = WARNING_ICON; + break; + case ERROR: + icon = ERROR_ICON; + break; + case INFORMATION: + default: + icon = INFO_ICON; + break; + } + } + + myCurrentIcon = icon; + if (manager.count(getProject()) == 0) { + cancelPopup(); + } + + myStatusBar.updateWidget(ID()); + } + + public void notificationsAdded(@NotNull final Notification... notifications) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + updateStatus(); + } + }); + } + + public void notificationsRead(@NotNull Notification... notification) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + updateStatus(); + } + }); + } + + @SuppressWarnings({"SSBasedInspection"}) + public void notificationsRemoved(@NotNull final Notification... notifications) { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + updateStatus(); + } + }); } } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java index f7f4f6bbbcf3..1cdbd388400c 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java @@ -16,33 +16,24 @@ package com.intellij.notification.impl; import com.intellij.notification.*; -import com.intellij.notification.impl.ui.NotificationsUtil; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ApplicationComponent; -import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.Balloon; -import com.intellij.openapi.ui.popup.BalloonBuilder; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.impl.IdeFrameImpl; -import com.intellij.ui.BalloonLayout; -import com.intellij.ui.SystemNotifications; -import com.intellij.ui.components.panels.NonOpaquePanel; -import com.intellij.util.ArrayUtil; -import com.intellij.util.PairFunction; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.notification.impl.ui.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.impl.*; +import com.intellij.ui.*; +import com.intellij.ui.components.panels.*; +import com.intellij.util.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.border.EmptyBorder; -import javax.swing.event.HyperlinkListener; +import javax.swing.border.*; +import javax.swing.event.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Collection; +import java.util.*; import java.util.List; /** @@ -193,6 +184,13 @@ public class NotificationsManagerImpl extends NotificationsManager implements No } final Balloon balloon = builder.createBalloon(); + balloon.addListener(new JBPopupAdapter() { + @Override + public void onClosed(LightweightWindowEvent event) { + notification.setBalloon(null); + } + }); + notification.setBalloon(balloon); final Runnable show = new Runnable() { @@ -209,13 +207,6 @@ public class NotificationsManagerImpl extends NotificationsManager implements No if (window instanceof IdeFrameImpl) { final BalloonLayout balloonLayout = ((IdeFrameImpl)window).getBalloonLayout(); balloonLayout.add(balloon); - if (project != null) { - Disposer.register(project, new Disposable() { - public void dispose() { - balloon.hide(); - } - }); - } } } }; diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ProjectNotificationsComponent.java b/platform/platform-impl/src/com/intellij/notification/impl/ProjectNotificationsComponent.java index 2b9270b43267..2920f3cdb7f0 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/ProjectNotificationsComponent.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/ProjectNotificationsComponent.java @@ -15,16 +15,16 @@ */ package com.intellij.notification.impl; -import com.intellij.notification.Notifications; -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationDisplayType; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.Disposable; -import org.jetbrains.annotations.NotNull; +import com.intellij.notification.*; +import com.intellij.openapi.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import org.jetbrains.annotations.*; + +import java.util.*; /** * @author spleaner @@ -58,6 +58,11 @@ public class ProjectNotificationsComponent implements Notifications, ProjectComp } public void projectClosed() { + final Collection collection = NotificationsManagerImpl.getNotificationsManagerImpl().getByType(null, myProject); + for (final Notification notification : collection) { + final Balloon balloon = notification.getBalloon(); + if (balloon != null) balloon.hide(); + } } private static boolean isDummyEnvironment() { diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java deleted file mode 100644 index da70c983421a..000000000000 --- a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationComponent.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright 2000-2009 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.notification.impl.ui; - -import com.intellij.concurrency.JobScheduler; -import com.intellij.notification.Notification; -import com.intellij.notification.NotificationType; -import com.intellij.notification.impl.*; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopup; -import com.intellij.openapi.util.IconLoader; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.lang.ref.WeakReference; -import java.util.concurrent.TimeUnit; - -/** - * @author spleaner - */ -public class NotificationComponent extends JLabel implements NotificationModelListener { - private static final Icon EMPTY_ICON = IconLoader.getIcon("/ide/notifications.png"); - private static final Icon READ_ICON = IconLoader.getIcon("/ide/read_notifications.png"); - private static final Icon ERROR_ICON = IconLoader.getIcon("/ide/error_notifications.png"); - private static final Icon WARNING_ICON = IconLoader.getIcon("/ide/warning_notifications.png"); - private static final Icon INFO_ICON = IconLoader.getIcon("/ide/info_notifications.png"); - - private WeakReference myPopupRef; - - private BlinkIconWrapper myCurrentIcon; - private final boolean myBlinkIcon = true; - private final IdeNotificationArea myArea; - - public NotificationComponent(@NotNull final IdeNotificationArea area) { - myArea = area; - - addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(final MouseEvent e) { - if (UIUtil.isActionClick(e)) { - toggleList(); - } - } - }); - - myCurrentIcon = new BlinkIconWrapper(EMPTY_ICON, false); - setIcon(myCurrentIcon); - - JobScheduler.getScheduler().scheduleAtFixedRate(new IconBlinker(), (long)1, (long)1, TimeUnit.SECONDS); - } - - private static NotificationsManagerImpl getManager() { - return NotificationsManagerImpl.getNotificationsManagerImpl(); - } - - @Override - public void removeNotify() { - getManager().removeListener(this); // clean up - - cancelPopup(); - super.removeNotify(); - } - - private void cancelPopup() { - if (myPopupRef != null) { - final JBPopup popup = myPopupRef.get(); - if (popup != null) { - popup.cancel(); - } - - myPopupRef = null; - } - } - - public void addNotify() { - super.addNotify(); - - getManager().addListener(this); - } - - private void toggleList() { - JBPopup popup = null; - if (myPopupRef != null) { - popup = myPopupRef.get(); - myPopupRef = null; - } - - if (popup != null && popup.isVisible()) { - popup.cancel(); - } else { - myPopupRef = new WeakReference(NotificationsListPanel.show(getProject(), this)); - } - } - - public void updateStatus() { - final NotificationsManagerImpl manager = getManager(); - - Icon icon = EMPTY_ICON; - final NotificationType maximumType = manager.getMaximumType(getProject()); - if (maximumType != null) { - switch (maximumType) { - case WARNING: - icon = WARNING_ICON; - break; - case ERROR: - icon = ERROR_ICON; - break; - case INFORMATION: - default: - icon = INFO_ICON; - break; - } - } - - myCurrentIcon = new BlinkIconWrapper(icon, false); - setIcon(myCurrentIcon); - - if (manager.count(getProject()) == 0) { - cancelPopup(); - } - - repaint(); - } - - @Nullable - public Project getProject() { - return myArea.getProject(); - } - - @SuppressWarnings({"SSBasedInspection"}) - public void notificationsAdded(@NotNull final Notification... notifications) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - updateStatus(); - } - }); - } - - public void notificationsRead(@NotNull Notification... notification) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - updateStatus(); - } - }); - } - - @SuppressWarnings({"SSBasedInspection"}) - public void notificationsRemoved(@NotNull final Notification... notifications) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - updateStatus(); - } - }); - } - - private void blinkIcon(boolean visible) { - myCurrentIcon.setPaint(visible); - } - - private class IconBlinker implements Runnable { - private boolean myVisible; - - public void run() { - myVisible = !myVisible; - blinkIcon(myVisible); - } - } - - private class BlinkIconWrapper implements Icon { - private final Icon myOriginal; - private boolean myPaint; - private final boolean myBlink; - private BufferedImage myGrayscaleImage; - - private BlinkIconWrapper(@NotNull final Icon original, final boolean blink) { - myOriginal = original; - myBlink = blink; - } - - public void setPaint(final boolean paint) { - if (paint != myPaint) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - repaint(); - } - }); - } - - myPaint = paint; - } - - public void paintIcon(Component c, Graphics g, int x, int y) { - if (!myBlinkIcon) { - if (myGrayscaleImage == null) { - myGrayscaleImage = new BufferedImage(myOriginal.getIconWidth(), myOriginal.getIconHeight(), BufferedImage.TYPE_BYTE_GRAY); - final Graphics2D gi = myGrayscaleImage.createGraphics(); - - gi.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.2f)); - - myOriginal.paintIcon(c, gi, 0, 0); - gi.dispose(); - } - - g.drawImage(myGrayscaleImage, x, y, null); - } - else if (!myBlink || !myPaint) { - myOriginal.paintIcon(c, g, x, y); - } - } - - public int getIconWidth() { - return myOriginal.getIconWidth(); - } - - public int getIconHeight() { - return myOriginal.getIconHeight(); - } - } -} diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 72699885e6f7..ae9c89fc0cef 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -15,68 +15,48 @@ */ package com.intellij.openapi.fileEditor.impl; -import com.intellij.AppTopics; -import com.intellij.ProjectTopics; -import com.intellij.ide.IdeBundle; -import com.intellij.ide.plugins.PluginManager; -import com.intellij.ide.ui.UISettings; -import com.intellij.ide.ui.UISettingsListener; -import com.intellij.injected.editor.VirtualFileWindow; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.application.ex.ApplicationManagerEx; -import com.intellij.openapi.application.impl.LaterInvocator; +import com.intellij.*; +import com.intellij.ide.*; +import com.intellij.ide.plugins.*; +import com.intellij.ide.ui.*; +import com.intellij.injected.editor.*; +import com.intellij.openapi.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ex.*; +import com.intellij.openapi.application.impl.*; import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.extensions.*; import com.intellij.openapi.fileEditor.*; -import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; -import com.intellij.openapi.fileEditor.ex.FileEditorProviderManager; -import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; -import com.intellij.openapi.fileEditor.impl.text.TextEditorImpl; -import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; -import com.intellij.openapi.fileTypes.FileTypeEvent; -import com.intellij.openapi.fileTypes.FileTypeListener; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.DumbAwareRunnable; -import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.impl.ProjectImpl; -import com.intellij.openapi.roots.ModuleRootEvent; -import com.intellij.openapi.roots.ModuleRootListener; -import com.intellij.openapi.startup.StartupManager; +import com.intellij.openapi.fileEditor.FileEditorProvider; +import com.intellij.openapi.fileEditor.ex.*; +import com.intellij.openapi.fileEditor.impl.text.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.project.impl.*; +import com.intellij.openapi.roots.*; +import com.intellij.openapi.startup.*; import com.intellij.openapi.util.*; -import com.intellij.openapi.vcs.FileStatus; -import com.intellij.openapi.vcs.FileStatusListener; -import com.intellij.openapi.vcs.FileStatusManager; +import com.intellij.openapi.vcs.*; import com.intellij.openapi.vfs.*; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.ex.WindowManagerEx; -import com.intellij.openapi.wm.impl.FrameTitleBuilder; -import com.intellij.openapi.wm.impl.IdeFrameImpl; -import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.messages.MessageBusConnection; -import com.intellij.util.messages.impl.MessageListenerList; -import com.intellij.util.ui.update.MergingUpdateQueue; -import com.intellij.util.ui.update.Update; -import org.jdom.Element; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.openapi.wm.impl.*; +import com.intellij.util.containers.*; +import com.intellij.util.messages.*; +import com.intellij.util.messages.impl.*; +import com.intellij.util.ui.update.*; +import org.jdom.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; +import java.beans.*; +import java.io.*; +import java.util.*; import java.util.List; /** @@ -1177,6 +1157,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec } } else if (VirtualFile.PROP_WRITABLE.equals(e.getPropertyName()) || VirtualFile.PROP_ENCODING.equals(e.getPropertyName())) { + // TODO: message bus? updateIconAndStatusbar(e); } } @@ -1189,7 +1170,7 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec if (file.equals(getSelectedFiles()[0])) { // update "write" status final StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject); assert statusBar != null; - statusBar.update(getSelectedTextEditor()); + statusBar.updateWidgets(); } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorComponent.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorComponent.java index 09f62b91eb21..24a42e3b6fd4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorComponent.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorComponent.java @@ -15,44 +15,32 @@ */ package com.intellij.openapi.fileEditor.impl.text; -import com.intellij.AppTopics; -import com.intellij.ide.ui.customization.CustomActionsSchema; +import com.intellij.*; +import com.intellij.ide.ui.customization.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.colors.*; import com.intellij.openapi.editor.event.*; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.editor.ex.EditorMarkupModel; -import com.intellij.openapi.editor.highlighter.EditorHighlighter; -import com.intellij.openapi.editor.highlighter.EditorHighlighterFactory; -import com.intellij.openapi.editor.impl.EditorImpl; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.impl.FileEditorManagerImpl; -import com.intellij.openapi.fileTypes.FileTypeEvent; -import com.intellij.openapi.fileTypes.FileTypeListener; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileAdapter; -import com.intellij.openapi.vfs.VirtualFileEvent; -import com.intellij.openapi.vfs.VirtualFilePropertyEvent; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.util.EditorPopupHandler; -import com.intellij.util.messages.MessageBusConnection; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.editor.highlighter.*; +import com.intellij.openapi.editor.impl.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.impl.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.util.*; +import com.intellij.util.messages.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; +import java.awt.event.*; +import java.beans.*; /** * @author Anton Katilin @@ -151,7 +139,7 @@ class TextEditorComponent extends JPanel implements DataProvider{ void deselectNotify(){ StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject); if (statusBar == null) return; - statusBar.clear(); + //statusBar.clear(); } private static void assertThread(){ @@ -261,7 +249,7 @@ class TextEditorComponent extends JPanel implements DataProvider{ private void updateStatusBar(){ final StatusBarEx statusBar = (StatusBarEx)WindowManager.getInstance().getStatusBar(myProject); if (statusBar == null) return; - statusBar.update(getEditor()); + statusBar.updateWidgets(); // TODO: do we need this?! } @Nullable diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java index 825781475128..7f5af334afcb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/IdeKeyEventDispatcher.java @@ -15,51 +15,34 @@ */ package com.intellij.openapi.keymap.impl; -import com.intellij.ide.DataManager; -import com.intellij.ide.IdeEventQueue; -import com.intellij.ide.impl.DataManagerImpl; -import com.intellij.openapi.Disposable; +import com.intellij.ide.*; +import com.intellij.ide.impl.*; +import com.intellij.openapi.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.actionSystem.ex.ActionManagerEx; -import com.intellij.openapi.actionSystem.ex.ActionUtil; -import com.intellij.openapi.actionSystem.impl.PresentationFactory; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.keymap.KeyMapBundle; -import com.intellij.openapi.keymap.Keymap; -import com.intellij.openapi.keymap.KeymapManager; -import com.intellij.openapi.keymap.KeymapUtil; -import com.intellij.openapi.keymap.impl.keyGestures.KeyboardGestureProcessor; -import com.intellij.openapi.keymap.impl.ui.ShortcutTextField; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopup; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.impl.FloatingDecorator; -import com.intellij.openapi.wm.impl.IdeFrameImpl; -import com.intellij.openapi.wm.impl.IdeGlassPaneEx; -import com.intellij.ui.popup.AbstractPopup; -import com.intellij.util.Alarm; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.actionSystem.ex.*; +import com.intellij.openapi.actionSystem.impl.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.keymap.*; +import com.intellij.openapi.keymap.impl.keyGestures.*; +import com.intellij.openapi.keymap.impl.ui.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.registry.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.openapi.wm.impl.*; +import com.intellij.ui.popup.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.plaf.basic.ComboPopup; +import javax.swing.plaf.basic.*; import java.awt.*; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.im.InputContext; -import java.lang.reflect.Method; -import java.util.ArrayList; +import java.awt.event.*; +import java.awt.im.*; +import java.lang.reflect.*; +import java.util.*; import java.util.List; /** @@ -99,10 +82,7 @@ public final class IdeKeyEventDispatcher implements Disposable { if (myContext != null) { Project project = PlatformDataKeys.PROJECT.getData(myContext.getDataContext()); if (project != null) { - StatusBar status = WindowManager.getInstance().getStatusBar(project); - if (status != null) { - status.setInfo(null); - } + StatusBar.Info.set(null, project); } } } @@ -291,10 +271,7 @@ public final class IdeKeyEventDispatcher implements Disposable { myFirstKeyStroke=null; setState(KeyState.STATE_INIT); Project project = PlatformDataKeys.PROJECT.getData(myContext.getDataContext()); - StatusBar bar = WindowManager.getInstance().getStatusBar(project); - if (bar != null) { - bar.setInfo(null); - } + StatusBar.Info.set(null, project); return false; } @@ -418,10 +395,7 @@ public final class IdeKeyEventDispatcher implements Disposable { message.append(")"); } - StatusBar bar = WindowManager.getInstance().getStatusBar(project); - if (bar != null) { - bar.setInfo(message.toString()); - } + StatusBar.Info.set(message.toString(), project); mySecondStrokeTimeout.cancelAllRequests(); mySecondStrokeTimeout.addRequest(mySecondStrokeTimeoutRunnable, Registry.intValue("actionSystem.secondKeystrokeTimout")); diff --git a/platform/platform-impl/src/com/intellij/openapi/progress/impl/BackgroundableProcessIndicator.java b/platform/platform-impl/src/com/intellij/openapi/progress/impl/BackgroundableProcessIndicator.java index 5f34bcceca5a..6443fa76b7a0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/progress/impl/BackgroundableProcessIndicator.java +++ b/platform/platform-impl/src/com/intellij/openapi/progress/impl/BackgroundableProcessIndicator.java @@ -22,18 +22,12 @@ */ package com.intellij.openapi.progress.impl; -import com.intellij.openapi.progress.PerformInBackgroundOption; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.progress.util.ProgressWindow; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.progress.util.*; import com.intellij.openapi.project.*; -import com.intellij.openapi.wm.IdeFrame; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.ex.WindowManagerEx; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import org.jetbrains.annotations.*; public class BackgroundableProcessIndicator extends ProgressWindow { protected StatusBarEx myStatusBar; @@ -140,7 +134,7 @@ public class BackgroundableProcessIndicator extends ProgressWindow { } private void doBackground() { - myStatusBar.add(this, myInfo); + myStatusBar.addProgress(this, myInfo); } public void dispose() { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshProgress.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshProgress.java index 6216183514e8..83868e75c1b9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshProgress.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshProgress.java @@ -19,12 +19,11 @@ */ package com.intellij.openapi.vfs.newvfs; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.progress.util.ProgressIndicatorBase; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.wm.ex.StatusBarEx; +import com.intellij.openapi.application.*; +import com.intellij.openapi.progress.util.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; import javax.swing.*; @@ -50,7 +49,7 @@ public class RefreshProgress extends ProgressIndicatorBase { } for (Project project : projects) { - final StatusBarEx statusBar = (StatusBarEx)windowManager.getStatusBar(project); + final StatusBarEx statusBar = (StatusBarEx) windowManager.getStatusBar(project); if (statusBar == null) continue; statusBar.startRefreshIndication(myMessage); @@ -75,7 +74,7 @@ public class RefreshProgress extends ProgressIndicatorBase { } for (Project project : projects) { - final StatusBarEx statusBar = (StatusBarEx)windowManager.getStatusBar(project); + final StatusBarEx statusBar = (StatusBarEx) windowManager.getStatusBar(project); if (statusBar == null) continue; statusBar.stopRefreshIndication(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java b/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java index 097c5a1d1255..993a03137b96 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/ex/StatusBarEx.java @@ -15,43 +15,31 @@ */ package com.intellij.openapi.wm.ex; -import com.intellij.notification.impl.IdeNotificationArea; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.popup.BalloonHandler; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.impl.status.StatusBarPatch; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.event.HyperlinkListener; +import javax.swing.event.*; -public interface StatusBarEx extends StatusBar { - String getInfo(); +/** + * @author spleaner + */ +public interface StatusBarEx extends StatusBar, Disposable { + void startRefreshIndication(String tooltipText); + void stopRefreshIndication(); - void clear(); + BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody); + BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody, @Nullable Icon icon, @Nullable HyperlinkListener listener); - void addFileStatusComponent(StatusBarPatch component); + void addProgress(ProgressIndicatorEx indicator, TaskInfo info); - void removeFileStatusComponent(StatusBarPatch component); - - void cleanupCustomComponents(); - - void add(ProgressIndicatorEx indicator, TaskInfo info); + void updateWidgets(); boolean isProcessWindowOpen(); void setProcessWindowOpen(boolean open); - - BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody); - - BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody, @Nullable Icon icon, @Nullable HyperlinkListener listener); - - void update(Editor editor); - - void dispose(); - - IdeNotificationArea getNotificationArea(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java index d117e027b65d..caef891f1da1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java @@ -15,40 +15,28 @@ */ package com.intellij.openapi.wm.impl; -import com.intellij.ide.AppLifecycleListener; -import com.intellij.ide.DataManager; +import com.intellij.ide.*; import com.intellij.ide.impl.ProjectUtil; -import com.intellij.ide.ui.UISettings; -import com.intellij.openapi.MnemonicHelper; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.DataProvider; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationInfo; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.application.ex.ApplicationInfoEx; -import com.intellij.openapi.application.ex.ApplicationManagerEx; -import com.intellij.openapi.keymap.KeymapManager; -import com.intellij.openapi.project.DumbAwareRunnable; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.util.registry.Registry; -import com.intellij.openapi.wm.IdeFrame; -import com.intellij.openapi.wm.ex.LayoutFocusTraversalPolicyExt; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.ui.AppUIUtil; -import com.intellij.ui.BalloonLayout; -import com.intellij.ui.FocusTrackback; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.ide.ui.*; +import com.intellij.openapi.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ex.*; +import com.intellij.openapi.keymap.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.registry.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.openapi.wm.impl.status.*; +import com.intellij.ui.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.File; +import java.awt.event.*; +import java.io.*; /** * @author Anton Katilin @@ -168,7 +156,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider { ); } - public StatusBarEx getStatusBar() { + public StatusBar getStatusBar() { return ((IdeRootPane)getRootPane()).getStatusBar(); } @@ -226,12 +214,14 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider { } public void setProject(final Project project) { - getStatusBar().cleanupCustomComponents(); myProject = project; if (project != null) { if (myRootPane != null) { myRootPane.installNorthComponents(project); } + + project.getMessageBus().connect().subscribe(StatusBar.Info.TOPIC, myRootPane.getStatusBar()); + installDefaultProjectStatusBarWidgets(myProject); } else { if (myRootPane != null) { //already disposed @@ -244,6 +234,37 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider { } } + private void installDefaultProjectStatusBarWidgets(@NotNull final Project project) { + final StatusBar statusBar = getStatusBar(); + + final PositionPanel positionPanel = new PositionPanel(project); + statusBar.addWidget(positionPanel, "before Notifications"); + + final EncodingPanel encodingPanel = new EncodingPanel(project); + statusBar.addWidget(encodingPanel, "after Position"); + + final ToggleReadOnlyAttributePanel readOnlyAttributePanel = new ToggleReadOnlyAttributePanel(); + + InsertOverwritePanel insertOverwritePanel = null; + if (!SystemInfo.isMac) { + insertOverwritePanel = new InsertOverwritePanel(); + statusBar.addWidget(insertOverwritePanel, "after Encoding"); + statusBar.addWidget(readOnlyAttributePanel, "after InsertOverwrite"); + } else { + statusBar.addWidget(readOnlyAttributePanel, "after Encoding"); + } + + final InsertOverwritePanel finalInsertOverwritePanel = insertOverwritePanel; + Disposer.register(project, new Disposable() { + public void dispose() { + statusBar.removeWidget(encodingPanel.ID()); + statusBar.removeWidget(positionPanel.ID()); + statusBar.removeWidget(readOnlyAttributePanel.ID()); + if (finalInsertOverwritePanel != null) statusBar.removeWidget(finalInsertOverwritePanel.ID()); + } + }); + } + public Project getProject() { return myProject; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java index e65e507ecda2..7c99d15a5946 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeRootPane.java @@ -15,34 +15,29 @@ */ package com.intellij.openapi.wm.impl; -import com.intellij.ide.AppLifecycleListener; -import com.intellij.ide.DataManager; -import com.intellij.ide.actions.CustomizeUIAction; -import com.intellij.ide.actions.ViewToolbarAction; -import com.intellij.ide.plugins.PluginManager; -import com.intellij.ide.ui.UISettings; -import com.intellij.ide.ui.UISettingsListener; -import com.intellij.ide.ui.customization.CustomActionsSchema; +import com.intellij.diagnostic.*; +import com.intellij.ide.*; +import com.intellij.ide.actions.*; +import com.intellij.ide.plugins.*; +import com.intellij.ide.ui.*; +import com.intellij.ide.ui.customization.*; +import com.intellij.notification.impl.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.keymap.KeymapManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.wm.StatusBarCustomComponentFactory; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.impl.status.StatusBarImpl; -import com.intellij.openapi.wm.impl.welcomeScreen.WelcomeScreen; -import com.intellij.ui.PopupHandler; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.extensions.*; +import com.intellij.openapi.keymap.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.impl.status.*; +import com.intellij.openapi.wm.impl.welcomeScreen.*; +import com.intellij.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Arrays; +import java.util.*; import java.util.List; /** @@ -51,14 +46,14 @@ import java.util.List; */ // Made public and non-final for Fabrique -public class IdeRootPane extends JRootPane{ +public class IdeRootPane extends JRootPane implements UISettingsListener { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.IdeRootPane"); /** * Toolbar and status bar. */ private JComponent myToolbar; - private StatusBarImpl myStatusBar; + private IdeStatusBarImpl myStatusBar; private final Box myNorthPanel = Box.createVerticalBox(); private final List myNorthComponents = new ArrayList(); @@ -77,6 +72,8 @@ public class IdeRootPane extends JRootPane{ private final IdeGlassPaneImpl myGlassPane; private final Application myApplication; + private MemoryUsagePanel myMemoryWidget; + private StatusBarCustomComponentFactory[] myStatusBarCustomComponentFactories; IdeRootPane(ActionManager actionManager, UISettings uiSettings, DataManager dataManager, KeymapManager keymapManager, final Application application, final String[] commandLineArgs){ @@ -86,6 +83,8 @@ public class IdeRootPane extends JRootPane{ updateToolbar(); myContentPane.add(myNorthPanel, BorderLayout.NORTH); + myStatusBarCustomComponentFactories = application.getExtensions(StatusBarCustomComponentFactory.EP_NAME); + createStatusBar(); updateStatusBarVisibility(); @@ -111,9 +110,6 @@ public class IdeRootPane extends JRootPane{ myGlassPane.setVisible(false); myApplication = application; - - myStatusBar.setCustomComponentsFactory(Arrays.asList(StatusBarCustomComponentFactory.EP_NAME.getExtensions())); - } @@ -206,11 +202,53 @@ public class IdeRootPane extends JRootPane{ } private void createStatusBar() { - myStatusBar = new StatusBarImpl(myUISettings); + myUISettings.addUISettingsListener(this); + + myStatusBar = new IdeStatusBarImpl(); + + myMemoryWidget = new MemoryUsagePanel(); + myStatusBar.addWidget(myMemoryWidget); + myStatusBar.addWidget(new IdeNotificationArea(), "before Memory"); + myStatusBar.addWidget(new IdeMessagePanel(MessagePool.getInstance()), "before Memory"); + + if (myStatusBarCustomComponentFactories != null) { + for (final StatusBarCustomComponentFactory componentFactory : myStatusBarCustomComponentFactories) { + final JComponent c = componentFactory.createComponent(myStatusBar); + myStatusBar.addWidget(new CustomStatusBarWidget() { + public JComponent getComponent() { + return c; + } + + @NotNull + public String ID() { + return c.getClass().getSimpleName(); + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + componentFactory.disposeComponent(myStatusBar, c); + } + }, "before Memory"); + } + } + + setMemoryIndicatorVisible(myUISettings.SHOW_MEMORY_INDICATOR); + } + + void setMemoryIndicatorVisible(final boolean visible) { + if (myMemoryWidget != null) { + myMemoryWidget.setShowing(visible); + } } @Nullable - final StatusBarEx getStatusBar() { + final StatusBar getStatusBar() { return myStatusBar; } @@ -247,6 +285,10 @@ public class IdeRootPane extends JRootPane{ return null; } + public void uiSettingsChanged(UISettings source) { + setMemoryIndicatorVisible(source.SHOW_MEMORY_INDICATOR); + } + private final class MyUISettingsListenerImpl implements UISettingsListener{ public final void uiSettingsChanged(final UISettings source){ updateToolbarVisibility(); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java index e2966ec8ee01..c92380f4ff11 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/TestWindowManager.java @@ -15,34 +15,27 @@ */ package com.intellij.openapi.wm.impl; -import com.intellij.openapi.components.ApplicationComponent; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.IdeFrame; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManagerListener; -import com.intellij.openapi.wm.impl.status.StatusBarPatch; -import com.intellij.openapi.wm.ex.ProgressIndicatorEx; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.ex.WindowManagerEx; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.popup.BalloonHandler; -import com.intellij.notification.impl.IdeNotificationArea; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.event.HyperlinkListener; +import javax.swing.event.*; import java.awt.*; -import java.awt.event.ComponentEvent; +import java.awt.event.*; /** * @author Anton Katilin * @author Vladimir Kondratyev */ public final class TestWindowManager extends WindowManagerEx implements ApplicationComponent{ - private static final StatusBar ourStatusBar = new DummyStatusBar(); + private static final StatusBarEx ourStatusBar = new DummyStatusBar(); public final void doNotSuggestAsParent(final Window window) { } @@ -73,42 +66,46 @@ public final class TestWindowManager extends WindowManagerEx implements Applicat private static final class DummyStatusBar implements StatusBarEx { public final void setInfo(final String s) {} - public void addFileStatusComponent(final StatusBarPatch component) { - + public void addCustomIndicationComponent(@NotNull JComponent c) { } - public void removeFileStatusComponent(final StatusBarPatch component) { + public void removeCustomIndicationComponent(@NotNull JComponent c) { + } + public void addProgress(ProgressIndicatorEx indicator, TaskInfo info) { + } + + public void addWidget(@NotNull StatusBarWidget widget, @NotNull Disposable parentDisposable) { + } + + public void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor, @NotNull Disposable parentDisposable) { + } + + public void updateWidgets() { + } + + public void addWidget(@NotNull StatusBarWidget widget) { + } + + public void dispose() { + } + + public void addWidget(@NotNull StatusBarWidget widget, @NotNull String anchor) { + } + + public void updateWidget(@NotNull String id) { + } + + public void removeWidget(@NotNull String id) { } public void fireNotificationPopup(@NotNull JComponent content, final Color backgroundColor) { } - public IdeNotificationArea getNotificationArea() { - return null; - } - public final String getInfo() { return null; } - public final void clear() {} - - public void addCustomIndicationComponent(@NotNull JComponent c) {} - - public void removeCustomIndicationComponent(@NotNull final JComponent c) { - } - - public void dispose() { - - } - - public void cleanupCustomComponents() { - } - - public void add(ProgressIndicatorEx indicator, TaskInfo info) { - } - public void startRefreshIndication(final String tooltipText) { } @@ -138,10 +135,6 @@ public final class TestWindowManager extends WindowManagerEx implements Applicat } }; } - - public void update(final Editor editor) { - - } } public IdeFrameImpl[] getAllFrames() { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java index 85acb08387d0..0108add7f40e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/WindowManagerImpl.java @@ -15,48 +15,31 @@ */ package com.intellij.openapi.wm.impl; -import com.intellij.Patches; -import com.intellij.ide.DataManager; -import com.intellij.ide.IdeEventQueue; -import com.intellij.ide.impl.DataManagerImpl; -import com.intellij.ide.ui.UISettings; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.application.ApplicationInfo; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ex.ApplicationInfoEx; -import com.intellij.openapi.components.ApplicationComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.keymap.KeymapManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.util.NamedJDOMExternalizable; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.wm.IdeFrame; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManagerListener; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.openapi.wm.ex.WindowManagerEx; -import com.intellij.util.Alarm; -import com.intellij.util.ArrayUtil; -import com.intellij.util.EventDispatcher; -import com.intellij.util.ui.UIUtil; -import com.sun.jna.examples.WindowUtils; -import org.jdom.Element; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.*; +import com.intellij.ide.*; +import com.intellij.ide.impl.*; +import com.intellij.ide.ui.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ex.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.keymap.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.util.*; +import com.intellij.util.ui.*; +import com.sun.jna.examples.*; +import org.jdom.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.ComponentEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; +import java.awt.event.*; +import java.beans.*; +import java.util.*; /** * @author Anton Katilin @@ -496,16 +479,12 @@ public final class WindowManagerImpl extends WindowManagerEx implements Applicat frame.setTitle(null); frame.setFileTitle(null, null); - final StatusBarEx statusBar = frame.getStatusBar(); - statusBar.clear(); - myProject2Frame.remove(project); if (myProject2Frame.isEmpty()) { myProject2Frame.put(null, frame); } else { - - statusBar.dispose(); + Disposer.dispose((StatusBarEx) frame.getStatusBar()); frame.dispose(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java index 0fbc1de73614..77208ea51373 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/EncodingPanel.java @@ -15,115 +15,131 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ide.DataManager; +import com.intellij.ide.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.actionSystem.impl.SimpleDataContext; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.ui.popup.ListPopup; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.encoding.ChangeEncodingUpdateGroup; -import com.intellij.openapi.vfs.encoding.ChooseFileEncodingAction; -import com.intellij.openapi.vfs.encoding.EncodingManager; +import com.intellij.openapi.actionSystem.impl.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.vfs.encoding.*; +import com.intellij.openapi.wm.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.nio.charset.Charset; +import java.awt.*; +import java.awt.event.*; +import java.nio.charset.*; /** * @author cdr */ -public class EncodingPanel extends TextPanel implements StatusBarPatch { - public EncodingPanel(final StatusBarImpl statusBar) { - super(false, "windows-1251"); - StatusBarTooltipper.install(this, statusBar); - addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - EncodingPanel.this.mouseClicked(statusBar); +public class EncodingPanel implements StatusBarWidget, StatusBarWidget.MultipleTextValuesPresentation { + private StatusBar myStatusBar; + private String mySelected; + + public EncodingPanel(@NotNull final Project project) { + project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() { + @Override + public void selectionChanged(FileEditorManagerEvent event) { + update(); + } + + @Override + public void fileOpened(FileEditorManager source, VirtualFile file) { + update(); } }); } - public JComponent getComponent() { + @NotNull + public String ID() { + return "Encoding"; + } + + public Presentation getPresentation(@NotNull Type type) { return this; } - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - boolean enabled; - String text; - if (selected != null) { - VirtualFile file = getSelectedFile(selected); - Pair result = ChangeEncodingUpdateGroup.update(file); - text = result.getFirst(); - enabled = result.getSecond(); - if (file != null) { - Charset charset = ChooseFileEncodingAction.charsetFromContent(file); - if (charset == null) charset = file.getCharset(); - setText(charset.displayName()); - } - } - else { - text = ""; - enabled = false; - setText(""); - } - setEnabled(enabled); - return text; + public void dispose() { + myStatusBar = null; } - private static VirtualFile getSelectedFile(final Editor selected) { - if (selected == null) return null; - Document document = selected.getDocument(); + public void install(@NotNull StatusBar statusBar) { + myStatusBar = statusBar; + } + + @NotNull + public String getMaxValue() { + return "windows-1251"; + } + + @NotNull + public ListPopup getPopupStep() { + final DataContext parent = DataManager.getInstance().getDataContext((Component)myStatusBar); + final DataContext dataContext = + SimpleDataContext.getSimpleContext(PlatformDataKeys.VIRTUAL_FILE.getName(), getSelectedFile(), + SimpleDataContext.getSimpleContext(PlatformDataKeys.PROJECT.getName(), getProject(), parent)); + return JBPopupFactory.getInstance().createActionGroupPopup(null, new ChooseFileEncodingAction(getSelectedFile()) { + @Override + protected void chosen(VirtualFile virtualFile, Charset charset) { + if (virtualFile != null) { + EncodingManager.getInstance().setEncoding(virtualFile, charset); + EncodingPanel.this.update(); + } + } + }.createGroup(false), dataContext, false, false, false, null, 30, null); + } + + public String getTooltipText() { + return null; + } + + public Consumer getClickConsumer() { + return null; + } + + private void setSelectedValue(@NotNull final Charset charset) { + mySelected = charset.displayName(); + } + + public String getSelectedValue() { + return mySelected; + } + + private void update() { + final VirtualFile file = getSelectedFile(); + if (file != null) { + Charset charset = ChooseFileEncodingAction.charsetFromContent(file); + if (charset == null) charset = file.getCharset(); + setSelectedValue(charset); + myStatusBar.updateWidget(ID()); + } + } + + @Nullable + private VirtualFile getSelectedFile() { + final Editor editor = getEditor(); + if (editor == null) return null; + Document document = editor.getDocument(); return FileDocumentManager.getInstance().getFile(document); } - public void clear() { - setText(""); - } - + @Nullable private Editor getEditor() { final Project project = getProject(); if (project == null) return null; return getEditor(project); } - private static Editor getEditor(final Project project) { + @Nullable + private static Editor getEditor(@NotNull final Project project) { return FileEditorManager.getInstance(project).getSelectedTextEditor(); } + @Nullable private Project getProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this)); - } - - private void mouseClicked(final StatusBarImpl statusBar) { - VirtualFile virtualFile = getSelectedFile(getEditor()); - if (virtualFile == null) return; - if (!isEnabled()) return; - - ChooseFileEncodingAction changeAction = new ChooseFileEncodingAction(virtualFile) { - protected void chosen(final VirtualFile virtualFile, final Charset charset) { - EncodingManager.getInstance().setEncoding(virtualFile, charset); - } - }; - DataContext context = DataManager.getInstance().getDataContext(statusBar); - DataContext dataContext = SimpleDataContext.getSimpleContext(PlatformDataKeys.VIRTUAL_FILE.getName(), virtualFile, - SimpleDataContext.getSimpleContext(PlatformDataKeys.PROJECT.getName(), getProject(), context)); - Presentation presentation = changeAction.getTemplatePresentation(); - AnActionEvent event = new AnActionEvent(null, dataContext, ActionPlaces.UNKNOWN, presentation, ActionManager.getInstance(), 0); - changeAction.update(event); - - DefaultActionGroup group = changeAction.createGroup(false); - - final ListPopup popup = JBPopupFactory.getInstance().createActionGroupPopup(null, group, dataContext, - JBPopupFactory.ActionSelectionAid.SPEEDSEARCH, false, - null, - 30); - popup.showUnderneathOf(this); + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component)myStatusBar)); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java new file mode 100644 index 000000000000..53006a5b18d4 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/IdeStatusBarImpl.java @@ -0,0 +1,553 @@ +/* + * Copyright 2000-2010 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.openapi.wm.impl.status; + +import com.intellij.openapi.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.ui.awt.*; +import com.intellij.ui.popup.*; +import com.intellij.util.*; +import com.intellij.util.containers.HashMap; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; + +import javax.swing.*; +import javax.swing.event.*; +import java.awt.*; +import java.awt.event.*; +import java.util.List; +import java.util.*; + +/** + * User: spLeaner + */ +public class IdeStatusBarImpl extends JComponent implements StatusBarEx { + private InfoAndProgressPanel myInfoAndProgressPanel; + + private enum Position {LEFT, RIGHT, CENTER} + + private static final String uiClassID = "IdeStatusBarUI"; + + private final Map myWidgetMap = new HashMap(); + + private JPanel myLeftPanel; + private JPanel myRightPanel; + private JPanel myCenterPanel; + + private ProcessIconWidget myProcessWidget; + + private String myInfo; + + private static class WidgetBean { + JComponent component; + Position position; + StatusBarWidget widget; + + static WidgetBean create(@NotNull final StatusBarWidget widget, @NotNull final Position position, @NotNull final JComponent component) { + final WidgetBean bean = new WidgetBean(); + bean.widget = widget; + bean.position = position; + bean.component = component; + return bean; + } + } + + public IdeStatusBarImpl() { + setLayout(new BorderLayout()); + setBorder(BorderFactory.createEmptyBorder(1, 2, 0, 2)); + + myProcessWidget = new ProcessIconWidget(); + addWidget(myProcessWidget, Position.LEFT); + + myInfoAndProgressPanel = new InfoAndProgressPanel(); + addWidget(myInfoAndProgressPanel, Position.CENTER); + + setOpaque(true); + updateUI(); + } + + public void addWidget(@NotNull final StatusBarWidget widget) { + addWidget(widget, Position.RIGHT, "before Notifications"); + } + + public void addWidget(@NotNull final StatusBarWidget widget, @NotNull String anchor) { + addWidget(widget, Position.RIGHT, anchor); + } + + private void addWidget(@NotNull final StatusBarWidget widget, @NotNull final Position pos) { + addWidget(widget, pos, "__IGNORED__"); + } + + public void addWidget(@NotNull final StatusBarWidget widget, @NotNull final Disposable parentDisposable) { + addWidget(widget); + Disposer.register(parentDisposable, new Disposable() { + public void dispose() { + removeWidget(widget.ID()); + } + }); + } + + public void addWidget(@NotNull final StatusBarWidget widget, @NotNull String anchor, @NotNull final Disposable parentDisposable) { + addWidget(widget, anchor); + Disposer.register(parentDisposable, new Disposable() { + public void dispose() { + removeWidget(widget.ID()); + } + }); + } + + public void addCustomIndicationComponent(@NotNull final JComponent c) { + addWidget(new CustomStatusBarWidget() { + @NotNull + public String ID() { + return c.getClass().getSimpleName() + new Random().toString(); + } + + @Nullable + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + } + + public JComponent getComponent() { + return c; + } + }); + } + + public void removeCustomIndicationComponent(@NotNull final JComponent c) { + for (final String key : myWidgetMap.keySet()) { + final WidgetBean bean = myWidgetMap.get(key); + if (bean.component instanceof CustomStatusBarWidget && ((CustomStatusBarWidget)bean.component).getComponent() == c) { + removeWidget(key); + } + } + } + + public void dispose() { + for (final String key : myWidgetMap.keySet()) { + final WidgetBean bean = myWidgetMap.get(key); + Disposer.dispose(bean.widget); + } + } + + private void addWidget(@NotNull final StatusBarWidget widget, @NotNull final Position pos, @NotNull String anchor) { + JPanel panel; + if (pos == Position.RIGHT) { + if (myRightPanel == null) { + myRightPanel = new JPanel(); + myRightPanel.setLayout(new BoxLayout(myRightPanel, BoxLayout.X_AXIS)); + myRightPanel.setOpaque(false); + add(myRightPanel, BorderLayout.EAST); + } + + panel = myRightPanel; + } + else if (pos == Position.LEFT) { + if (myLeftPanel == null) { + myLeftPanel = new JPanel(); + myLeftPanel.setLayout(new BoxLayout(myLeftPanel, BoxLayout.X_AXIS)); + myLeftPanel.setOpaque(false); + add(myLeftPanel, BorderLayout.WEST); + } + + panel = myLeftPanel; + } + else { + if (myCenterPanel == null) { + myCenterPanel = new JPanel(new BorderLayout()); + myCenterPanel.setOpaque(false); + add(myCenterPanel, BorderLayout.CENTER); + } + + panel = myCenterPanel; + } + + final JComponent c = widget instanceof CustomStatusBarWidget ? ((CustomStatusBarWidget)widget).getComponent() : wrap(widget); + if (Position.RIGHT == pos && panel.getComponentCount() > 0) { + final List parts = StringUtil.split(anchor, " "); + if (parts.size() < 2) { + throw new IllegalArgumentException( + "anchor should be a relative position ('before' or 'after') and widget ID, like 'after Encoding'"); + } + + for (final String id : myWidgetMap.keySet()) { + if (id.equalsIgnoreCase(parts.get(1))) { + final WidgetBean bean = myWidgetMap.get(id); + int i = 0; + for (final Component component : myRightPanel.getComponents()) { + if (component == bean.component) { + final String _relative = parts.get(0); + if ("before".equalsIgnoreCase(_relative)) { + panel.add(c, i); + updateBorder(i); + } + else { + final int ndx = i + 1; + panel.add(c, i + 1); + updateBorder(ndx); + } + + installWidget(widget, pos, c); + return; + } + + i++; + } + } + } + + throw new IllegalArgumentException("unable to find widget with id: " + parts.get(1)); + } + + if (Position.LEFT == pos && panel.getComponentCount() == 0) { + c.setBorder(SystemInfo.isMac ? BorderFactory.createEmptyBorder(2, 0, 2, 4) : BorderFactory.createEmptyBorder()); + } + + panel.add(c); + installWidget(widget, pos, c); + } + + private void updateBorder(final int ndx) { + final JComponent self = (JComponent)myRightPanel.getComponent(ndx); + if (self instanceof IconPresentationWrapper) { + final int prev = ndx - 1; + final int next = ndx + 1; + + final JComponent p = prev >= 0 ? (JComponent)myRightPanel.getComponent(prev) : null; + final JComponent n = next < myRightPanel.getComponentCount() ? (JComponent)myRightPanel.getComponent(next) : null; + + final boolean prevIcon = p instanceof IconPresentationWrapper; + final boolean nextIcon = n instanceof IconPresentationWrapper; + + self.setBorder(prevIcon ? BorderFactory.createEmptyBorder(2, 2, 2, 2) : StatusBarWidget.WidgetBorder.INSTANCE); + if (nextIcon) n.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2)); + } + } + + public void setInfo(@Nullable final String s) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + public void run() { + myInfo = s; + if (myInfoAndProgressPanel != null) myInfoAndProgressPanel.setText(s); + } + }); + } + + public String getInfo() { + return myInfo; + } + + public void addProgress(ProgressIndicatorEx indicator, TaskInfo info) { + myInfoAndProgressPanel.addProgress(indicator, info); + } + + public void setProcessWindowOpen(final boolean open) { + myInfoAndProgressPanel.setProcessWindowOpen(open); + } + + public boolean isProcessWindowOpen() { + return myInfoAndProgressPanel.isProcessWindowOpen(); + } + + public void startRefreshIndication(String tooltipText) { + myProcessWidget.setToolTipText(tooltipText); + myProcessWidget.setRefreshVisible(true); + } + + public void stopRefreshIndication() { + myProcessWidget.setRefreshVisible(false); + } + + public BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody) { + return notifyProgressByBalloon(type, htmlBody, null, null); + } + + public BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, + @NotNull String htmlBody, + @Nullable Icon icon, + @Nullable HyperlinkListener listener) { + return myInfoAndProgressPanel.notifyByBalloon(type, htmlBody, icon, listener); + } + + public void fireNotificationPopup(@NotNull JComponent content, Color backgroundColor) { + new NotificationPopup(this, content, backgroundColor); + } + + private void installWidget(@NotNull final StatusBarWidget widget, @NotNull final Position pos, @NotNull final JComponent c) { + myWidgetMap.put(widget.ID(), WidgetBean.create(widget, pos, c)); + widget.install(this); + } + + private static JComponent wrap(@NotNull final StatusBarWidget widget) { + final StatusBarWidget.Presentation presentation = + widget.getPresentation(SystemInfo.isMac ? StatusBarWidget.Type.MAC : StatusBarWidget.Type.DEFAULT); + assert presentation != null : "Presentation should not be null!"; + + JComponent wrapper; + if (presentation instanceof StatusBarWidget.IconPresentation) { + wrapper = new IconPresentationWrapper((StatusBarWidget.IconPresentation)presentation); + } + else if (presentation instanceof StatusBarWidget.TextPresentation) { + wrapper = new TextPresentationWrapper((StatusBarWidget.TextPresentation)presentation); + wrapper.setBorder(StatusBarWidget.WidgetBorder.INSTANCE); + } + else if (presentation instanceof StatusBarWidget.MultipleTextValuesPresentation) { + wrapper = new MultipleTextValuesPresentationWrapper((StatusBarWidget.MultipleTextValuesPresentation)presentation); + wrapper.setBorder(StatusBarWidget.WidgetBorder.INSTANCE); + } + else { + throw new IllegalArgumentException("Unable to find a wrapper for presentation: " + presentation.getClass().getSimpleName()); + } + + return wrapper; + } + + public String getUIClassID() { + return uiClassID; + } + + @SuppressWarnings({"MethodOverloadsMethodOfSuperclass"}) + protected void setUI(StatusBarUI ui) { + super.setUI(ui); + } + + @Override + public void updateUI() { + if (UIManager.get(getUIClassID()) != null) { + setUI((StatusBarUI)UIManager.getUI(this)); + } + else { + setUI(SystemInfo.isMac ? new MacStatusBarUI() : new StatusBarUI()); + } + } + + @Override + protected void paintChildren(final Graphics g) { + if (getUI() instanceof MacStatusBarUI && !MacStatusBarUI.isActive(this)) { + final Graphics2D g2d = (Graphics2D)g.create(); + //g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.4f)); + super.paintChildren(g2d); + g2d.dispose(); + } + else { + super.paintChildren(g); + } + } + + public StatusBarUI getUI() { + return (StatusBarUI)ui; + } + + public void removeWidget(@NotNull String id) { + final WidgetBean bean = myWidgetMap.get(id); + if (bean != null) { + if (Position.LEFT == bean.position) { + myLeftPanel.remove(bean.component); + } + else if (Position.RIGHT == bean.position) { + final Component[] components = myRightPanel.getComponents(); + int i = 0; + for (final Component c : components) { + if (c == bean.component) break; + i++; + } + + myRightPanel.remove(bean.component); + updateBorder(i); + } else { + myCenterPanel.remove(bean.component); + } + + myWidgetMap.remove(bean.widget.ID()); + Disposer.dispose(bean.widget); + } + } + + public void updateWidgets() { + for (final String s : myWidgetMap.keySet()) { + updateWidget(s); + } + } + + public void updateWidget(@NotNull final String id) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + public void run() { + final WidgetBean bean = myWidgetMap.get(id); + if (bean != null) { + if (bean.component instanceof StatusBarWrapper) { + ((StatusBarWrapper)bean.component).beforeUpdate(); + } + + bean.component.repaint(); + } + } + }); + } + + private interface StatusBarWrapper { + void beforeUpdate(); + } + + private static final class MultipleTextValuesPresentationWrapper extends TextPanel implements StatusBarWrapper { + private static final Icon ARROWS_ICON = IconLoader.getIcon("/ide/statusbar_arrows.png"); + + private StatusBarWidget.MultipleTextValuesPresentation myPresentation; + + private MultipleTextValuesPresentationWrapper(@NotNull final StatusBarWidget.MultipleTextValuesPresentation presentation) { + super(presentation.getMaxValue()); + myPresentation = presentation; + + addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(final MouseEvent e) { + final ListPopup popup = myPresentation.getPopupStep(); + final Dimension dimension = popup.getContent().getPreferredSize(); + final Point at = new Point(0, -dimension.height); + popup.show(new RelativePoint(e.getComponent(), at)); + } + }); + } + + @SuppressWarnings({"unchecked"}) + public void beforeUpdate() { + setText(myPresentation.getSelectedValue()); + } + + @Override + protected void paintComponent(@NotNull final Graphics g) { + super.paintComponent(g); + + if (getText() != null) { + final Rectangle r = getBounds(); + final Insets insets = getInsets(); + ARROWS_ICON + .paintIcon(this, g, r.width - insets.right - ARROWS_ICON.getIconWidth() - 2, r.height / 2 - ARROWS_ICON.getIconHeight() / 2); + } + } + + @Override + public Dimension getPreferredSize() { + final Dimension preferredSize = super.getPreferredSize(); + return new Dimension(preferredSize.width + ARROWS_ICON.getIconWidth() + 4, preferredSize.height); + } + } + + private static final class TextPresentationWrapper extends TextPanel implements StatusBarWrapper { + private StatusBarWidget.TextPresentation myPresentation; + private Consumer myClickConsumer; + private boolean myMouseOver; + + private TextPresentationWrapper(@NotNull final StatusBarWidget.TextPresentation presentation) { + super(presentation.getMaxPossibleText()); + myPresentation = presentation; + myClickConsumer = myPresentation.getClickConsumer(); + + addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(final MouseEvent e) { + if (myClickConsumer != null && !e.isPopupTrigger() && MouseEvent.BUTTON1 == e.getButton()) { + myClickConsumer.consume(e); + } + } + + @Override + public void mouseEntered(MouseEvent e) { + myMouseOver = true; + } + + @Override + public void mouseExited(MouseEvent e) { + myMouseOver = false; + } + }); + } + + public void beforeUpdate() { + setText(myPresentation.getText()); + } + } + + private static final class IconPresentationWrapper extends JComponent implements StatusBarWrapper { + private StatusBarWidget.IconPresentation myPresentation; + private Consumer myClickConsumer; + private Icon myIcon; + + private IconPresentationWrapper(@NotNull final StatusBarWidget.IconPresentation presentation) { + myPresentation = presentation; + myClickConsumer = myPresentation.getClickConsumer(); + myIcon = myPresentation.getIcon(); + + addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(final MouseEvent e) { + if (myClickConsumer != null && !e.isPopupTrigger() && MouseEvent.BUTTON1 == e.getButton()) { + myClickConsumer.consume(e); + } + } + }); + + ToolTipManager.sharedInstance().registerComponent(this); + } + + public void beforeUpdate() { + myIcon = myPresentation.getIcon(); + } + + @Override + @Nullable + public String getToolTipText() { + return myPresentation.getTooltipText(); + } + + @Override + protected void paintComponent(final Graphics g) { + final Rectangle bounds = getBounds(); + final Insets insets = getInsets(); + + if (myIcon != null) { + final int iconWidth = myIcon.getIconWidth(); + final int iconHeight = myIcon.getIconHeight(); + + myIcon.paintIcon(this, g, insets.left + (bounds.width - insets.left - insets.right - iconWidth) / 2, + insets.top + (bounds.height - insets.top - insets.bottom - iconHeight) / 2); + } + } + + @Override + public Dimension getMinimumSize() { + return new Dimension(24, 18); + } + + @Override + public Dimension getPreferredSize() { + return getMinimumSize(); + } + } + +} + diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java index 91c4007d4fd4..3d8774b3c8d5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java @@ -15,49 +15,38 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.idea.ActionsBundle; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ex.ApplicationManagerEx; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.progress.impl.ProgressManagerImpl; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.popup.Balloon; -import com.intellij.openapi.ui.popup.BalloonHandler; -import com.intellij.openapi.ui.popup.JBPopupFactory; -import com.intellij.openapi.util.MultiValuesMap; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.ToolWindowAnchor; -import com.intellij.openapi.wm.ex.ProgressIndicatorEx; -import com.intellij.ui.awt.RelativePoint; -import com.intellij.ui.components.labels.LinkLabel; -import com.intellij.ui.components.labels.LinkListener; -import com.intellij.ui.components.panels.Wrapper; -import com.intellij.util.Alarm; -import com.intellij.util.ui.AbstractLayoutManager; -import com.intellij.util.ui.AsyncProcessIcon; -import com.intellij.util.ui.UIUtil; -import com.intellij.util.ui.update.MergingUpdateQueue; -import com.intellij.util.ui.update.Update; -import org.jetbrains.annotations.NotNull; +import com.intellij.idea.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.application.ex.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.progress.impl.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.ui.awt.*; +import com.intellij.ui.components.labels.*; +import com.intellij.ui.components.panels.*; +import com.intellij.util.*; +import com.intellij.util.ui.*; +import com.intellij.util.ui.update.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.border.CompoundBorder; -import javax.swing.border.EmptyBorder; -import javax.swing.event.HyperlinkListener; +import javax.swing.border.*; +import javax.swing.event.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.text.SimpleDateFormat; +import java.awt.event.*; +import java.text.*; import java.util.*; import java.util.List; -public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { +public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidget { private final ProcessPopup myPopup; - private final TextPanel myInfoPanel = new TextPanel(true); + + private final TextPanel myInfoPanel = new TextPanel(); + private final AsyncProcessIcon myProgressIcon; private final ArrayList myOriginals = new ArrayList(); private final ArrayList myInfos = new ArrayList(); @@ -67,21 +56,15 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { = new MultiValuesMap(); private final MergingUpdateQueue myUpdateQueue; - private final AsyncProcessIcon myProgressIcon; private final Alarm myQueryAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD); private boolean myShouldClosePopupAndOnProcessFinish; - private final CompoundBorder myCompoundBorder; - public InfoAndProgressPanel(final StatusBar statusBar) { + public InfoAndProgressPanel() { setOpaque(false); - final Border emptyBorder = BorderFactory.createEmptyBorder(0, 2, 0, 2); - myInfoPanel.setBorder(emptyBorder); - myInfoPanel.setOpaque(false); - - myCompoundBorder = BorderFactory.createCompoundBorder(new StatusBarImpl.SeparatorBorder.Left(), new EmptyBorder(0, 2, 0, 2)); myProgressIcon = new AsyncProcessIcon("Background process"); + myProgressIcon.setOpaque(false); myProgressIcon.addMouseListener(new MouseAdapter() { @Override @@ -95,8 +78,8 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { }); myProgressIcon.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - - StatusBarTooltipper.install(this, myProgressIcon, statusBar); + myProgressIcon.setBorder(StatusBarWidget.WidgetBorder.INSTANCE); + myProgressIcon.setToolTipText(ActionsBundle.message("action.ShowProcessWindow.double.click")); myUpdateQueue = new MergingUpdateQueue("Progress indicator", 50, true, MergingUpdateQueue.ANY_COMPONENT); myPopup = new ProcessPopup(this); @@ -104,18 +87,25 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { restoreEmptyStatus(); } + @NotNull + public String ID() { + return "InfoAndProgress"; + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + } + public JComponent getComponent() { return this; } - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - return ActionsBundle.message("action.ShowProcessWindow.double.click"); - } - - public void clear() { - - } - public void addProgress(final ProgressIndicatorEx original, TaskInfo info) { synchronized (myOriginals) { final boolean veryFirst = myOriginals.isEmpty(); @@ -226,19 +216,24 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { removeAll(); setLayout(new BorderLayout()); - final JPanel progressCountPanel = new JPanel(new BorderLayout(0, 2)); + final JPanel progressCountPanel = new JPanel(new BorderLayout(0, 0)); + progressCountPanel.setOpaque(false); String processWord = myOriginals.size() == 1 ? " process" : " processes"; final LinkLabel label = new LinkLabel(myOriginals.size() + processWord + " running...", null, new LinkListener() { public void linkSelected(final LinkLabel aSource, final Object aLinkData) { triggerPopupShowing(); } }); - label.setOpaque(true); + + if (SystemInfo.isMac) label.setFont(UIUtil.getLabelFont().deriveFont(11.0f)); + + label.setOpaque(false); final Wrapper labelComp = new Wrapper(label); + labelComp.setOpaque(false); progressCountPanel.add(labelComp, BorderLayout.CENTER); - myProgressIcon.setBorder(myCompoundBorder); + //myProgressIcon.setBorder(new IdeStatusBarImpl.MacStatusBarWidgetBorder()); progressCountPanel.add(myProgressIcon, BorderLayout.WEST); add(myInfoPanel, BorderLayout.CENTER); @@ -263,12 +258,15 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { }; inline.getComponent().setBorder(new EmptyBorder(0, 0, 0, 2)); - inlinePanel.add(inline.getComponent(), BorderLayout.CENTER); + final JComponent inlineComponent = inline.getComponent(); + inlineComponent.setOpaque(false); + inlinePanel.add(inlineComponent, BorderLayout.CENTER); - myProgressIcon.setBorder(myCompoundBorder); + //myProgressIcon.setBorder(new IdeStatusBarImpl.MacStatusBarWidgetBorder()); inlinePanel.add(myProgressIcon, BorderLayout.WEST); inline.updateProgressNow(); + inlinePanel.setOpaque(false); add(inlinePanel); @@ -386,13 +384,15 @@ public class InfoAndProgressPanel extends JPanel implements StatusBarPatch { setLayout(new BorderLayout()); add(myInfoPanel, BorderLayout.CENTER); - myProgressIcon.setBorder(myCompoundBorder); + //myProgressIcon.setBorder(new IdeStatusBarImpl.MacStatusBarWidgetBorder()); long wastedTime = ProgressManagerImpl.getWastedTime(); if (ApplicationManagerEx.getApplicationEx().isInternal() && wastedTime > 10 * 60 * 1000) { JPanel wrapper = new JPanel(new BorderLayout()); + wrapper.setOpaque(false); JLabel label = new JLabel(" Wasted time: " + formatTime(wastedTime) + " "); label.setForeground(UIUtil.getPanelBackground().darker()); + label.setOpaque(false); wrapper.add(label, BorderLayout.CENTER); wrapper.add(myProgressIcon, BorderLayout.EAST); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java index c1e8166e82d3..03eea5520ea6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InlineProgressIndicator.java @@ -15,32 +15,27 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ide.IdeBundle; -import com.intellij.ide.ui.LafManager; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.progress.util.ProgressIndicatorBase; -import com.intellij.openapi.ui.popup.IconButton; -import com.intellij.openapi.util.EmptyRunnable; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.wm.impl.content.GraphicsConfig; -import com.intellij.ui.InplaceButton; -import com.intellij.ui.components.panels.NonOpaquePanel; -import com.intellij.ui.components.panels.Wrapper; -import com.intellij.util.ui.UIUtil; +import com.intellij.ide.*; +import com.intellij.ide.ui.*; +import com.intellij.openapi.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.progress.util.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.impl.content.*; +import com.intellij.ui.*; +import com.intellij.ui.components.panels.*; +import com.intellij.util.ui.*; import javax.swing.*; -import javax.swing.border.EmptyBorder; +import javax.swing.border.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.*; public class InlineProgressIndicator extends ProgressIndicatorBase implements Disposable { - private final FixedHeightLabel myText = new FixedHeightLabel(); - private final FixedHeightLabel myText2 = new FixedHeightLabel(); + private final TextPanel myText = new TextPanel(); + private final TextPanel myText2 = new TextPanel(); private MyProgressBar myProgress; @@ -71,20 +66,22 @@ public class InlineProgressIndicator extends ProgressIndicatorBase implements Di }).setFillBg(true); myCancelButton.setVisible(myInfo.isCancellable()); - myCancelButton.setOpaque(true); + myCancelButton.setOpaque(false); myCancelButton.setToolTipText(processInfo.getCancelTooltipText()); + myCancelButton.setFillBg(false); myProgress = new MyProgressBar(JProgressBar.HORIZONTAL, compact); myComponent = new MyComponent(compact, myProcessName); if (myCompact) { - myComponent.setOpaque(true); + myComponent.setOpaque(false); myComponent.setLayout(new BorderLayout(2, 0)); final JPanel textAndProgress = new JPanel(new BorderLayout()); - myText.setHorizontalAlignment(JLabel.LEFT); + textAndProgress.setOpaque(false); textAndProgress.add(myText, BorderLayout.CENTER); final NonOpaquePanel progressWrapper = new NonOpaquePanel(new GridBagLayout()); + if (!myInfo.isCancellable()) progressWrapper.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 4)); final GridBagConstraints c = new GridBagConstraints(); c.weightx = 1; c.weighty = 1; @@ -113,7 +110,7 @@ public class InlineProgressIndicator extends ProgressIndicatorBase implements Di myProcessName.setBorder(new EmptyBorder(2, 2, 2, 2)); final NonOpaquePanel content = new NonOpaquePanel(new BorderLayout()); - content.setBorder(new EmptyBorder(2, 2, 2, 2)); + content.setBorder(new EmptyBorder(2, 2, 2, myInfo.isCancellable() ? 2 : 4)); myComponent.add(content, BorderLayout.CENTER); final Wrapper cancelWrapper = new Wrapper(myCancelButton); @@ -132,8 +129,6 @@ public class InlineProgressIndicator extends ProgressIndicatorBase implements Di UIUtil.removeQuaquaVisualMarginsIn(myComponent); if (!myCompact) { - myText.recomputeSize(); - myText2.recomputeSize(); myProcessName.recomputeSize(); } @@ -279,10 +274,13 @@ public class InlineProgressIndicator extends ProgressIndicatorBase implements Di return myInfo; } + // TODO: use TextPanel instead private static class FixedHeightLabel extends JLabel { private Dimension myPrefSize; public FixedHeightLabel() { + setOpaque(false); + if (SystemInfo.isMac) setFont(UIUtil.getLabelFont().deriveFont(11.0f)); } public void recomputeSize() { diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InsertOverwritePanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InsertOverwritePanel.java index bd43ef4de6e8..f9b035113313 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InsertOverwritePanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InsertOverwritePanel.java @@ -15,41 +15,83 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ui.UIBundle; -import com.intellij.openapi.editor.Editor; +import com.intellij.ide.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import javax.swing.*; +import java.awt.*; +import java.awt.event.*; /** * @author cdr */ -public class InsertOverwritePanel extends TextPanel implements StatusBarPatch{ - public InsertOverwritePanel() { - super(false, UIBundle.message("status.bar.column.status.text"), UIBundle.message("status.bar.insert.status.text"), UIBundle.message("status.bar.overwrite.status.text")); +public class InsertOverwritePanel implements StatusBarWidget, StatusBarWidget.TextPresentation { + private StatusBar myStatusBar; + + @NotNull + public String ID() { + return "InsertOverwrite"; } - public JComponent getComponent() { + public Presentation getPresentation(@NotNull Type type) { return this; } - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - boolean enabled = false; - if (selected != null) { - enabled = selected.getDocument().isWritable(); + public void install(@NotNull StatusBar statusBar) { + myStatusBar = statusBar; + } + + public void dispose() { + myStatusBar = null; + } + + @NotNull + public String getText() { + final Editor editor = getEditor(); + if (editor != null) { + return editor.isColumnMode() + ? UIBundle.message("status.bar.column.status.text") + : editor.isInsertMode() + ? UIBundle.message("status.bar.insert.status.text") + : UIBundle.message("status.bar.overwrite.status.text"); - String text = selected.isColumnMode() - ? UIBundle.message("status.bar.column.status.text") - : selected.isInsertMode() - ? UIBundle.message("status.bar.insert.status.text") - : UIBundle.message("status.bar.overwrite.status.text"); - setText(text); } - setEnabled(enabled); + + return ""; + } + + @NotNull + public String getMaxPossibleText() { + return UIBundle.message("status.bar.overwrite.status.text"); + } + + public String getTooltipText() { return null; } - public void clear() { - setEnabled(false); - setText(""); + public Consumer getClickConsumer() { + return null; + } + + @Nullable + private Editor getEditor() { + final Project project = getProject(); + if (project != null) { + final FileEditorManager manager = FileEditorManager.getInstance(project); + return manager.getSelectedTextEditor(); + } + + return null; + } + + @Nullable + private Project getProject() { + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component) myStatusBar)); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MacStatusBarUI.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MacStatusBarUI.java new file mode 100644 index 000000000000..13685ef654ae --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MacStatusBarUI.java @@ -0,0 +1,197 @@ +/* + * Copyright 2000-2010 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.openapi.wm.impl.status; + +import com.intellij.util.ui.*; +import com.intellij.util.ui.update.*; + +import javax.swing.*; +import javax.swing.border.*; +import java.awt.*; +import java.awt.event.*; + +/** + * User: spLeaner + */ +public class MacStatusBarUI extends StatusBarUI implements Activatable { + + private static final Border BACKGROUND_PAINTER = new MacBackgroundPainter(); + private JComponent myComponent; + + private WindowListener myWindowListener; + + public MacStatusBarUI() { + myWindowListener = new WindowAdapter() { + @Override + public void windowActivated(final WindowEvent e) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + public void run() { + if (myComponent != null) myComponent.repaint(); + } + }); + } + + @Override + public void windowDeactivated(final WindowEvent e) { + UIUtil.invokeLaterIfNeeded(new Runnable() { + public void run() { + if (myComponent != null) myComponent.repaint(); + } + }); + } + }; + } + + public static boolean isActive(final Component c) { + final Window ancestor = SwingUtilities.getWindowAncestor(c); + return ancestor != null && ancestor.isActive(); + } + + @Override + public void installUI(final JComponent c) { + super.installUI(c); + + myComponent = c; + new UiNotifyConnector(c, this); + } + + @Override + public void uninstallUI(final JComponent c) { + super.uninstallUI(c); + myComponent = null; + } + + public void showNotify() { + if (myComponent != null) SwingUtilities.getWindowAncestor(myComponent).addWindowListener(myWindowListener); + } + + public void hideNotify() { + if (myComponent != null) { + final Window window = SwingUtilities.getWindowAncestor(myComponent); + if (window != null) window.removeWindowListener(myWindowListener); + } + } + + @Override + public void paint(final Graphics g, final JComponent c) { + final Rectangle bounds = c.getBounds(); + BACKGROUND_PAINTER.paintBorder(c, g, 0, 0, bounds.width, bounds.height); + } + + static final class MacPressedBackgroundPainter implements Border { + private static final Color TOP_COLOR = new Color(90, 90, 90); + private static final Color BOTTOM_COLOR = new Color(130, 130, 130); + + private static final Color TOP_LEFT_COLOR = new Color(90, 90, 90); + private static final Color BOTTOM_LEFT_COLOR = new Color(120, 120, 120); + + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + final Graphics2D g2d = (Graphics2D) g.create(); + + g2d.setPaint(new GradientPaint(0, 1, TOP_COLOR, 0, height - 2, BOTTOM_COLOR)); + g2d.fillRect(x, y, width, height); + + g2d.setPaint(new GradientPaint(0, 0, TOP_LEFT_COLOR, 0, height, BOTTOM_LEFT_COLOR)); + g2d.drawLine(0, 0, 0, height); + + g2d.setColor(new Color(200, 200, 200)); + g2d.drawLine(width - 1, 0, width - 1, height); + + g2d.dispose(); + } + + public Insets getBorderInsets(Component c) { + return new Insets(1, 1, 1, 1); + } + + public boolean isBorderOpaque() { + return true; + } + } + + static final class MacHoverBackgroundPainter implements Border { + private static final Color TOP_COLOR = new Color(240, 240, 240); + private static final Color BOTTOM_COLOR = new Color(190, 190, 190); + private static final Insets INSETS = new Insets(0, 0, 0, 0); + + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + final Graphics2D g2d = (Graphics2D) g.create(); + final GradientPaint paint = new GradientPaint(0, 1, TOP_COLOR, 0, height - 2, BOTTOM_COLOR); + g2d.setPaint(paint); + g2d.fillRect(x + 2, y, width - 4, height); + g2d.dispose(); + } + + public Insets getBorderInsets(Component c) { + return INSETS; + } + + public boolean isBorderOpaque() { + return true; + } + } + + private static final class MacBackgroundPainter implements Border { + private static final Color ACTIVE_TOP_COLOR = new Color(202, 202, 202); + private static final Color ACTIVE_BOTTOM_COLOR = new Color(167, 167, 167); + private static final Color INACTIVE_TOP_COLOR = new Color(0xe3e3e3); + private static final Color INACTIVE_BOTTOM_COLOR = new Color(0xcfcfcf); + + private static final Color ACTIVE_BORDER_TOP_COLOR = new Color(81, 81, 81); + private static final Color ACTIVE_BORDER2_TOP_COLOR = new Color(227, 227, 227); + + private static final Color INACTIVE_BORDER_TOP_COLOR = new Color(153, 153, 153); + private static final Color INACTIVE_BORDER2_TOP_COLOR = new Color(251, 251, 251); + + private static final Insets INSETS = new Insets(0, 0, 0, 0); + + public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { + final Graphics2D g2d = (Graphics2D) g.create(); + final boolean active = isActive(c); + + final Color top = active ? ACTIVE_TOP_COLOR : INACTIVE_TOP_COLOR; + final Color bottom = active ? ACTIVE_BOTTOM_COLOR : INACTIVE_BOTTOM_COLOR; + + final GradientPaint paint = new GradientPaint(0, 0, top, 0, height, bottom); + g2d.setPaint(paint); + g2d.fillRect(0, 0, width, height); + + if (active) { + g2d.setColor(ACTIVE_BORDER_TOP_COLOR); + g2d.drawLine(0, 0, width, 0); + + g2d.setColor(ACTIVE_BORDER2_TOP_COLOR); + g2d.drawLine(0, 1, width, 1); + } else { + g2d.setColor(INACTIVE_BORDER_TOP_COLOR); + g2d.drawLine(0, 0, width, 0); + + g2d.setColor(INACTIVE_BORDER2_TOP_COLOR); + g2d.drawLine(0, 1, width, 1); + } + + g2d.dispose(); + } + + public Insets getBorderInsets(Component c) { + return INSETS; + } + + public boolean isBorderOpaque() { + return true; + } + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MemoryUsagePanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MemoryUsagePanel.java index 292704633091..dff5382b01db 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MemoryUsagePanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/MemoryUsagePanel.java @@ -15,61 +15,147 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.concurrency.JobScheduler; -import com.intellij.openapi.actionSystem.ActionPlaces; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.actionSystem.impl.ActionButton; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.DumbAware; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.ui.UIBundle; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NonNls; +import com.intellij.concurrency.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; +import java.awt.event.*; +import java.util.concurrent.*; -class MemoryUsagePanel extends JPanel implements StatusBarPatch{ +public class MemoryUsagePanel extends JButton implements CustomStatusBarWidget { + @NonNls + private static final String SAMPLE_STRING = "0000M of 0000M"; private static final int MEGABYTE = 1024 * 1024; private static final Color ourColorFree = new Color(240, 240, 240); private static final Color ourColorUsed = new Color(112, 135, 214); private static final Color ourColorUsed2 = new Color(166, 181, 230); - private static final Icon ourRunGCButtonIcon = IconLoader.getIcon("/actions/gc.png"); - private final JPanel myIndicatorPanel; + private static final int HEIGHT = 16; + private long myLastTotal = -1; private long myLastUsed = -1; private ScheduledFuture myFuture; public MemoryUsagePanel() { - setLayout(new BorderLayout()); setOpaque(false); - myIndicatorPanel = new IndicatorPanel(); - - add(myIndicatorPanel, BorderLayout.CENTER); - final RunCGAction gcAction = new RunCGAction(); - final JComponent button = gcAction.createButton(gcAction.getTemplatePresentation()); - add(button, SystemInfo.isMac ? BorderLayout.WEST : BorderLayout.EAST); + addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.gc(); + updateState(); + } + }); + setBorder(StatusBarWidget.WidgetBorder.INSTANCE); updateUI(); } + public void dispose() { + myFuture.cancel(true); + myFuture = null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + @Nullable + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + @NotNull + public String ID() { + return "Memory"; + } + + public void setShowing(final boolean showing) { + if (showing && !isVisible()) { + setVisible(true); + revalidate(); + } else if (!showing && isVisible()) { + setVisible(showing); + revalidate(); + } + } + + @Override + public void updateUI() { + super.updateUI(); + setFont(SystemInfo.isMac ? UIUtil.getLabelFont().deriveFont(11.0f) : UIUtil.getLabelFont()); + } + public JComponent getComponent() { return this; } - - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - return null; + + @Override + public void paintComponent(final Graphics g) { + final Dimension size = getSize(); + + final Runtime runtime = Runtime.getRuntime(); + final long maxMemory = runtime.maxMemory(); + final long freeMemory = maxMemory - runtime.totalMemory() + runtime.freeMemory(); + + final Insets insets = getInsets(); + + final int totalBarLength = size.width - insets.left - insets.right - (SystemInfo.isMac ? 0 : 0); + final int usedBarLength = totalBarLength - (int)(totalBarLength * freeMemory / maxMemory); + final int barHeight = HEIGHT; // size.height - insets.top - insets.bottom; + final Graphics2D g2 = (Graphics2D)g; + + final int yOffset = (size.height - barHeight) / 2; + final int xOffset = insets.left + (SystemInfo.isMac ? 0 : 0); + + final boolean pressed = getModel().isPressed(); + + g2.setPaint(new GradientPaint(0, 0, new Color(190, 190, 190), 0, size.height - 1, new Color(230, 230, 230))); + g2.fillRect(xOffset, yOffset, totalBarLength, barHeight); + + if (pressed) { + g2.setPaint(new GradientPaint(1, 1, new Color(101, 111, 135), 0, size.height - 2, new Color(175, 185, 202))); + g2.fillRect(xOffset + 1, yOffset, usedBarLength, barHeight); + } else { + g2.setPaint(new GradientPaint(1, 1, new Color(175, 185, 202), 0, size.height - 2, new Color(126, 138, 168))); + g2.fillRect(xOffset + 1, yOffset, usedBarLength, barHeight); + + g2.setColor(new Color(194, 197, 203)); + g2.drawLine(xOffset + 1, yOffset+1, xOffset + usedBarLength, yOffset+1); + } + + g2.setColor(new Color(110, 110, 110)); + g2.drawRect(xOffset, yOffset, totalBarLength, barHeight - 1); + + g.setFont(getFont()); + final long used = (maxMemory - freeMemory) / MEGABYTE; + final long total = maxMemory / MEGABYTE; + final String info = UIBundle.message("memory.usage.panel.message.text", Long.toString(used), Long.toString(total)); + final FontMetrics fontMetrics = g.getFontMetrics(); + final int infoWidth = fontMetrics.charsWidth(info.toCharArray(), 0, info.length()); + final int infoHeight = fontMetrics.getHeight() - fontMetrics.getDescent(); + UIUtil.applyRenderingHints(g); + + g.setColor(Color.black); + g.drawString(info, xOffset + (totalBarLength - infoWidth) / 2, yOffset + (barHeight + infoHeight) / 2 - 1); } - public void clear() { + public final int getPreferredWidth() { + final Insets insets = getInsets(); + return getFontMetrics(UIUtil.getLabelFont().deriveFont(11.0f)).stringWidth(SAMPLE_STRING) + insets.left + insets.right + (SystemInfo.isMac ? 2 : 0); + } + @Override + public Dimension getPreferredSize() { + return new Dimension(getPreferredWidth(), Integer.MAX_VALUE); + } + + @Override + public Dimension getMaximumSize() { + return getPreferredSize(); } /** @@ -90,102 +176,24 @@ class MemoryUsagePanel extends JPanel implements StatusBarPatch{ } private void updateState() { - assert SwingUtilities.isEventDispatchThread(); if (!isShowing()) { return; } + final Runtime runtime = Runtime.getRuntime(); final long total = runtime.totalMemory() / MEGABYTE; final long used = total - runtime.freeMemory() / MEGABYTE; if (total != myLastTotal || used != myLastUsed) { myLastTotal = total; myLastUsed = used; - repaint(); - myIndicatorPanel.setToolTipText(UIBundle.message("memory.usage.panel.statistics.message", total, used)); - } - } - /** - * Invoked when enclosed frame is being disposed. - */ - public void removeNotify() { - myFuture.cancel(true); - myFuture = null; - super.removeNotify(); - } + SwingUtilities.invokeLater(new Runnable() { + public void run() { + repaint(); + } + }); - private final class RunCGAction extends AnAction implements DumbAware { - public RunCGAction() { - super(UIBundle.message("memory.usage.panel.run.garbage.collector.action.name"), - UIBundle.message("memory.usage.panel.run.garbage.collector.action.description"), ourRunGCButtonIcon); - } - - public JComponent createButton(final Presentation presentation) { - final ActionButton button = new ActionButton( - this, - presentation, - ActionPlaces.UNKNOWN, - new Dimension(1, 1) - ); - presentation.putClientProperty("button", button); - return button; - } - - public void actionPerformed(final AnActionEvent e) { - System.gc(); - updateState(); - } - } - - private static final class IndicatorPanel extends JPanel { - @NonNls static final String SAMPLE_STRING = "0000M of 0000M"; - - public IndicatorPanel() { - updateUI(); - } - - public final void updateUI() { - super.updateUI(); - setPreferredSize(new Dimension(getPreferedWidth(), -1)); - } - - public final void paint(final Graphics g) { - super.paint(g); - final Dimension size = getSize(); - final Insets insets = getInsets(); - - final int x = insets.left; - final int y = insets.top; - - final Runtime runtime = Runtime.getRuntime(); - final long freeMemory = runtime.freeMemory(); - final long totalMemory = runtime.totalMemory(); - - final int totalBarLength = size.width - (insets.left + insets.right); - final int usedBarLength = totalBarLength - (int)(totalBarLength * freeMemory / totalMemory); - final int barHeight = size.height - (insets.bottom + insets.top); - final Graphics2D g2 = (Graphics2D)g; - g2.setPaint( - new GradientPaint(x, y, ourColorUsed, x, barHeight / 2, ourColorUsed2, true) - ); - g.fillRect(x, y, usedBarLength, barHeight); - g.setColor(ourColorFree); - g.fillRect(x + usedBarLength, y, totalBarLength - usedBarLength, barHeight); - - g.setFont(UIUtil.getLabelFont()); - g.setColor(Color.black); - final long used = (totalMemory - freeMemory) / MEGABYTE; - final long total = totalMemory / MEGABYTE; - final String info = UIBundle.message("memory.usage.panel.message.text", Long.toString(used), Long.toString(total)); - final FontMetrics fontMetrics = g.getFontMetrics(); - final int infoWidth = fontMetrics.charsWidth(info.toCharArray(), 0, info.length()); - final int infoHeight = fontMetrics.getHeight() - fontMetrics.getDescent(); - UIUtil.applyRenderingHints(g); - g.drawString(info, x + (totalBarLength - infoWidth) / 2, y + (barHeight + infoHeight) / 2); - } - - public final int getPreferedWidth() { - return getFontMetrics(UIUtil.getLabelFont()).stringWidth(SAMPLE_STRING); + setToolTipText(UIBundle.message("memory.usage.panel.statistics.message", total, used)); } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PositionPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PositionPanel.java index 438becda9e1b..c1d4f615ee99 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PositionPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PositionPanel.java @@ -15,108 +15,153 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ide.DataManager; -import com.intellij.ide.util.GotoLineNumberDialog; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.LogicalPosition; -import com.intellij.openapi.editor.SelectionModel; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.ui.UIBundle; +import com.intellij.ide.*; +import com.intellij.ide.util.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.command.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.ex.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; -import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.*; +import java.awt.event.*; -class PositionPanel extends TextPanel implements StatusBarPatch { - public PositionPanel(StatusBar statusBar) { - super(false, "#############"); +public class PositionPanel implements StatusBarWidget, StatusBarWidget.TextPresentation, CaretListener { + private String myText; + private StatusBar myStatusBar; - addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - if (e.getClickCount() == 2) { - final Project project = getProject(); - if (project == null) return; - final Editor editor = getEditor(project); - if (editor == null) return; - final CommandProcessor processor = CommandProcessor.getInstance(); - processor.executeCommand( - project, new Runnable(){ - public void run() { - final GotoLineNumberDialog dialog = new GotoLineNumberDialog(project, editor); - dialog.show(); - IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); - } - }, - UIBundle.message("go.to.line.command.name"), - null - ); - } + public PositionPanel(@NotNull final Project project) { + project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerAdapter() { + @Override + public void fileOpened(@NotNull final FileEditorManager source, @NotNull final VirtualFile file) { + final Editor editor = source.getSelectedTextEditor(); + if (editor != null) updatePosition(editor); } }); - - StatusBarTooltipper.install(this, statusBar); } - public JComponent getComponent() { + @NotNull + public String ID() { + return "Position"; + } + + public Presentation getPresentation(@NotNull final Type type) { return this; } - public String updateStatusBar(final Editor editor, final JComponent componentSelected) { - if (editor != null) { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - if (!editor.isDisposed()) { - StringBuilder message = new StringBuilder(); + @NotNull + public String getText() { + return myText == null ? "" : myText; + } - SelectionModel selectionModel = editor.getSelectionModel(); - if (selectionModel.hasBlockSelection()) { - LogicalPosition start = selectionModel.getBlockStart(); - LogicalPosition end = selectionModel.getBlockEnd(); - appendLogicalPosition(start, message); - message.append("-"); - appendLogicalPosition(new LogicalPosition(Math.abs(end.line - start.line), Math.abs(end.column - start.column) - 1), message); + @NotNull + public String getMaxPossibleText() { + return "#############"; + } + + public String getTooltipText() { + return UIBundle.message("go.to.line.command.double.click"); + } + + public Consumer getClickConsumer() { + return new Consumer() { + public void consume(MouseEvent mouseEvent) { + final Project project = getProject(); + if (project == null) return; + final Editor editor = getEditor(); + if (editor == null) return; + final CommandProcessor processor = CommandProcessor.getInstance(); + processor.executeCommand( + project, new Runnable() { + public void run() { + final GotoLineNumberDialog dialog = new GotoLineNumberDialog(project, editor); + dialog.show(); + IdeDocumentHistory.getInstance(project).includeCurrentCommandAsNavigation(); } - else { - LogicalPosition caret = editor.getCaretModel().getLogicalPosition(); + }, + UIBundle.message("go.to.line.command.name"), + null + ); + } + }; + } - appendLogicalPosition(caret, message); - if (selectionModel.hasSelection()) { - int len = Math.abs(selectionModel.getSelectionStart() - selectionModel.getSelectionEnd()); - message.append("/"); - message.append(len); - } - } - - setText(message.toString()); - } - } - }); - return UIBundle.message("go.to.line.command.double.click"); + @Nullable + private Editor getEditor() { + final Project project = getProject(); + if (project != null) { + final FileEditorManager manager = FileEditorManager.getInstance(project); + return manager.getSelectedTextEditor(); } - clear(); + return null; } + @Nullable + private Project getProject() { + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((Component)myStatusBar)); + } + + public void dispose() { + EditorFactory.getInstance().getEventMulticaster().removeCaretListener(this); + myStatusBar = null; + } + + public void install(@NotNull StatusBar statusBar) { + EditorFactory.getInstance().getEventMulticaster().addCaretListener(this); + myStatusBar = statusBar; + } + private static void appendLogicalPosition(LogicalPosition caret, StringBuilder message) { message.append(caret.line + 1); message.append(":"); message.append(caret.column + 1); } - public void clear() { - setText(""); + public void caretPositionChanged(final CaretEvent e) { + updatePosition(e.getEditor()); } - private static Editor getEditor(final Project project) { - return FileEditorManager.getInstance(project).getSelectedTextEditor(); + private void updatePosition(final Editor editor) { + if (editor == null) return; + myText = getPositionText(editor); + myStatusBar.updateWidget(ID()); } - private Project getProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this)); + private String getPositionText(Editor editor) { + if (!editor.isDisposed() && myStatusBar != null) { + StringBuilder message = new StringBuilder(); + + SelectionModel selectionModel = editor.getSelectionModel(); + if (selectionModel.hasBlockSelection()) { + LogicalPosition start = selectionModel.getBlockStart(); + LogicalPosition end = selectionModel.getBlockEnd(); + appendLogicalPosition(start, message); + message.append("-"); + appendLogicalPosition(new LogicalPosition(Math.abs(end.line - start.line), Math.abs(end.column - start.column) - 1), message); + } + else { + LogicalPosition caret = editor.getCaretModel().getLogicalPosition(); + + appendLogicalPosition(caret, message); + if (selectionModel.hasSelection()) { + int len = Math.abs(selectionModel.getSelectionStart() - selectionModel.getSelectionEnd()); + message.append("/"); + message.append(len); + } + } + + return message.toString(); + } + else { + return ""; + } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessIconWidget.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessIconWidget.java new file mode 100644 index 000000000000..02a628659bfe --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ProcessIconWidget.java @@ -0,0 +1,87 @@ +/* + * Copyright 2000-2010 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.openapi.wm.impl.status; + +import com.intellij.openapi.wm.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; + +import javax.swing.*; +import java.awt.*; + +/** + * User: spLeaner + */ +public class ProcessIconWidget implements CustomStatusBarWidget { + private AsyncProcessIcon myRefreshIcon; + private EmptyIcon myEmptyRefreshIcon; + + public ProcessIconWidget() { + myRefreshIcon = new AsyncProcessIcon("Refreshing filesystem") { + protected Icon getPassiveIcon() { + return myEmptyRefreshIcon; + } + + @Override + public Dimension getPreferredSize() { + if (!isRunning()) return new Dimension(4, 0); + return super.getPreferredSize(); + } + }; + + myRefreshIcon.setBorder(StatusBarWidget.WidgetBorder.INSTANCE); + myRefreshIcon.setOpaque(false); + + myEmptyRefreshIcon = new EmptyIcon(0 /*myRefreshIcon.getPreferredSize().width*/, myRefreshIcon.getPreferredSize().height); + setRefreshVisible(false); + } + + public JComponent getComponent() { + return myRefreshIcon; + } + + public void setRefreshVisible(final boolean visible) { + if (visible) { + myRefreshIcon.resume(); + } + else { + myRefreshIcon.suspend(); + } + + myRefreshIcon.revalidate(); + myRefreshIcon.repaint(); + } + + public void setToolTipText(final String tooltip) { + myRefreshIcon.setToolTipText(tooltip); + } + + @NotNull + public String ID() { + return "RefreshIcon"; + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + setRefreshVisible(false); + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ShowProcessWindowAction.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ShowProcessWindowAction.java index 5bc4c6b6b0f6..3c9f351a0a3c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ShowProcessWindowAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ShowProcessWindowAction.java @@ -15,12 +15,12 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.idea.ActionsBundle; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.ToggleAction; -import com.intellij.openapi.wm.impl.IdeFrameImpl; -import com.intellij.openapi.project.DumbAware; -import org.jetbrains.annotations.Nullable; +import com.intellij.idea.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.ex.*; +import com.intellij.openapi.wm.impl.*; +import org.jetbrains.annotations.*; import java.awt.*; @@ -34,7 +34,7 @@ public class ShowProcessWindowAction extends ToggleAction implements DumbAware { public boolean isSelected(final AnActionEvent e) { final IdeFrameImpl frame = getFrame(); if (frame == null) return false; - return frame.getStatusBar().isProcessWindowOpen(); + return ((StatusBarEx) frame.getStatusBar()).isProcessWindowOpen(); } public void update(final AnActionEvent e) { @@ -43,7 +43,7 @@ public class ShowProcessWindowAction extends ToggleAction implements DumbAware { } @Nullable - private IdeFrameImpl getFrame() { + private static IdeFrameImpl getFrame() { Container window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow(); while (window != null) { if (window instanceof IdeFrameImpl) return (IdeFrameImpl)window; @@ -56,6 +56,6 @@ public class ShowProcessWindowAction extends ToggleAction implements DumbAware { public void setSelected(final AnActionEvent e, final boolean state) { final IdeFrameImpl frame = getFrame(); if (frame == null) return; - frame.getStatusBar().setProcessWindowOpen(state); + ((StatusBarEx) frame.getStatusBar()).setProcessWindowOpen(state); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarImpl.java deleted file mode 100644 index 2d235a55ed70..000000000000 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarImpl.java +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright 2000-2009 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.openapi.wm.impl.status; - -import com.intellij.diagnostic.IdeMessagePanel; -import com.intellij.diagnostic.MessagePool; -import com.intellij.ide.DataManager; -import com.intellij.ide.ui.UISettings; -import com.intellij.ide.ui.UISettingsListener; -import com.intellij.notification.impl.IdeNotificationArea; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.ex.DocumentEx; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.progress.TaskInfo; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.popup.BalloonHandler; -import com.intellij.openapi.wm.StatusBarCustomComponentFactory; -import com.intellij.openapi.wm.ex.ProgressIndicatorEx; -import com.intellij.openapi.wm.ex.StatusBarEx; -import com.intellij.ui.components.panels.NonOpaquePanel; -import com.intellij.ui.popup.NotificationPopup; -import com.intellij.util.containers.HashMap; -import com.intellij.util.ui.AsyncProcessIcon; -import com.intellij.util.ui.EmptyIcon; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.border.EmptyBorder; -import javax.swing.event.HyperlinkListener; -import java.awt.*; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -public class StatusBarImpl extends JPanel implements StatusBarEx { - private final PositionPanel myPositionPanel = new PositionPanel(this); - private final ToggleReadOnlyAttributePanel myToggleReadOnlyAttributePanel = new ToggleReadOnlyAttributePanel(this); - private final EncodingPanel myEncodingPanel = new EncodingPanel(this); - private final IdeNotificationArea myNotificationArea = new IdeNotificationArea(this); - private final MemoryUsagePanel myMemoryUsagePanel = new MemoryUsagePanel(); - private final InsertOverwritePanel myInsertOverwritePanel = new InsertOverwritePanel(); - private final IdeMessagePanel myMessagePanel = new IdeMessagePanel(MessagePool.getInstance()); - private final JPanel myCustomIndicationsPanel = new JPanel(new GridBagLayout()); - private final JPanel myAppLevelCustomIndicationsPanel = new JPanel(new GridBagLayout()); - private String myInfo = ""; - - private final MyUISettingsListener myUISettingsListener; - private InfoAndProgressPanel myInfoAndProgressPanel; - - private final UISettings myUISettings; - private AsyncProcessIcon myRefreshIcon; - private EmptyIcon myEmptyRefreshIcon; - private final List myFileStatusComponents = new ArrayList(); - private final List myPatches = new ArrayList(); - private JPanel myPatchesPanel; - private List myCustomComponentsFactoryList; - private final Map myFactory2Component = new HashMap(); - - private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.status.StatusBarImpl"); - - public StatusBarImpl(UISettings uiSettings) { - myUISettings = uiSettings; - constructUI(); - - myUISettingsListener=new MyUISettingsListener(); - } - - private void constructUI() { - setLayout(new BorderLayout()); - setOpaque(true); - - myRefreshIcon = new AsyncProcessIcon("Refreshing filesystem") { - protected Icon getPassiveIcon() { - return myEmptyRefreshIcon; - } - }; - myEmptyRefreshIcon = new EmptyIcon(myRefreshIcon.getPreferredSize().width, myRefreshIcon.getPreferredSize().height); - myInfoAndProgressPanel = new InfoAndProgressPanel(this); - setRefreshVisible(false); - - final NonOpaquePanel center = new NonOpaquePanel(new BorderLayout()); - center.add(myRefreshIcon, BorderLayout.WEST); - center.add(myInfoAndProgressPanel, BorderLayout.CENTER); - - - myPatchesPanel = new JPanel(new GridBagLayout()); - myPatchesPanel.setOpaque(false); - setBorder(new EmptyBorder(2, 0, 1, 0)); - - - add(center, BorderLayout.CENTER); - add(myPatchesPanel, BorderLayout.EAST); - - recreatePatches(); - } - - public IdeNotificationArea getNotificationArea() { - return myNotificationArea; - } - - private void recreatePatches() { - myPatchesPanel.removeAll(); - myPatches.clear(); - - addPatch(myPositionPanel, true); - addPatch(myToggleReadOnlyAttributePanel, true); - addPatch(myInsertOverwritePanel, true); - addPatch(myEncodingPanel, true); - for (int i = 0; i < myFileStatusComponents.size(); i++) { - StatusBarPatch component = myFileStatusComponents.get(i); - addPatch(component, i==0); - } - - addPatch(new StatusBarPatch() { - public JComponent getComponent() { - return myCustomIndicationsPanel; - } - - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - return componentSelected == null ? null : componentSelected.getToolTipText(); - } - - public void clear() { - - } - }, true); - - addPatch(new StatusBarPatch() { - public JComponent getComponent() { - return myAppLevelCustomIndicationsPanel; - } - - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - return componentSelected == null ? null : componentSelected.getToolTipText(); - } - - public void clear() { - - } - }, true); - - addPatch(myMessagePanel, false); - addPatch(myNotificationArea, true); - addPatch(myMemoryUsagePanel, true); - - final GridBagConstraints gbConstraints = new GridBagConstraints(); - gbConstraints.fill = GridBagConstraints.BOTH; - gbConstraints.weightx = 1; - gbConstraints.weighty = 1; - gbConstraints.gridx = 0; - gbConstraints.gridy = 0; - gbConstraints.gridwidth = 1; - gbConstraints.gridheight = 1; - gbConstraints.anchor = GridBagConstraints.WEST; - - for (int i = 0; i < myPatches.size(); i++) { - StatusBarPatch patch = myPatches.get(i); - JComponent component = patch.getComponent(); - if (i == myPatches.size() - 1) { - gbConstraints.fill = GridBagConstraints.VERTICAL; - gbConstraints.gridwidth = GridBagConstraints.REMAINDER; - } - myPatchesPanel.add(component, gbConstraints); - gbConstraints.fill = GridBagConstraints.VERTICAL; - gbConstraints.weightx = 0; - gbConstraints.gridx++; - } - - } - - public void setCustomComponentsFactory(final List customComponentsFactory) { - disposeAppLevelCustomComponents(); - myCustomComponentsFactoryList = customComponentsFactory; - for (StatusBarCustomComponentFactory factory : myCustomComponentsFactoryList) { - JComponent c = factory.createComponent(this); - if (c != null) { - addAppLevelCustomIndicationComponent(c); - } - } - } - - private void setRefreshVisible(final boolean visible) { - if (visible) { - myRefreshIcon.resume(); - } - else { - myRefreshIcon.suspend(); - } - } - - public void add(final ProgressIndicatorEx indicator, TaskInfo info) { - myInfoAndProgressPanel.addProgress(indicator, info); - } - - public void setProcessWindowOpen(final boolean open) { - myInfoAndProgressPanel.setProcessWindowOpen(open); - } - - public BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, @NotNull String htmlBody) { - return notifyProgressByBalloon(type, htmlBody, null, null); - } - - public BalloonHandler notifyProgressByBalloon(@NotNull MessageType type, - @NotNull String htmlBody, - @Nullable Icon icon, - @Nullable HyperlinkListener listener) { - return myInfoAndProgressPanel.notifyByBalloon(type, htmlBody, icon, listener); - } - - public void update(final Editor editor) { - if (editor != null) { - final Document document = editor.getDocument(); - if (document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate()) return; - } - - for (StatusBarPatch patch : myPatches) { - try { - patch.updateStatusBar(editor, null); - } - catch (Exception e) { - LOG.error(e); - } - } - } - - public void dispose() { - disposeAppLevelCustomComponents(); - } - - private void disposeAppLevelCustomComponents() { - if (myCustomComponentsFactoryList != null) { - for (StatusBarCustomComponentFactory factory : myCustomComponentsFactoryList) { - try { - JComponent c = myFactory2Component.get(factory); - if (c != null) { - factory.disposeComponent(this, c); - } - } - finally { - myFactory2Component.remove(factory); - } - - } - } - myCustomComponentsFactoryList = null; - } - - Editor getEditor() { - final Project project = getProject(); - if (project == null) return null; - return getEditor(project); - } - - private static Editor getEditor(final Project project) { - return FileEditorManager.getInstance(project).getSelectedTextEditor(); - } - - private Project getProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this)); - } - - public boolean isProcessWindowOpen() { - return myInfoAndProgressPanel.isProcessWindowOpen(); - } - - protected final void paintComponent(final Graphics g) { - g.setColor(getBackground()); - g.fillRect(0, 0, getWidth(), getHeight()); - - final Color dark = getBackground().darker(); - - g.setColor(dark); - g.drawLine(0, 0, getWidth(), 0); - - final Color lighter = new Color(dark.getRed(), dark.getGreen(), dark.getBlue(), 75); - g.setColor(lighter); - g.drawLine(0, 1, getWidth(), 1); - - g.drawLine(0, getHeight() - 1, getWidth(), getHeight() - 1); - } - - public final void addNotify() { - super.addNotify(); - setMemoryIndicatorVisible(myUISettings.SHOW_MEMORY_INDICATOR); - myUISettings.addUISettingsListener(myUISettingsListener); - } - - public final void removeNotify() { - UISettings.getInstance().removeUISettingsListener(myUISettingsListener); - super.removeNotify(); - } - - public final void setInfo(@Nullable final String s) { - UIUtil.invokeLaterIfNeeded(new Runnable() { - public void run() { - myInfo = s; - myInfoAndProgressPanel.setText(s != null ? s : " "); - } - }); - } - - public void fireNotificationPopup(@NotNull JComponent content, final Color backgroundColor) { - new NotificationPopup(this, content, backgroundColor); - } - - public final String getInfo() { - return myInfo; - } - - private void addAppLevelCustomIndicationComponent(@NotNull final JComponent c) { - addCustomIndicationComponent(c, myAppLevelCustomIndicationsPanel); - } - - public final void addCustomIndicationComponent(@NotNull JComponent c) { - addCustomIndicationComponent(c, myCustomIndicationsPanel); - } - - private static void addCustomIndicationComponent(final JComponent c, final JPanel indicationsPanel) { - final GridBagConstraints gbConstraints = new GridBagConstraints(); - gbConstraints.fill = GridBagConstraints.BOTH; - gbConstraints.weightx = 0; - gbConstraints.weighty = 1; - gbConstraints.insets = new Insets(0, 0, 0, 2); - - - indicationsPanel.setVisible(true); - indicationsPanel.add(c, gbConstraints); - } - - public void removeCustomIndicationComponent(@NotNull final JComponent component) { - removeCustomIndicationComponent(component, myCustomIndicationsPanel); - } - - private static void removeCustomIndicationComponent(final JComponent component, final JPanel indicationsPanel) { - indicationsPanel.remove(component); - if (indicationsPanel.getComponentCount() == 0) { - indicationsPanel.setVisible(false); - } - } - - /** - * Clears all sections in status bar - */ - public final void clear(){ - for (StatusBarPatch patch : myPatches) { - patch.clear(); - } - } - - public void addFileStatusComponent(StatusBarPatch component) { - myFileStatusComponents.add(component); - recreatePatches(); - } - - public void removeFileStatusComponent(StatusBarPatch component) { - myFileStatusComponents.remove(component); - recreatePatches(); - } - - public void cleanupCustomComponents() { - myCustomIndicationsPanel.removeAll(); - } - - public final Dimension getMinimumSize() { - final Dimension p = super.getPreferredSize(); - final Dimension m = super.getMinimumSize(); - return new Dimension(m.width, p.height); - } - - public final Dimension getMaximumSize() { - final Dimension p = super.getPreferredSize(); - final Dimension m = super.getMaximumSize(); - return new Dimension(m.width, p.height); - } - - private void setMemoryIndicatorVisible(final boolean state) { - if (myMemoryUsagePanel != null) { - myMemoryUsagePanel.setVisible(state); - } - } - - private final class MyUISettingsListener implements UISettingsListener{ - public void uiSettingsChanged(final UISettings uiSettings) { - setMemoryIndicatorVisible(uiSettings.SHOW_MEMORY_INDICATOR); - } - } - - public static class SeparatorBorder implements Border { - - private final boolean myLeft; - - public SeparatorBorder(final boolean left) { - myLeft = left; - } - - public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { - final Color bg = c.getBackground(); - g.setColor(bg != null ? bg.darker() : Color.darkGray); - final int inset = 1; - if (myLeft) { - g.drawLine(0, inset, 0, c.getHeight() - inset - 1); - } else { - g.drawLine(c.getWidth() - 1, inset, c.getWidth() - 1, c.getHeight() - inset - 1); - } - } - - public Insets getBorderInsets(final Component c) { - return new Insets(0, 1, 0, 1); - } - - public boolean isBorderOpaque() { - return false; - } - - - public static class Left extends SeparatorBorder { - public Left() { - super(true); - } - } - } - - public void startRefreshIndication(String tooltipText) { - myRefreshIcon.setToolTipText(tooltipText); - setRefreshVisible(true); - } - - public void stopRefreshIndication() { - setRefreshVisible(false); - } - - private void addPatch(StatusBarPatch panel, boolean separator) { - final Border emptyBorder = BorderFactory.createEmptyBorder(0, 2, 0, 2); - final Border separatorLeft = BorderFactory.createCompoundBorder(emptyBorder, new SeparatorBorder.Left()); - myPatches.add(panel); - JComponent component = panel.getComponent(); - if (separator) { - component.setBorder(separatorLeft); - } - else { - component.setBorder(emptyBorder); - } - component.setOpaque(false); - } -} diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarTooltipper.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarTooltipper.java deleted file mode 100644 index 13b5fa29ce23..000000000000 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarTooltipper.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2000-2009 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.openapi.wm.impl.status; - -import com.intellij.openapi.wm.StatusBar; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; - -/** - * @author cdr - */ -public class StatusBarTooltipper { - public static void install(@NotNull final StatusBarPatch patch, @NotNull final StatusBar statusBar) { - final JComponent component = patch.getComponent(); - install(patch, component, statusBar); - } - public static void install(@NotNull final StatusBarPatch patch, @NotNull final JComponent component, @NotNull final StatusBar statusBar) { - component.addMouseListener(new MouseAdapter() { - public void mouseEntered(final MouseEvent e) { - final String text = statusBar instanceof StatusBarImpl ? patch.updateStatusBar(((StatusBarImpl)statusBar).getEditor(), component) : null; - statusBar.setInfo(text); - component.setToolTipText(text); - } - - public void mouseExited(final MouseEvent e) { - statusBar.setInfo(null); - component.setToolTipText(null); - } - }); - } -} diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarUI.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarUI.java new file mode 100644 index 000000000000..93ca3d6b7895 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusBarUI.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2010 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.openapi.wm.impl.status; + +import com.intellij.util.ui.*; + +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.plaf.*; +import java.awt.*; + +/** + * User: spLeaner + */ +public class StatusBarUI extends ComponentUI { + private static final Dimension MAX_SIZE = new Dimension(Integer.MAX_VALUE, 23); + private static final Dimension MIN_SIZE = new Dimension(100, 23); + + private static final Border BACKGROUND_PAINTER = new BackgroundPainter(); + + @SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass"}) + public static ComponentUI createUI(JComponent x) { + return new StatusBarUI(); + } + + @Override + public void installUI(JComponent c) { + super.installUI(c); + } + + @Override + public void uninstallUI(JComponent c) { + super.uninstallUI(c); + } + + @Override + public void paint(final Graphics g, final JComponent c) { + final Rectangle bounds = c.getBounds(); + BACKGROUND_PAINTER.paintBorder(c, g, 0, 0, bounds.width, bounds.height); + } + + @Override + public void update(Graphics g, JComponent c) { + super.update(g, c); + } + + @Override + public Dimension getPreferredSize(JComponent c) { + return getMaximumSize(c); + } + + @Override + public Dimension getMinimumSize(JComponent c) { + return MIN_SIZE; // TODO + } + + @Override + public Dimension getMaximumSize(JComponent c) { + return MAX_SIZE; + } + + private static final class BackgroundPainter implements Border { + private static final Color BORDER_TOP_COLOR = new Color(145, 145, 145); + private static final Color BORDER2_TOP_COLOR = new Color(255, 255, 255); + private static final Color BORDER_BOTTOM_COLOR = new Color(255, 255, 255); + + private static final Color BG_COLOR = new Color(238, 238, 238); + + private static final Insets INSETS = new Insets(0, 0, 0, 0); + + public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { + final Graphics2D g2d = (Graphics2D) g.create(); + + final Color background = UIUtil.getPanelBackgound(); + + g2d.setColor(background); + g2d.fillRect(0, 0, width, height); + + g2d.setColor(BORDER_TOP_COLOR); + g2d.drawLine(0, 0, width, 0); + + g2d.setColor(BORDER2_TOP_COLOR); + g2d.drawLine(0, 1, width, 1); + + g2d.setColor(BORDER_BOTTOM_COLOR); + g2d.drawLine(0, height, width, height); + + g2d.dispose(); + } + + public Insets getBorderInsets(Component c) { + return INSETS; + } + + public boolean isBorderOpaque() { + return true; + } + } +} diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/TextPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/TextPanel.java index d550eda90291..9a89ea957285 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/TextPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/TextPanel.java @@ -15,33 +15,55 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.codeInsight.hint.HintUtil; -import com.intellij.openapi.ui.MultiLineLabelUI; -import com.intellij.ui.LightweightHint; -import com.intellij.ui.SplittingUtil; +import com.intellij.openapi.util.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -public class TextPanel extends JLabel { +public class TextPanel extends JComponent { private String myText; - private final String[] myPossibleStrings; + private final String myMaxPossibleString; - public TextPanel(final boolean shouldShowTooltip, final String... possibleStrings) { - myText = ""; - myPossibleStrings = possibleStrings; + TextPanel() { + this(null); + } - if (shouldShowTooltip) { - addMouseListener(new MyMouseListener()); + TextPanel(@Nullable final String maxPossibleString) { + myMaxPossibleString = maxPossibleString; + + setFont(SystemInfo.isMac ? UIUtil.getLabelFont().deriveFont(11.0f) : UIUtil.getLabelFont()); + setOpaque(false); + } + + @Override + protected void paintComponent(final Graphics g) { + final String s = getText(); + if (s != null) { + final Rectangle bounds = getBounds(); + final Insets insets = getInsets(); + + final Graphics2D g2 = (Graphics2D)g; + g2.setFont(getFont()); + + final int y = UIUtil.getStringY(s, bounds, g2); + if (SystemInfo.isMac) { + g2.setColor(new Color(215, 215, 215)); + g2.drawString(s, insets.left, y+1); + } + + UIUtil.applyRenderingHints(g2); + + g2.setColor(getForeground()); + g2.drawString(s, insets.left, y); } } private static String splitText(final JLabel label, final String text, final int widthLimit){ final FontMetrics fontMetrics = label.getFontMetrics(label.getFont()); - final String[] lines = SplittingUtil.splitText(text, fontMetrics, widthLimit, ' '); + final String[] lines = UIUtil.splitText(text, fontMetrics, widthLimit, ' '); final StringBuilder result = new StringBuilder(); for (int i = 0; i < lines.length; i++) { @@ -54,72 +76,18 @@ public class TextPanel extends JLabel { return result.toString(); } - - public final void setText(final String text) { - super.setText(text); - myText = text; + myText = text == null ? "" : text; + repaint(); } - public void setDisplayedMnemonic(int key) { - // status bar may not have mnemonics + public String getText() { + return myText; } - public void setDisplayedMnemonicIndex(int index) throws IllegalArgumentException { - // status bar may not have mnemonics - super.setDisplayedMnemonicIndex(-1); - } - - public final Dimension getPreferredSize(){ + public Dimension getPreferredSize(){ int max = 0; - for (String possibleString : myPossibleStrings) { - max = Math.max(max, getFontMetrics(getFont()).stringWidth(possibleString)); - } + if (myMaxPossibleString != null) max = getFontMetrics(getFont()).stringWidth(myMaxPossibleString); return new Dimension(20 + max, getMinimumSize().height); } - - private final class MyMouseListener extends MouseAdapter { - private LightweightHint myHint; - - public void mouseEntered(final MouseEvent e){ - if (myHint != null) { - myHint.hide(); - myHint = null; - } - - final int widthLimit = getSize().width - 20; - - if (getFontMetrics(getFont()).stringWidth(myText) < widthLimit) return; - - final JLabel label = new JLabel(); - label.setBorder( - BorderFactory.createCompoundBorder( - BorderFactory.createLineBorder(Color.black), - BorderFactory.createEmptyBorder(0,5,0,5) - ) - ); - label.setForeground(Color.black); - label.setBackground(HintUtil.INFORMATION_COLOR); - label.setOpaque(true); - label.setUI(new MultiLineLabelUI()); - - final JLayeredPane layeredPane = getRootPane().getLayeredPane(); - - - label.setText(splitText(label, myText, layeredPane.getWidth() - 10)); - - final Point p = SwingUtilities.convertPoint(TextPanel.this, 1, getHeight() - 1, layeredPane); - p.y -= label.getPreferredSize().height; - - myHint = new LightweightHint(label); - myHint.show(layeredPane, p.x, p.y, null); - } - - public void mouseExited(final MouseEvent e){ - if (myHint != null) { - myHint.hide(); - myHint = null; - } - } - } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java index 986e31c712b7..728bad27eb9f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/ToggleReadOnlyAttributePanel.java @@ -15,55 +15,85 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ide.DataManager; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.ui.UIBundle; -import com.intellij.util.io.ReadOnlyAttributeUtil; -import com.intellij.util.ui.EmptyIcon; +import com.intellij.ide.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import com.intellij.util.io.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.IOException; +import java.awt.event.*; +import java.io.*; -public class ToggleReadOnlyAttributePanel extends JLabel implements StatusBarPatch { - public ToggleReadOnlyAttributePanel(StatusBar statusBar) { - addMouseListener(new MouseAdapter() { - public void mouseClicked(final MouseEvent e) { - if (e.getClickCount() == 2) { - processDoubleClick(); - } - } - }); - setIconTextGap(0); - StatusBarTooltipper.install(this, statusBar); +public class ToggleReadOnlyAttributePanel implements StatusBarWidget, StatusBarWidget.IconPresentation { + private static final Icon myLockedIcon = IconLoader.getIcon("/ide/readonly.png"); + private static final Icon myUnlockedIcon = IconLoader.getIcon("/ide/readwrite.png"); + + private StatusBar myStatusBar; + + @NotNull + public Icon getIcon() { + final Editor editor = getEditor(); + return editor == null || editor.getDocument().isWritable() ? myUnlockedIcon : myLockedIcon; } - public JComponent getComponent() { + + @NotNull + public String ID() { + return "ReadOnlyAttribute"; + } + + public Presentation getPresentation(@NotNull Type type) { return this; } - private static final Icon myLockedIcon = IconLoader.getIcon("/nodes/lockedSingle.png"); - private static final Icon myUnlockedIcon = myLockedIcon == null ? null : new EmptyIcon(myLockedIcon.getIconWidth(), myLockedIcon.getIconHeight()); - public String updateStatusBar(final Editor selected, final JComponent componentSelected) { - boolean isWritable = selected == null || selected.getDocument().isWritable(); - - setIcon(isWritable ? myUnlockedIcon : myLockedIcon); - - return isReadonlyApplicable() - ? UIBundle.message("read.only.attr.panel.double.click.to.toggle.attr.tooltip.text") : null; + public void dispose() { + myStatusBar = null; } - public void clear() { - setIcon(myUnlockedIcon); + public void install(@NotNull StatusBar statusBar) { + myStatusBar = statusBar; + } + + public String getTooltipText() { + return isReadonlyApplicable() ? UIBundle.message("read.only.attr.panel.double.click.to.toggle.attr.tooltip.text") : null; + } + + public Consumer getClickConsumer() { + return new Consumer() { + public void consume(MouseEvent mouseEvent) { + final Project project = getProject(); + if (project == null) { + return; + } + final FileEditorManager editorManager = FileEditorManager.getInstance(project); + final VirtualFile[] files = editorManager.getSelectedFiles(); + if (!isReadOnlyApplicableForFiles(files)) { + return; + } + FileDocumentManager.getInstance().saveAllDocuments(); + + ApplicationManager.getApplication().runWriteAction(new Runnable() { + public void run() { + try { + ReadOnlyAttributeUtil.setReadOnlyAttribute(files[0], files[0].isWritable()); + myStatusBar.updateWidget(ID()); + } + catch (IOException e) { + Messages.showMessageDialog(project, e.getMessage(), UIBundle.message("error.dialog.title"), Messages.getErrorIcon()); + } + } + }); + } + }; } private boolean isReadonlyApplicable() { @@ -72,38 +102,26 @@ public class ToggleReadOnlyAttributePanel extends JLabel implements StatusBarPat final FileEditorManager editorManager = FileEditorManager.getInstance(project); if (editorManager == null) return false; VirtualFile[] selectedFiles = editorManager.getSelectedFiles(); - return isReadOnlyApplicable(selectedFiles); + return isReadOnlyApplicableForFiles(selectedFiles); } - private void processDoubleClick() { - final Project project = getProject(); - if (project == null) { - return; - } - final FileEditorManager editorManager = FileEditorManager.getInstance(project); - final VirtualFile[] files = editorManager.getSelectedFiles(); - if (!isReadOnlyApplicable(files)) { - return; - } - FileDocumentManager.getInstance().saveAllDocuments(); - - ApplicationManager.getApplication().runWriteAction(new Runnable() { - public void run() { - try { - ReadOnlyAttributeUtil.setReadOnlyAttribute(files[0], files[0].isWritable()); - } - catch (IOException e) { - Messages.showMessageDialog(project, e.getMessage(), UIBundle.message("error.dialog.title"), Messages.getErrorIcon()); - } - } - }); - } - - private static boolean isReadOnlyApplicable(final VirtualFile[] files) { + private static boolean isReadOnlyApplicableForFiles(final VirtualFile[] files) { return files.length > 0 && !files[0].getFileSystem().isReadOnly(); } + @Nullable + private Editor getEditor() { + final Project project = getProject(); + if (project != null) { + final FileEditorManager manager = FileEditorManager.getInstance(project); + return manager.getSelectedTextEditor(); + } + + return null; + } + + @Nullable private Project getProject() { - return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(this)); + return PlatformDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext((JComponent) myStatusBar)); } } diff --git a/platform/platform-impl/src/com/intellij/ui/SplittingUtil.java b/platform/platform-impl/src/com/intellij/ui/SplittingUtil.java deleted file mode 100644 index 2a8ac3eaea76..000000000000 --- a/platform/platform-impl/src/com/intellij/ui/SplittingUtil.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2000-2009 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.ui; - -import com.intellij.util.ArrayUtil; - -import java.awt.*; -import java.util.ArrayList; - -public class SplittingUtil { - public static String[] splitText(String text, FontMetrics fontMetrics, int widthLimit, char separator){ - ArrayList lines = new ArrayList(); - String currentLine = ""; - StringBuffer currentAtom = new StringBuffer(); - - for (int i=0; i < text.length(); i++) { - char ch = text.charAt(i); - currentAtom.append(ch); - - if (ch == separator) { - currentLine += currentAtom.toString(); - currentAtom.setLength(0); - } - - String s = currentLine + currentAtom.toString(); - int width = fontMetrics.stringWidth(s); - - if (width >= widthLimit - fontMetrics.charWidth('w')) { - if (currentLine.length() > 0) { - lines.add(currentLine); - currentLine = ""; - } - else { - lines.add(currentAtom.toString()); - currentAtom.setLength(0); - } - } - } - - String s = currentLine + currentAtom.toString(); - if (s.length() > 0) { - lines.add(s); - } - - return ArrayUtil.toStringArray(lines); - } -} diff --git a/platform/platform-resources-en/src/messages/UIBundle.properties b/platform/platform-resources-en/src/messages/UIBundle.properties index 5c78134fae01..bff0b3397edc 100644 --- a/platform/platform-resources-en/src/messages/UIBundle.properties +++ b/platform/platform-resources-en/src/messages/UIBundle.properties @@ -68,7 +68,7 @@ tool.wondow.pin.action.name=Pin tool.wondow.unpin.action.name=Unpin #0 - total, 1 - used -memory.usage.panel.statistics.message=Total heap size: {0}M Used: {1}M +memory.usage.panel.statistics.message=Allocated heap size: {0}M Used: {1}M memory.usage.panel.run.garbage.collector.action.name=Run Garbage Collector memory.usage.panel.run.garbage.collector.action.description=Run Garbage Collector #0 - used, 1 - total diff --git a/platform/platform-resources/src/idea/Keymap_Default.xml b/platform/platform-resources/src/idea/Keymap_Default.xml index a77f83edd5fa..888b311a6917 100644 --- a/platform/platform-resources/src/idea/Keymap_Default.xml +++ b/platform/platform-resources/src/idea/Keymap_Default.xml @@ -919,6 +919,7 @@ + @@ -941,6 +942,11 @@ + + + + + diff --git a/platform/util/src/com/intellij/util/lang/UrlClassLoader.java b/platform/util/src/com/intellij/util/lang/UrlClassLoader.java index 60490c6b2813..ce55ecf2e5a6 100644 --- a/platform/util/src/com/intellij/util/lang/UrlClassLoader.java +++ b/platform/util/src/com/intellij/util/lang/UrlClassLoader.java @@ -16,14 +16,11 @@ package com.intellij.util.lang; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; -import sun.misc.Resource; +import org.jetbrains.annotations.*; +import sun.misc.*; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; +import java.io.*; +import java.net.*; import java.util.*; public class UrlClassLoader extends ClassLoader { @@ -34,7 +31,7 @@ public class UrlClassLoader extends ClassLoader { protected static final long NS_THRESHOLD = 10000000; public UrlClassLoader(ClassLoader parent) { - this(Arrays.asList(((URLClassLoader)parent).getURLs()), null, true, true); + this(Arrays.asList(((URLClassLoader)parent).getURLs()), parent.getParent(), true, true); } public UrlClassLoader(List urls, ClassLoader parent) { diff --git a/platform/util/src/com/intellij/util/ui/UIUtil.java b/platform/util/src/com/intellij/util/ui/UIUtil.java index 68f644a1e3f4..f11b23ab2538 100644 --- a/platform/util/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/src/com/intellij/util/ui/UIUtil.java @@ -15,38 +15,29 @@ */ package com.intellij.util.ui; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.ui.SideBorder; -import com.intellij.util.ArrayUtil; -import com.intellij.util.ReflectionUtil; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; +import com.intellij.openapi.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.border.LineBorder; -import javax.swing.plaf.ProgressBarUI; -import javax.swing.plaf.basic.BasicTreeUI; -import javax.swing.text.html.HTMLEditorKit; -import javax.swing.text.html.StyleSheet; -import javax.swing.tree.TreePath; +import javax.swing.border.*; +import javax.swing.plaf.*; +import javax.swing.plaf.basic.*; +import javax.swing.text.html.*; +import javax.swing.tree.*; import java.awt.*; import java.awt.event.*; -import java.lang.reflect.Field; -import java.lang.reflect.Method; +import java.awt.font.*; +import java.lang.reflect.*; import java.util.*; import java.util.List; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.regex.Pattern; +import java.util.Map; +import java.util.concurrent.*; +import java.util.regex.*; /** * @author max @@ -84,6 +75,16 @@ public class UIUtil { return (modifiers & ActionEvent.ALT_MASK) == (modifiers & ActionEvent.CTRL_MASK); } + public static int getStringY(@NotNull final String string, @NotNull final Rectangle bounds, @NotNull final Graphics2D g) { + final int centerY = bounds.height / 2; + final FontMetrics fm = g.getFontMetrics(); + final Font font = g.getFont(); + final FontRenderContext frc = g.getFontRenderContext(); + final Rectangle stringBounds = font.getStringBounds(string, frc).getBounds(); + + return (int) (centerY - stringBounds.height / 2.0 - stringBounds.y); + } + public static void setEnabled(Component component, boolean enabled, boolean recursively) { component.setEnabled(enabled); if (recursively && enabled == component.isEnabled()) { @@ -102,6 +103,43 @@ public class UIUtil { g.drawLine(x1, y1, x2, y2); } + public static String[] splitText(String text, FontMetrics fontMetrics, int widthLimit, char separator){ + ArrayList lines = new ArrayList(); + String currentLine = ""; + StringBuffer currentAtom = new StringBuffer(); + + for (int i=0; i < text.length(); i++) { + char ch = text.charAt(i); + currentAtom.append(ch); + + if (ch == separator) { + currentLine += currentAtom.toString(); + currentAtom.setLength(0); + } + + String s = currentLine + currentAtom.toString(); + int width = fontMetrics.stringWidth(s); + + if (width >= widthLimit - fontMetrics.charWidth('w')) { + if (currentLine.length() > 0) { + lines.add(currentLine); + currentLine = ""; + } + else { + lines.add(currentAtom.toString()); + currentAtom.setLength(0); + } + } + } + + String s = currentLine + currentAtom.toString(); + if (s.length() > 0) { + lines.add(s); + } + + return ArrayUtil.toStringArray(lines); + } + public static void setActionNameAndMnemonic(String text, Action action) { int mnemoPos = text.indexOf('&'); if (mnemoPos >= 0 && mnemoPos < text.length() - 2) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuantitySelection.java b/platform/vcs-api/src/com/intellij/openapi/vcs/QuantitySelection.java similarity index 96% rename from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuantitySelection.java rename to platform/vcs-api/src/com/intellij/openapi/vcs/QuantitySelection.java index 35638e5d2e07..98081fb1d389 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuantitySelection.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/QuantitySelection.java @@ -13,12 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.idea.svn.dialogs; +package com.intellij.openapi.vcs; -import java.util.HashSet; -import java.util.Set; +import java.util.*; -public class QuantitySelection implements SelectionManipulation { +public class QuantitySelection implements SelectionManipulation, SelectionState { private final Group mySelected; private final Group myUnselected; diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionManipulation.java b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionManipulation.java similarity index 94% rename from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionManipulation.java rename to platform/vcs-api/src/com/intellij/openapi/vcs/SelectionManipulation.java index 2bd88e2058e9..9ce012920e14 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionManipulation.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionManipulation.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.idea.svn.dialogs; +package com.intellij.openapi.vcs; public interface SelectionManipulation { void add(T t); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionResult.java b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionResult.java similarity index 91% rename from plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionResult.java rename to platform/vcs-api/src/com/intellij/openapi/vcs/SelectionResult.java index e5ee934501ab..c109062e1d10 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/SelectionResult.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionResult.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.jetbrains.idea.svn.dialogs; +package com.intellij.openapi.vcs; -import java.util.Set; +import java.util.*; public interface SelectionResult { Set getMarked(); diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionState.java b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionState.java new file mode 100644 index 000000000000..bf9a19c1a532 --- /dev/null +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/SelectionState.java @@ -0,0 +1,16 @@ +package com.intellij.openapi.vcs; + +/** + * Created by IntelliJ IDEA. + * User: Irina.Chernushina + * Date: 30.05.2010 + * Time: 11:02:36 + * To change this template use File | Settings | File Templates. + */ +public interface SelectionState { + SelectionResult getSelected(); + + SelectionResult getUnselected(); + + boolean isSelected(T t); +} diff --git a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java index 244f716e5995..9b5776e082b5 100644 --- a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java +++ b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java @@ -15,38 +15,28 @@ */ package com.intellij.vcsUtil; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.fileTypes.FileTypes; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.Ref; -import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.io.*; import com.intellij.openapi.vcs.*; -import com.intellij.openapi.vcs.actions.VcsContextFactory; -import com.intellij.openapi.vcs.changes.Change; -import com.intellij.openapi.vcs.changes.ContentRevision; -import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VfsUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.newvfs.RefreshQueue; -import com.intellij.openapi.wm.WindowManager; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.vcs.FilePath; +import com.intellij.openapi.vcs.actions.*; +import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.vfs.newvfs.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import java.io.File; -import java.io.IOException; +import java.io.*; import java.util.*; @SuppressWarnings({"UtilityClassWithoutPrivateConstructor"}) @@ -343,7 +333,7 @@ public class VcsUtil { SwingUtilities.invokeLater(new Runnable() { public void run() { if (project.isOpen()) { - WindowManager.getInstance().getStatusBar(project).setInfo(message); + StatusBar.Info.set(message, project); } } }); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesPanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesPanel.java index b088b0b6f2ab..684f36be061f 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/CommittedChangesPanel.java @@ -22,35 +22,26 @@ */ package com.intellij.openapi.vcs.changes.committed; -import com.intellij.openapi.Disposable; +import com.intellij.openapi.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.application.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.text.*; import com.intellij.openapi.vcs.*; -import com.intellij.openapi.vcs.changes.BackgroundFromStartOption; -import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.FilterComponent; -import com.intellij.util.AsynchConsumer; -import com.intellij.util.BufferedListConsumer; -import com.intellij.util.Consumer; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.openapi.vfs.*; +import com.intellij.ui.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import javax.swing.*; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; +import javax.swing.event.*; import java.awt.*; -import java.util.ArrayList; -import java.util.Collections; +import java.util.*; import java.util.List; public class CommittedChangesPanel extends JPanel implements TypeSafeDataProvider, Disposable { @@ -63,7 +54,6 @@ public class CommittedChangesPanel extends JPanel implements TypeSafeDataProvide private final RepositoryLocation myLocation; private int myMaxCount = 0; private final MyFilterComponent myFilterComponent = new MyFilterComponent(); - private List myChangesFromProvider; private final JLabel myErrorLabel = new JLabel(); private final List myShouldBeCalledOnDispose; private volatile boolean myDisposed; @@ -200,8 +190,7 @@ public class CommittedChangesPanel extends JPanel implements TypeSafeDataProvide cache.getProjectChangesAsync(mySettings, myMaxCount, cacheOnly, new Consumer>() { public void consume(final List committedChangeLists) { - myChangesFromProvider = committedChangeLists; - updateFilteredModel(false); + updateFilteredModel(false, committedChangeLists); } }, new Consumer>() { @@ -241,18 +230,18 @@ public class CommittedChangesPanel extends JPanel implements TypeSafeDataProvide } } - private void updateFilteredModel(final boolean keepFilter) { - if (myChangesFromProvider == null) { + private void updateFilteredModel(final boolean keepFilter, List committedChangeLists) { + if (committedChangeLists == null) { return; } myBrowser.setEmptyText(VcsBundle.message("committed.changes.empty.message")); if (StringUtil.isEmpty(myFilterComponent.getFilter())) { - myBrowser.setItems(myChangesFromProvider, keepFilter, CommittedChangesBrowserUseCase.COMMITTED); + myBrowser.setItems(committedChangeLists, keepFilter, CommittedChangesBrowserUseCase.COMMITTED); } else { final FilterHelper filterHelper = new FilterHelper(myFilterComponent.getFilter()); List filteredChanges = new ArrayList(); - for(CommittedChangeList changeList: myChangesFromProvider) { + for(CommittedChangeList changeList: committedChangeLists) { if (filterHelper.filter(changeList)) { filteredChanges.add(changeList); } @@ -331,9 +320,20 @@ public class CommittedChangesPanel extends JPanel implements TypeSafeDataProvide public void passCachedListsToListener(final VcsConfigurationChangeListener.DetailedNotification notification, final Project project, final VirtualFile root) { - if ((myChangesFromProvider != null) && (! myChangesFromProvider.isEmpty())) { - notification.execute(project, root, myChangesFromProvider); - } + final LinkedList resultList = new LinkedList(); + myBrowser.reportLoadedLists(new CommittedChangeListsListener() { + public void onBeforeStartReport() { + } + public boolean report(CommittedChangeList list) { + resultList.add(list); + return false; + } + public void onAfterEndReport() { + if (! resultList.isEmpty()) { + notification.execute(project, root, resultList); + } + } + }); } public boolean isInLoad() { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/IncomingChangesIndicator.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/IncomingChangesIndicator.java index e58831df0c46..7a35159b4f26 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/IncomingChangesIndicator.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/IncomingChangesIndicator.java @@ -15,32 +15,25 @@ */ package com.intellij.openapi.vcs.changes.committed; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.vcs.VcsBundle; -import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.Disposable; -import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.PlatformDataKeys; -import com.intellij.ui.SimpleColoredComponent; -import com.intellij.util.messages.MessageBus; -import com.intellij.ide.DataManager; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.ide.*; +import com.intellij.openapi.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vcs.changes.ui.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.openapi.wm.*; +import com.intellij.util.*; +import com.intellij.util.messages.*; +import org.jetbrains.annotations.*; +import javax.swing.*; import java.awt.*; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; +import java.awt.event.*; import java.util.List; /** @@ -51,7 +44,6 @@ public class IncomingChangesIndicator implements ProjectComponent { private final Project myProject; private final CommittedChangesCache myCache; - private StatusBar myStatusBar; private IndicatorComponent myIndicatorComponent; public IncomingChangesIndicator(Project project, CommittedChangesCache cache, MessageBus bus) { @@ -69,12 +61,13 @@ public class IncomingChangesIndicator implements ProjectComponent { } public void projectOpened() { - myStatusBar = WindowManager.getInstance().getStatusBar(myProject); + final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); myIndicatorComponent = new IndicatorComponent(); - myStatusBar.addCustomIndicationComponent(myIndicatorComponent); + + statusBar.addWidget(myIndicatorComponent); Disposer.register(myProject, new Disposable() { public void dispose() { - myStatusBar.removeCustomIndicationComponent(myIndicatorComponent); + statusBar.removeWidget(myIndicatorComponent.ID()); } }); } @@ -99,47 +92,83 @@ public class IncomingChangesIndicator implements ProjectComponent { if (list == null || list.isEmpty()) { debug("Refreshing indicator: no changes"); myIndicatorComponent.clear(); - myIndicatorComponent.setToolTipText(""); } else { debug("Refreshing indicator: " + list.size() + " changes"); - myIndicatorComponent.showIcon(); - myIndicatorComponent.setToolTipText(VcsBundle.message("incoming.changes.indicator.tooltip", list.size())); + myIndicatorComponent.setChangesAvailable(VcsBundle.message("incoming.changes.indicator.tooltip", list.size())); } - myIndicatorComponent.repaint(); } private static void debug(@NonNls final String message) { LOG.debug(message); } - private static class IndicatorComponent extends SimpleColoredComponent { + private static class IndicatorComponent implements StatusBarWidget, StatusBarWidget.IconPresentation { + private StatusBar myStatusBar; + + private static final Icon CHANGES_AVAILABLE_ICON = IconLoader.getIcon("/ide/incomingChangesOn.png"); + private static final Icon CHANGES_NOT_AVAILABLE_ICON = IconLoader.getIcon("/ide/incomingChangesOff.png"); + + private Icon myCurrentIcon = CHANGES_NOT_AVAILABLE_ICON; + private String myToolTipText; + private IndicatorComponent() { - addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(final MouseEvent e) { - if (!e.isPopupTrigger()) { - DataContext dataContext = DataManager.getInstance().getDataContext(IndicatorComponent.this); - final Project project = PlatformDataKeys.PROJECT.getData(dataContext); - if (project != null) { - ToolWindow changesView = ToolWindowManager.getInstance(project).getToolWindow(ChangesViewContentManager.TOOLWINDOW_ID); - changesView.show(new Runnable() { - public void run() { - ChangesViewContentManager.getInstance(project).selectContent("Incoming"); - } - }); - } + } + + void clear() { + update(CHANGES_NOT_AVAILABLE_ICON, null); + } + + void setChangesAvailable(@NotNull final String toolTipText) { + update(CHANGES_AVAILABLE_ICON, toolTipText); + } + + private void update(@NotNull final Icon icon, @Nullable final String toolTipText) { + myCurrentIcon = icon; + myToolTipText = toolTipText; + } + + @NotNull + public Icon getIcon() { + return myCurrentIcon; + } + + public String getTooltipText() { + return myToolTipText; + } + + public Consumer getClickConsumer() { + return new Consumer() { + public void consume(final MouseEvent mouseEvent) { + DataContext dataContext = DataManager.getInstance().getDataContext((Component) myStatusBar); + final Project project = PlatformDataKeys.PROJECT.getData(dataContext); + if (project != null) { + ToolWindow changesView = ToolWindowManager.getInstance(project).getToolWindow(ChangesViewContentManager.TOOLWINDOW_ID); + changesView.show(new Runnable() { + public void run() { + ChangesViewContentManager.getInstance(project).selectContent("Incoming"); + } + }); } } - }); + }; } - private void showIcon() { - setIcon(IconLoader.getIcon("/actions/get.png")); + @NotNull + public String ID() { + return "IncomingChanges"; } - public Dimension getPreferredSize() { - return new Dimension(18, 18); + public Presentation getPresentation(@NotNull Type type) { + return this; + } + + public void install(@NotNull StatusBar statusBar) { + myStatusBar = statusBar; + } + + public void dispose() { + myStatusBar = null; } } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java index 99fd98a54e86..15b58452d9ef 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java @@ -15,71 +15,39 @@ */ package com.intellij.openapi.vcs.impl; -import com.intellij.ide.actions.CloseTabToolbarAction; -import com.intellij.ide.errorTreeView.ErrorTreeElementKind; -import com.intellij.ide.errorTreeView.HotfixData; -import com.intellij.ide.errorTreeView.SimpleErrorData; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.application.Application; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.openapi.diagnostic.Logger; +import com.intellij.ide.actions.*; +import com.intellij.ide.errorTreeView.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.command.*; +import com.intellij.openapi.diagnostic.*; import com.intellij.openapi.diff.*; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypeManager; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Getter; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; import com.intellij.openapi.vcs.*; -import com.intellij.openapi.vcs.annotate.Annotater; -import com.intellij.openapi.vcs.annotate.AnnotationProvider; -import com.intellij.openapi.vcs.annotate.FileAnnotation; -import com.intellij.openapi.vcs.changes.BackgroundFromStartOption; -import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vcs.FilePath; +import com.intellij.openapi.vcs.annotate.*; +import com.intellij.openapi.vcs.changes.*; import com.intellij.openapi.vcs.changes.committed.*; import com.intellij.openapi.vcs.changes.ui.*; -import com.intellij.openapi.vcs.ex.ProjectLevelVcsManagerEx; +import com.intellij.openapi.vcs.ex.*; import com.intellij.openapi.vcs.history.*; -import com.intellij.openapi.vcs.merge.MergeProvider; -import com.intellij.openapi.vcs.merge.MultipleFileMergeDialog; -import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings; -import com.intellij.openapi.vcs.versionBrowser.ChangesBrowserSettingsEditor; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowId; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.ui.content.Content; -import com.intellij.ui.content.ContentFactory; -import com.intellij.ui.content.ContentManager; -import com.intellij.ui.content.MessageView; -import com.intellij.util.AsynchConsumer; -import com.intellij.util.BufferedListConsumer; -import com.intellij.util.Consumer; -import com.intellij.util.ContentsUtil; -import com.intellij.util.ui.ConfirmationDialog; -import com.intellij.util.ui.ErrorTreeView; -import com.intellij.util.ui.MessageCategory; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.vcs.merge.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.content.*; +import com.intellij.util.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; import java.awt.*; -import java.io.File; -import java.io.IOException; -import java.text.MessageFormat; +import java.io.*; +import java.text.*; import java.util.*; import java.util.List; @@ -126,7 +94,7 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { private final String myRepositoryPath; private final AbstractVcs myVcs; private final Runnable myRefresher; - private VcsAbstractHistorySession mySession; + private volatile VcsAbstractHistorySession mySession; private final BufferedListConsumer myBuffer; private MyVcsAppendableHistorySessionPartner(final VcsHistoryProvider vcsHistoryProvider, final AnnotationProvider annotationProvider, @@ -145,7 +113,7 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { mySession.getRevisionList().addAll(vcsFileRevisions); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { - myFileHistoryPanel.getHistoryPanelRefresh().consume(mySession); + ensureHistoryPanelCreated().getHistoryPanelRefresh().consume(mySession); } }); } @@ -156,23 +124,23 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { myBuffer.consumeOne(revision); } + private FileHistoryPanelImpl ensureHistoryPanelCreated() { + if (myFileHistoryPanel == null) { + ContentManager contentManager = ProjectLevelVcsManagerEx.getInstanceEx(myVcs.getProject()).getContentManager(); + myFileHistoryPanel = new FileHistoryPanelImpl(myVcs.getProject(), myPath, myRepositoryPath, mySession, myVcsHistoryProvider, + myAnnotationProvider, contentManager, myRefresher); + } + return myFileHistoryPanel; + } + public void reportCreatedEmptySession(final VcsAbstractHistorySession session) { mySession = session; - if (myFileHistoryPanel != null) { - ApplicationManager.getApplication().invokeLater(new Runnable() { - public void run() { - myFileHistoryPanel.getHistoryPanelRefresh().consume(mySession); - } - }); - return; - } ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { String actionName = VcsBundle.message("action.name.file.history", myPath.getName()); ContentManager contentManager = ProjectLevelVcsManagerEx.getInstanceEx(myVcs.getProject()).getContentManager(); - myFileHistoryPanel = new FileHistoryPanelImpl(myVcs.getProject(), myPath, myRepositoryPath, session, myVcsHistoryProvider, - myAnnotationProvider, contentManager, myRefresher); + myFileHistoryPanel = ensureHistoryPanelCreated(); Content content = ContentFactory.SERVICE.getInstance().createContent(myFileHistoryPanel, actionName, true); ContentsUtil.addOrReplaceContent(contentManager, content, true); @@ -191,9 +159,7 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { myBuffer.flush(); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { - if (myFileHistoryPanel != null) { - myFileHistoryPanel.getHistoryPanelRefresh().finished(); - } + ensureHistoryPanelCreated().getHistoryPanelRefresh().finished(); } }); } diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java index f8eb8165eb97..adaabfa7dc95 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/quickedit/QuickEditEditor.java @@ -16,28 +16,24 @@ package org.intellij.plugins.intelliLang.inject.quickedit; -import com.intellij.ide.highlighter.HighlighterFactory; +import com.intellij.ide.highlighter.*; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.application.Result; -import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.EditorSettings; -import com.intellij.openapi.editor.ex.EditorEx; -import com.intellij.openapi.editor.impl.EditorImpl; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.popup.JBPopup; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.psi.PsiDocumentManager; -import com.intellij.ui.plaf.beg.BegBorders; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.application.*; +import com.intellij.openapi.command.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.ex.*; +import com.intellij.openapi.editor.impl.*; +import com.intellij.openapi.fileTypes.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.popup.*; +import com.intellij.openapi.wm.*; +import com.intellij.psi.*; +import com.intellij.ui.plaf.beg.*; +import org.jetbrains.annotations.*; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyEvent; +import java.awt.event.*; // Adapted from QuickEditHotspot that came with the source of the first designer release ;) public class QuickEditEditor { @@ -124,9 +120,7 @@ public class QuickEditEditor { } private void setStatusBarText(String text) { - WindowManager wm = WindowManager.getInstance(); - final StatusBar statusBar = wm.getStatusBar(myProject); - statusBar.setInfo(text); + StatusBar.Info.set(text, myProject); } public void uninstall() { diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java index 174c27eabafd..efe1bf336f6b 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java @@ -15,23 +15,16 @@ */ package com.siyeh.ipp.base; -import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction; -import com.intellij.openapi.editor.CaretModel; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.ReadonlyStatusHandler; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.codeInsight.intention.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.vfs.*; import com.intellij.psi.*; -import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.codeStyle.JavaCodeStyleManager; -import com.intellij.util.IncorrectOperationException; -import com.siyeh.IntentionPowerPackBundle; -import com.siyeh.ipp.psiutils.BoolUtils; -import com.siyeh.ipp.psiutils.ComparisonUtils; -import com.siyeh.ipp.psiutils.ParenthesesUtils; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.codeStyle.*; +import com.intellij.util.*; +import com.siyeh.*; +import com.siyeh.ipp.psiutils.*; +import org.jetbrains.annotations.*; public abstract class Intention extends PsiElementBaseIntentionAction { private final PsiElementPredicate predicate; @@ -192,7 +185,7 @@ public abstract class Intention extends PsiElementBaseIntentionAction { } - public boolean isAvailable(@NotNull Project project, Editor editor, PsiElement element) { + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { while (element != null) { if (predicate.satisfiedBy(element)) { return true; diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java index 69fadc96e4e1..4d467874a0fb 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java @@ -15,10 +15,10 @@ */ package com.siyeh.ipp.base; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import org.jetbrains.annotations.*; public abstract class MutablyNamedIntention extends Intention{ @@ -31,7 +31,7 @@ public abstract class MutablyNamedIntention extends Intention{ return m_text; } - public boolean isAvailable(@NotNull Project project, Editor editor, PsiElement node) { + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement node) { final PsiElement element = findMatchingElement(node); if(element != null){ m_text = getTextForElement(element); diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/MoveDeclarationIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/MoveDeclarationIntention.java index 94cc540786f0..dd3c5f8c5748 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/MoveDeclarationIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/MoveDeclarationIntention.java @@ -15,24 +15,20 @@ */ package com.siyeh.ipp.decls; -import com.intellij.codeInsight.highlighting.HighlightManager; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.colors.EditorColors; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.editor.colors.EditorColorsScheme; -import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; +import com.intellij.codeInsight.highlighting.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.editor.colors.*; +import com.intellij.openapi.editor.markup.*; +import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.*; import com.intellij.psi.*; -import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import com.siyeh.IntentionPowerPackBundle; -import com.siyeh.ipp.base.Intention; -import com.siyeh.ipp.base.PsiElementPredicate; -import org.jetbrains.annotations.NotNull; +import com.intellij.psi.search.searches.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import com.siyeh.*; +import com.siyeh.ipp.base.*; +import org.jetbrains.annotations.*; public class MoveDeclarationIntention extends Intention { @@ -97,10 +93,8 @@ public class MoveDeclarationIntention extends Intention { highlightManager.addOccurrenceHighlights(editor, elements, textattributes, true, null); - final WindowManager windowManager = WindowManager.getInstance(); - final StatusBar statusBar = windowManager.getStatusBar(project); - statusBar.setInfo(IntentionPowerPackBundle.message( - "status.bar.escape.highlighting.message")); + StatusBar.Info.set(IntentionPowerPackBundle.message( + "status.bar.escape.highlighting.message"), project); } private static PsiDeclarationStatement moveDeclarationToReference( diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/fqnames/ReplaceFullyQualifiedNameWithImportIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/fqnames/ReplaceFullyQualifiedNameWithImportIntention.java index 8a5d41120180..1eb7fec6d816 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/fqnames/ReplaceFullyQualifiedNameWithImportIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/fqnames/ReplaceFullyQualifiedNameWithImportIntention.java @@ -15,26 +15,19 @@ */ package com.siyeh.ipp.fqnames; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.*; import com.intellij.psi.*; import com.intellij.psi.util.ClassUtil; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import com.siyeh.IntentionPowerPackBundle; -import com.siyeh.ipp.base.Intention; -import com.siyeh.ipp.base.PsiElementPredicate; -import com.siyeh.ipp.psiutils.HighlightUtil; -import com.siyeh.ipp.psiutils.ImportUtils; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import com.siyeh.*; +import com.siyeh.ipp.base.*; +import com.siyeh.ipp.psiutils.*; +import org.jetbrains.annotations.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; +import java.util.*; public class ReplaceFullyQualifiedNameWithImportIntention extends Intention { @@ -103,16 +96,17 @@ public class ReplaceFullyQualifiedNameWithImportIntention extends Intention { } private static void showStatusMessage(Project project, int elementCount) { - final WindowManager windowManager = WindowManager.getInstance(); - final StatusBar statusBar = windowManager.getStatusBar(project); + final String text; if (elementCount == 1) { - statusBar.setInfo(IntentionPowerPackBundle.message( - "1.fully.qualified.name.status.bar.escape.highlighting.message")); + text = IntentionPowerPackBundle.message( + "1.fully.qualified.name.status.bar.escape.highlighting.message"); } else { - statusBar.setInfo(IntentionPowerPackBundle.message( + text = IntentionPowerPackBundle.message( "multiple.fully.qualified.names.status.bar.escape.highlighting.message", - Integer.valueOf(elementCount - 1))); + Integer.valueOf(elementCount - 1)); } + + StatusBar.Info.set(text, project); } private static void addImport(PsiImportList importList, PsiClass aClass) diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsExecution/CvsOperationExecutor.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsExecution/CvsOperationExecutor.java index dc2f5b1bde5a..ea62b3bce053 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsExecution/CvsOperationExecutor.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/cvsExecution/CvsOperationExecutor.java @@ -15,44 +15,31 @@ */ package com.intellij.cvsSupport2.cvsExecution; -import com.intellij.CvsBundle; -import com.intellij.cvsSupport2.CvsResultEx; -import com.intellij.cvsSupport2.config.CvsConfiguration; -import com.intellij.cvsSupport2.config.ui.ConfigureCvsGlobalSettingsDialog; -import com.intellij.cvsSupport2.config.ui.CvsConfigurationsListEditor; -import com.intellij.cvsSupport2.cvshandlers.CvsHandler; -import com.intellij.cvsSupport2.errorHandling.CvsException; -import com.intellij.cvsSupport2.ui.CvsTabbedWindow; -import com.intellij.openapi.actionSystem.ActionManager; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.DefaultActionGroup; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.cvsIntegration.CvsResult; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.EditorSettings; +import com.intellij.*; +import com.intellij.cvsSupport2.*; +import com.intellij.cvsSupport2.config.*; +import com.intellij.cvsSupport2.config.ui.*; +import com.intellij.cvsSupport2.cvshandlers.*; +import com.intellij.cvsSupport2.errorHandling.*; +import com.intellij.cvsSupport2.ui.*; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.cvsIntegration.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; import com.intellij.openapi.progress.*; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vcs.VcsException; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.ui.content.ContentManager; -import com.intellij.ui.errorView.ContentManagerProvider; -import com.intellij.ui.errorView.ErrorViewFactory; -import com.intellij.util.ui.ErrorTreeView; -import com.intellij.util.ui.MessageCategory; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.content.*; +import com.intellij.ui.errorView.*; +import com.intellij.util.ui.*; +import org.jetbrains.annotations.*; -import java.util.ArrayList; -import java.util.List; +import java.util.*; /** * author: lesya @@ -120,14 +107,10 @@ public class CvsOperationExecutor { finally { if ((myProject != null) && (handler != CvsHandler.NULL)) { - StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); - if (statusBar != null) { - statusBar.setInfo(getStatusMessage(handler)); - } + StatusBar.Info.set(getStatusMessage(handler), myProject); } } } - } }; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java index 18ef0e0358fd..2794df67a204 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/SuppressForMemberFix.java @@ -16,28 +16,22 @@ package org.jetbrains.plugins.groovy.codeInspection; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInsight.daemon.HighlightDisplayKey; -import com.intellij.codeInspection.InspectionsBundle; -import com.intellij.codeInspection.SuppressIntentionAction; -import com.intellij.codeInspection.SuppressManager; -import com.intellij.codeInspection.SuppressManagerImpl; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInsight.daemon.*; +import com.intellij.codeInspection.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocCommentOwner; -import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; -import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeParameter; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; +import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.*; +import org.jetbrains.plugins.groovy.lang.psi.*; +import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.*; +import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.*; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.*; +import org.jetbrains.plugins.groovy.lang.psi.api.types.*; /** * @author peter @@ -85,7 +79,7 @@ public class SuppressForMemberFix extends SuppressIntentionAction { return InspectionsBundle.message("suppress.inspection.family"); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement context) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement context) { final GrDocCommentOwner container = getContainer(context); myKey = container instanceof PsiClass ? "suppress.inspection.class" diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java b/plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java index da2c5089f196..9dd35609e90b 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/HgVcs.java @@ -237,9 +237,9 @@ public class HgVcs extends AbstractVcs { StatusBar statusBar = WindowManager.getInstance().getStatusBar(myProject); if (statusBar != null) { - statusBar.addCustomIndicationComponent(hgCurrentBranchStatus); - statusBar.addCustomIndicationComponent(incomingChangesStatus); - statusBar.addCustomIndicationComponent(outgoingChangesStatus); + statusBar.addWidget(hgCurrentBranchStatus, myProject); + statusBar.addWidget(incomingChangesStatus, myProject); + statusBar.addWidget(outgoingChangesStatus, myProject); } final HgIncomingStatusUpdater incomingUpdater = @@ -295,9 +295,9 @@ public class HgVcs extends AbstractVcs { changesUpdaterScheduledFuture.cancel(true); } if (statusBar != null) { - statusBar.removeCustomIndicationComponent(incomingChangesStatus); - statusBar.removeCustomIndicationComponent(outgoingChangesStatus); - statusBar.removeCustomIndicationComponent(hgCurrentBranchStatus); + //statusBar.removeCustomIndicationComponent(incomingChangesStatus); + //statusBar.removeCustomIndicationComponent(outgoingChangesStatus); + //statusBar.removeCustomIndicationComponent(hgCurrentBranchStatus); } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgChangesetStatus.java b/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgChangesetStatus.java index c69c231abca9..dbef7b5d3e4f 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgChangesetStatus.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgChangesetStatus.java @@ -12,13 +12,13 @@ // limitations under the License. package org.zmlx.hg4idea.ui; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.annotations.*; -import javax.swing.Icon; -import javax.swing.JLabel; -import javax.swing.SwingConstants; +import javax.swing.*; -public class HgChangesetStatus extends JLabel { +public class HgChangesetStatus extends JLabel implements CustomStatusBarWidget { public HgChangesetStatus(Icon icon) { super(icon, SwingConstants.TRAILING); @@ -43,4 +43,22 @@ public class HgChangesetStatus extends JLabel { String asString(); } + public JComponent getComponent() { + return this; + } + + @NotNull + public String ID() { + return "HgChangeSetStatus"; + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + } } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCurrentBranchStatus.java b/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCurrentBranchStatus.java index 3296a231f299..b7dfe76b4cf0 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCurrentBranchStatus.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/ui/HgCurrentBranchStatus.java @@ -13,6 +13,7 @@ package org.zmlx.hg4idea.ui; import com.intellij.openapi.util.*; +import com.intellij.openapi.wm.*; import org.apache.commons.lang.*; import org.jetbrains.annotations.*; import org.zmlx.hg4idea.*; @@ -20,8 +21,7 @@ import org.zmlx.hg4idea.*; import javax.swing.*; import java.util.*; -public class HgCurrentBranchStatus extends JLabel { - +public class HgCurrentBranchStatus extends JLabel implements CustomStatusBarWidget { private static final Icon MERCURIAL_ICON = IconLoader.getIcon("/images/mercurial.png"); public HgCurrentBranchStatus() { @@ -50,4 +50,22 @@ public class HgCurrentBranchStatus extends JLabel { setToolTipText(toolTipText); } + public JComponent getComponent() { + return this; + } + + @NotNull + public String ID() { + return "HgCurrentBranchStatus"; + } + + public Presentation getPresentation(@NotNull Type type) { + return null; + } + + public void install(@NotNull StatusBar statusBar) { + } + + public void dispose() { + } } diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/SuppressByCommentOutAction.java b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/SuppressByCommentOutAction.java index dea3e27877d5..6cf4fcfc00a9 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/SuppressByCommentOutAction.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/SuppressByCommentOutAction.java @@ -15,20 +15,18 @@ */ package com.intellij.codeInspection.i18n; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; -import com.intellij.codeInspection.InspectionsBundle; -import com.intellij.codeInspection.SuppressIntentionAction; -import com.intellij.lang.StdLanguages; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; +import com.intellij.codeInsight.daemon.*; +import com.intellij.codeInspection.*; +import com.intellij.lang.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.text.*; import com.intellij.psi.*; -import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.impl.source.tree.injected.*; +import com.intellij.psi.tree.*; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * User: cdr @@ -71,8 +69,8 @@ class SuppressByCommentOutAction extends SuppressIntentionAction { } @Override - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - if (element == null || !element.isValid()) { + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + if (!element.isValid()) { return false; } // find java code up there, going through injecttions if necessary diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java b/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java index 031fd8b450da..9b2d7e6701e1 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java +++ b/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java @@ -15,23 +15,16 @@ */ package com.intellij.lang.properties; -import com.intellij.codeInsight.CodeInsightUtilBase; -import com.intellij.codeInspection.CustomSuppressableInspectionTool; -import com.intellij.codeInspection.LocalInspectionTool; -import com.intellij.codeInspection.SuppressIntentionAction; -import com.intellij.lang.properties.psi.PropertiesFile; -import com.intellij.lang.properties.psi.PropertiesList; -import com.intellij.lang.properties.psi.Property; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; +import com.intellij.codeInsight.*; +import com.intellij.codeInspection.*; +import com.intellij.lang.properties.psi.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; import com.intellij.psi.*; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.util.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; /** * User: cdr @@ -106,7 +99,7 @@ public abstract class PropertySuppressableInspectionBase extends LocalInspection return PropertiesBundle.message("unused.property.suppress.for.property"); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { final Property property = PsiTreeUtil.getParentOfType(element, Property.class); return property != null && property.isValid(); } @@ -146,8 +139,8 @@ public abstract class PropertySuppressableInspectionBase extends LocalInspection return PropertiesBundle.message("unused.property.suppress.for.file"); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { - return element != null && element.isValid() && element.getContainingFile() instanceof PropertiesFile; + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { + return element.isValid() && element.getContainingFile() instanceof PropertiesFile; } public void invoke(final Project project, final Editor editor, final PsiElement element) throws IncorrectOperationException { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties index 50108448029c..d5a54ecf35cd 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties @@ -609,8 +609,8 @@ svn.dialog.select.ignore.patterns.to.remove.prompt=Files being deleted are ignor Some of 'svn:ignore' patterns may become outdated.\n\ Select 'svn:ignore' patterns to be deleted. detect.nested.working.copies=Detect nested working copies -svn.changeview.item.in.conflict.text=File have {0} conflict(s) and can not be committed -svn.changeview.locally.deleted.item.in.conflict.text=File have {0} conflict(s) +svn.changeview.item.in.conflict.text=File has {0} conflict(s) and can not be committed +svn.changeview.locally.deleted.item.in.conflict.text=File has {0} conflict(s) action.mark.tree.conflict.resolved.text=Mark Tree Conflict Resolved... action.mark.tree.conflict.resolved.confirmation.text=Do you want to mark tree conflict as resolved? action.mark.tree.conflict.resolved.confirmation.title=Mark Tree Conflict Resolved diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form index 5700a792abf2..da771de23f12 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form @@ -1,16 +1,16 @@

- + - + - + @@ -137,7 +137,7 @@ - + @@ -145,7 +145,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -180,6 +180,14 @@ + + + + + + + +
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index a1aa7cf53daa..cb2d24c466d1 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -17,26 +17,21 @@ package org.jetbrains.idea.svn; -import com.intellij.ide.util.PropertiesComponent; -import com.intellij.openapi.application.ApplicationNamesInfo; -import com.intellij.openapi.fileChooser.FileChooser; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.options.Configurable; -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.ui.TextFieldWithBrowseButton; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.ui.MultiLineTooltipUI; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.idea.svn.config.ConfigureProxiesListener; -import org.tmatesoft.svn.core.wc.SVNWCUtil; +import com.intellij.ide.util.*; +import com.intellij.openapi.application.*; +import com.intellij.openapi.fileChooser.*; +import com.intellij.openapi.options.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.vfs.*; +import com.intellij.ui.*; +import org.jetbrains.annotations.*; +import org.jetbrains.idea.svn.config.*; +import org.tmatesoft.svn.core.wc.*; import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; +import java.awt.event.*; +import java.io.*; public class SvnConfigurable implements Configurable { @@ -53,6 +48,7 @@ public class SvnConfigurable implements Configurable { private JLabel myUseCommonProxyLabel; private JLabel myEditProxyLabel; private JCheckBox myLockOnDemand; + private JCheckBox myCheckNestedInQuickMerge; private JCheckBox myDetectNestedWorkingCopiesCheckBox; private JCheckBox myIgnoreWhitespaceDifferenciesInCheckBox; private JCheckBox myShowMergeSourceInAnnotate; @@ -173,6 +169,9 @@ public class SvnConfigurable implements Configurable { if (configuration.DETECT_NESTED_COPIES != myDetectNestedWorkingCopiesCheckBox.isSelected()) { return true; } + if (configuration.CHECK_NESTED_FOR_QUICK_MERGE != myCheckNestedInQuickMerge.isSelected()) { + return true; + } if (configuration.IGNORE_SPACES_IN_ANNOTATE != myIgnoreWhitespaceDifferenciesInCheckBox.isSelected()) { return true; } @@ -200,7 +199,8 @@ public class SvnConfigurable implements Configurable { if ((! configuration.DETECT_NESTED_COPIES) && (configuration.DETECT_NESTED_COPIES != myDetectNestedWorkingCopiesCheckBox.isSelected())) { SvnVcs.getInstance(myProject).invokeRefreshSvnRoots(true); } - configuration.DETECT_NESTED_COPIES = myDetectNestedWorkingCopiesCheckBox.isSelected(); + configuration.DETECT_NESTED_COPIES = myDetectNestedWorkingCopiesCheckBox.isSelected(); + configuration.CHECK_NESTED_FOR_QUICK_MERGE = myCheckNestedInQuickMerge.isSelected(); configuration.UPDATE_LOCK_ON_DEMAND = myLockOnDemand.isSelected(); configuration.setIgnoreSpacesInAnnotate(myIgnoreWhitespaceDifferenciesInCheckBox.isSelected()); configuration.SHOW_MERGE_SOURCES_IN_ANNOTATE = myShowMergeSourceInAnnotate.isSelected(); @@ -221,6 +221,7 @@ public class SvnConfigurable implements Configurable { myUseDefaultCheckBox.setSelected(configuration.isUseDefaultConfiguation()); myUseCommonProxy.setSelected(configuration.isIsUseDefaultProxy()); myDetectNestedWorkingCopiesCheckBox.setSelected(configuration.DETECT_NESTED_COPIES); + myCheckNestedInQuickMerge.setSelected(configuration.CHECK_NESTED_FOR_QUICK_MERGE); boolean enabled = !myUseDefaultCheckBox.isSelected(); myConfigurationDirectoryText.setEnabled(enabled); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java index 585dc38e4d44..93174cb2f583 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfiguration.java @@ -17,34 +17,23 @@ package org.jetbrains.idea.svn; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.components.ProjectComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.progress.ProcessCanceledException; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.Project; +import com.intellij.openapi.application.*; +import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; import com.intellij.openapi.util.*; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vcs.annotate.AnnotationListener; -import org.jdom.Attribute; -import org.jdom.DataConversionException; -import org.jdom.Element; -import org.jetbrains.idea.svn.dialogs.SvnAuthenticationProvider; -import org.jetbrains.idea.svn.dialogs.SvnInteractiveAuthenticationProvider; -import org.jetbrains.idea.svn.update.MergeRootInfo; -import org.jetbrains.idea.svn.update.UpdateRootInfo; -import org.tmatesoft.svn.core.SVNDepth; -import org.tmatesoft.svn.core.auth.ISVNAuthenticationManager; -import org.tmatesoft.svn.core.internal.wc.ISVNAuthenticationStorage; -import org.tmatesoft.svn.core.internal.wc.SVNConfigFile; -import org.tmatesoft.svn.core.internal.wc.SVNFileUtil; -import org.tmatesoft.svn.core.wc.ISVNOptions; -import org.tmatesoft.svn.core.wc.SVNWCUtil; +import com.intellij.openapi.util.io.*; +import com.intellij.openapi.vcs.annotate.*; +import org.jdom.*; +import org.jetbrains.idea.svn.dialogs.*; +import org.jetbrains.idea.svn.update.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.auth.*; +import org.tmatesoft.svn.core.internal.wc.*; +import org.tmatesoft.svn.core.wc.*; -import java.io.File; -import java.io.FilenameFilter; +import java.io.*; import java.util.*; public class SvnConfiguration implements ProjectComponent, JDOMExternalizable { @@ -86,6 +75,7 @@ public class SvnConfiguration implements ProjectComponent, JDOMExternalizable { public boolean UPDATE_LOCK_ON_DEMAND = false; public boolean IGNORE_SPACES_IN_MERGE = false; public boolean DETECT_NESTED_COPIES = true; + public boolean CHECK_NESTED_FOR_QUICK_MERGE = false; public boolean IGNORE_SPACES_IN_ANNOTATE = true; public boolean SHOW_MERGE_SOURCES_IN_ANNOTATE = true; diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/checkout/CheckoutEventHandler.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/checkout/CheckoutEventHandler.java index e7be4c54fff6..c8e4b3b00cf5 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/checkout/CheckoutEventHandler.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/checkout/CheckoutEventHandler.java @@ -15,19 +15,12 @@ */ package org.jetbrains.idea.svn.checkout; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import org.jetbrains.idea.svn.SvnBundle; -import org.jetbrains.idea.svn.SvnUtil; -import org.jetbrains.idea.svn.SvnVcs; -import org.tmatesoft.svn.core.SVNCancelException; -import org.tmatesoft.svn.core.SVNErrorCode; -import org.tmatesoft.svn.core.SVNErrorMessage; -import org.tmatesoft.svn.core.wc.ISVNEventHandler; -import org.tmatesoft.svn.core.wc.SVNEvent; -import org.tmatesoft.svn.core.wc.SVNEventAction; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.idea.svn.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.wc.*; public class CheckoutEventHandler implements ISVNEventHandler { private final ProgressIndicator myIndicator; @@ -62,10 +55,7 @@ public class CheckoutEventHandler implements ISVNEventHandler { myExternalsCount = 1; Project project = myVCS.getProject(); if (project != null) { - StatusBar statusBar = WindowManager.getInstance().getStatusBar(project); - if (statusBar != null) { - statusBar.setInfo(SvnBundle.message(myIsExport ? "progress.text2.exported.revision" : "status.text.checked.out.revision", event.getRevision())); - } + StatusBar.Info.set(SvnBundle.message(myIsExport ? "progress.text2.exported.revision" : "status.text.checked.out.revision", event.getRevision()), project); } } } else if (event.getAction() == SVNEventAction.COMMIT_ADDED) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/BranchMerger.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/BranchMerger.java index 2912bcab8f93..a63136bd3dbf 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/BranchMerger.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/BranchMerger.java @@ -15,19 +15,14 @@ */ package org.jetbrains.idea.svn.dialogs; -import com.intellij.util.NotNullFunction; -import org.jetbrains.idea.svn.SvnConfiguration; -import org.jetbrains.idea.svn.SvnVcs; -import org.jetbrains.idea.svn.integrate.IMerger; -import org.jetbrains.idea.svn.update.UpdateEventHandler; -import org.tmatesoft.svn.core.SVNDepth; -import org.tmatesoft.svn.core.SVNException; -import org.tmatesoft.svn.core.SVNURL; -import org.tmatesoft.svn.core.wc.SVNDiffClient; -import org.tmatesoft.svn.core.wc.SVNDiffOptions; -import org.tmatesoft.svn.core.wc.SVNRevision; +import com.intellij.util.*; +import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.integrate.*; +import org.jetbrains.idea.svn.update.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.wc.*; -import java.io.File; +import java.io.*; public class BranchMerger implements IMerger { private final SvnVcs myVcs; @@ -37,6 +32,7 @@ public class BranchMerger implements IMerger { private final UpdateEventHandler myHandler; private final boolean myReintegrate; private final String myBranchName; + private final long mySourceCopyRevision; private boolean myAtStart; private long mySourceLatestRevision; @@ -44,7 +40,7 @@ public class BranchMerger implements IMerger { final SVNURL sourceUrl, final SVNURL targetUrl, final String targetPath, final UpdateEventHandler handler, - final boolean isReintegrate, final String branchName) { + final boolean isReintegrate, final String branchName, final long sourceCopyRevision) { myVcs = vcs; myTargetPath = targetPath; mySourceUrl = sourceUrl; @@ -52,6 +48,7 @@ public class BranchMerger implements IMerger { myHandler = handler; myReintegrate = isReintegrate; myBranchName = branchName; + mySourceCopyRevision = sourceCopyRevision; myAtStart = true; try { mySourceLatestRevision = myVcs.createRepository(mySourceUrl).getLatestRevision(); @@ -80,9 +77,7 @@ public class BranchMerger implements IMerger { if (myReintegrate) { dc.doMergeReIntegrate(mySourceUrl, SVNRevision.UNDEFINED, new File(myTargetPath), false); } else { - final long targetRevision = myVcs.createRepository(myTargetUrl).getLatestRevision(); - - dc.doMerge(myTargetUrl, SVNRevision.create(targetRevision), mySourceUrl, SVNRevision.create(mySourceLatestRevision), + dc.doMerge(mySourceUrl, SVNRevision.create(mySourceCopyRevision), mySourceUrl, SVNRevision.create(mySourceLatestRevision), new File(myTargetPath), SVNDepth.INFINITY, true, true, false, false); } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/CopiesPanel.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/CopiesPanel.java index 152f67804c52..b494c05d8823 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/CopiesPanel.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/CopiesPanel.java @@ -15,44 +15,34 @@ */ package org.jetbrains.idea.svn.dialogs; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.ModalityState; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.vcs.ObjectsConvertor; -import com.intellij.openapi.vfs.LocalFileSystem; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.wm.IdeFocusManager; -import com.intellij.ui.DottedBorder; -import com.intellij.ui.components.labels.LinkLabel; -import com.intellij.ui.components.labels.LinkListener; -import com.intellij.util.containers.Convertor; -import com.intellij.util.io.EqualityPolicy; -import com.intellij.util.messages.MessageBusConnection; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.idea.svn.NestedCopyType; -import org.jetbrains.idea.svn.SvnVcs; -import org.jetbrains.idea.svn.WorkingCopyFormat; -import org.jetbrains.idea.svn.actions.SelectBranchPopup; -import org.jetbrains.idea.svn.branchConfig.SvnBranchConfigurationNew; -import org.jetbrains.idea.svn.checkout.SvnCheckoutProvider; -import org.tmatesoft.svn.core.SVNDepth; -import org.tmatesoft.svn.core.internal.util.SVNPathUtil; -import org.tmatesoft.svn.core.wc.SVNRevision; +import com.intellij.openapi.application.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vfs.*; +import com.intellij.openapi.wm.*; +import com.intellij.ui.*; +import com.intellij.ui.components.labels.*; +import com.intellij.util.containers.*; +import com.intellij.util.io.*; +import com.intellij.util.messages.*; +import com.intellij.util.ui.*; +import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.actions.*; +import org.jetbrains.idea.svn.branchConfig.*; +import org.jetbrains.idea.svn.checkout.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.internal.util.*; +import org.tmatesoft.svn.core.wc.*; import javax.swing.*; -import javax.swing.border.Border; +import javax.swing.border.*; import java.awt.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.io.File; -import java.util.Collections; -import java.util.Comparator; +import java.awt.event.*; +import java.io.*; +import java.util.*; import java.util.List; public class CopiesPanel { @@ -266,7 +256,7 @@ public class CopiesPanel { private void mergeFrom(final WCInfo wcInfo, final VirtualFile root, final LinkLabel mergeLabel) { SelectBranchPopup.showForBranchRoot(myProject, root, new SelectBranchPopup.BranchSelectedCallback() { public void branchSelected(Project project, SvnBranchConfigurationNew configuration, String url, long revision) { - new QuickMerge(project, url, wcInfo, SVNPathUtil.tail(url), configuration, root).execute(); + new QuickMerge(project, url, wcInfo, SVNPathUtil.tail(url), root).execute(); } }, "Select branch", mergeLabel); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java index 4712297139ee..72eb49d661ee 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/QuickMerge.java @@ -15,73 +15,43 @@ */ package org.jetbrains.idea.svn.dialogs; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.ui.MessageType; -import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vcs.AbstractVcsHelper; -import com.intellij.openapi.vcs.CalledInAny; -import com.intellij.openapi.vcs.CalledInAwt; -import com.intellij.openapi.vcs.VcsException; -import com.intellij.openapi.vcs.changes.BackgroundFromStartOption; -import com.intellij.openapi.vcs.changes.committed.RunBackgroundable; -import com.intellij.openapi.vcs.changes.ui.ChangesViewBalloonProblemNotifier; -import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.Consumer; -import com.intellij.util.PairConsumer; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.idea.svn.SvnBranchConfigurationManager; -import org.jetbrains.idea.svn.SvnVcs; -import org.jetbrains.idea.svn.actions.ChangeListsMergerFactory; -import org.jetbrains.idea.svn.branchConfig.SvnBranchConfigurationNew; -import org.jetbrains.idea.svn.history.SvnChangeList; -import org.jetbrains.idea.svn.history.SvnCommittedChangesProvider; -import org.jetbrains.idea.svn.history.SvnRepositoryLocation; -import org.jetbrains.idea.svn.history.TreeStructureNode; -import org.jetbrains.idea.svn.integrate.IMerger; -import org.jetbrains.idea.svn.integrate.MergerFactory; -import org.jetbrains.idea.svn.integrate.SvnIntegrateChangesTask; -import org.jetbrains.idea.svn.integrate.WorkingCopyInfo; -import org.jetbrains.idea.svn.mergeinfo.BranchInfo; -import org.jetbrains.idea.svn.mergeinfo.MergeChecker; -import org.jetbrains.idea.svn.mergeinfo.OneShotMergeInfoHelper; -import org.jetbrains.idea.svn.mergeinfo.SvnMergeInfoCache; -import org.jetbrains.idea.svn.update.UpdateEventHandler; -import org.tmatesoft.svn.core.SVNException; -import org.tmatesoft.svn.core.SVNLogEntry; -import org.tmatesoft.svn.core.SVNLogEntryPath; -import org.tmatesoft.svn.core.SVNURL; -import org.tmatesoft.svn.core.internal.util.SVNPathUtil; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.io.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vcs.changes.committed.*; +import com.intellij.openapi.vcs.changes.ui.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.openapi.vfs.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; +import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.actions.*; +import org.jetbrains.idea.svn.history.*; +import org.jetbrains.idea.svn.integrate.*; +import org.jetbrains.idea.svn.mergeinfo.*; +import org.jetbrains.idea.svn.update.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.internal.util.*; -import java.io.File; -import java.io.IOException; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.io.*; +import java.util.*; public class QuickMerge { private final Project myProject; private final String myBranchName; - private final SvnBranchConfigurationNew myConfiguration; private final VirtualFile myRoot; private final WCInfo myWcInfo; private String mySourceUrl; private SvnVcs myVcs; private final String myTitle; - public QuickMerge(Project project, String sourceUrl, WCInfo wcInfo, final String branchName, final SvnBranchConfigurationNew configuration, - final VirtualFile root) { + public QuickMerge(Project project, String sourceUrl, WCInfo wcInfo, final String branchName, final VirtualFile root) { myProject = project; myBranchName = branchName; - myConfiguration = configuration; myRoot = root; myVcs = SvnVcs.getInstance(project); mySourceUrl = sourceUrl; @@ -184,7 +154,7 @@ public class QuickMerge { // suppose we're in branch myVcs.getSvnBranchPointsCalculator().getFirstCopyPoint(myWcInfo.getRepositoryRoot(), mySourceUrl, myWcInfo.getRootUrl(), new Consumer>() { - public void consume(SvnBranchPointsCalculator.WrapperInvertor result) { + public void consume(final SvnBranchPointsCalculator.WrapperInvertor result) { if (result == null) { showErrorBalloon("Merge start wasn't found"); return; @@ -194,7 +164,8 @@ public class QuickMerge { "\nAre you sure?"))) return; final MergerFactory mergerFactory = new MergerFactory() { public IMerger createMerger(SvnVcs vcs, File target, UpdateEventHandler handler, SVNURL currentBranchUrl, String branchName) { - return new BranchMerger(vcs, currentBranchUrl, myWcInfo.getUrl(), myWcInfo.getPath(), handler, reintegrate, myBranchName); + return new BranchMerger(vcs, currentBranchUrl, myWcInfo.getUrl(), myWcInfo.getPath(), handler, reintegrate, myBranchName, + reintegrate ? result.getWrapped().getTargetRevision() : result.getWrapped().getSourceRevision()); } }; @@ -242,14 +213,14 @@ public class QuickMerge { myCopyData = copyData; myNotMerged = new LinkedList(); myMergeTitle = "Merge from " + branchName; - if (Boolean.TRUE.equals(Boolean.getBoolean(ourOneShotStrategy))) { +// if (Boolean.TRUE.equals(Boolean.getBoolean(ourOneShotStrategy))) { myMergeChecker = new OneShotMergeInfoHelper(myProject, myWcInfo, mySourceUrl); ((OneShotMergeInfoHelper) myMergeChecker).prepare(); - } else { +/* } else { myMergeChecker = new BranchInfo.MyMergeCheckerWrapper(myWcInfo.getPath(), new BranchInfo(myVcs, myWcInfo.getRepositoryRoot(), myWcInfo.getRootUrl(), mySourceUrl, mySourceUrl, myVcs.createWCClient())); - } + }*/ } public void run(@NotNull final ProgressIndicator indicator) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/ToBeMergedDialog.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/ToBeMergedDialog.java index c308f87f0afc..b2243d5c3d9c 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/ToBeMergedDialog.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/dialogs/ToBeMergedDialog.java @@ -15,42 +15,30 @@ */ package org.jetbrains.idea.svn.dialogs; -import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.CommonShortcuts; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.ui.Splitter; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vcs.ObjectsConvertor; -import com.intellij.openapi.vcs.changes.Change; -import com.intellij.openapi.vcs.changes.committed.CommittedChangeListDecorator; -import com.intellij.openapi.vcs.changes.committed.CommittedChangeListRenderer; -import com.intellij.openapi.vcs.changes.committed.CommittedChangesTreeBrowser; -import com.intellij.openapi.vcs.changes.committed.RepositoryChangesBrowser; -import com.intellij.openapi.vcs.changes.issueLinks.AbstractBaseTagMouseListener; -import com.intellij.openapi.vcs.changes.ui.ChangeNodeDecorator; -import com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.ui.ColoredTreeCellRenderer; -import com.intellij.ui.SimpleColoredComponent; -import com.intellij.ui.SimpleTextAttributes; -import com.intellij.ui.table.TableView; -import com.intellij.util.containers.Convertor; -import com.intellij.util.ui.ColumnInfo; -import com.intellij.util.ui.ListTableModel; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.idea.svn.history.SvnChangeList; -import org.jetbrains.idea.svn.mergeinfo.MergeChecker; +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.ui.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vcs.changes.committed.*; +import com.intellij.openapi.vcs.changes.issueLinks.*; +import com.intellij.openapi.vcs.changes.ui.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.ui.*; +import com.intellij.ui.table.*; +import com.intellij.util.containers.*; +import com.intellij.util.ui.*; +import org.jetbrains.idea.svn.history.*; +import org.jetbrains.idea.svn.mergeinfo.*; import javax.swing.*; -import javax.swing.event.ListSelectionEvent; -import javax.swing.event.ListSelectionListener; -import javax.swing.table.TableCellRenderer; +import javax.swing.event.*; +import javax.swing.table.*; import java.awt.*; import java.awt.event.*; import java.util.*; +import java.util.HashSet; import java.util.List; public class ToBeMergedDialog extends DialogWrapper { @@ -375,7 +363,7 @@ public class ToBeMergedDialog extends DialogWrapper { } } - private final static int ourPageSize = 20; + private final static int ourPageSize = 30; private static final ColumnInfo FAKE_COLUMN = new ColumnInfo("fake column"){ @Override diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java index 98283c2f39db..6f9e37798544 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/Merger.java @@ -15,31 +15,19 @@ */ package org.jetbrains.idea.svn.integrate; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; -import com.intellij.util.NotNullFunction; -import com.intellij.util.messages.Topic; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.svn.SvnBundle; -import org.jetbrains.idea.svn.SvnConfiguration; -import org.jetbrains.idea.svn.SvnVcs; -import org.jetbrains.idea.svn.update.UpdateEventHandler; -import org.tmatesoft.svn.core.SVNDepth; -import org.tmatesoft.svn.core.SVNException; -import org.tmatesoft.svn.core.SVNURL; -import org.tmatesoft.svn.core.wc.SVNDiffClient; -import org.tmatesoft.svn.core.wc.SVNDiffOptions; -import org.tmatesoft.svn.core.wc.SVNRevision; -import org.tmatesoft.svn.core.wc.SVNRevisionRange; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.project.*; +import com.intellij.openapi.vcs.versionBrowser.*; +import com.intellij.util.*; +import com.intellij.util.messages.*; +import org.jetbrains.annotations.*; +import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.update.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.wc.*; -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.io.*; +import java.util.*; public class Merger implements IMerger { protected final List myChangeLists; @@ -108,12 +96,12 @@ public class Merger implements IMerger { } private void appendComment() { + if (myCommitMessage.length() == 0) { + myCommitMessage.append("Merged from ").append(myBranchName); + } final String nextComment = myLatestProcessed.getComment(); if (nextComment.trim().length() > 0) { - if (myCommitMessage.length() != 0) { - myCommitMessage.append('\n'); - } - myCommitMessage.append(nextComment).append(" [merged from ").append(myBranchName).append(", revision ").append(myLatestProcessed.getNumber()).append("]"); + myCommitMessage.append('\n').append(nextComment).append(" [from revision ").append(myLatestProcessed.getNumber()).append("]"); } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java index f6062b4ba3bb..047ff2f46e3c 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/SvnIntegrateChangesTask.java @@ -15,36 +15,23 @@ */ package org.jetbrains.idea.svn.integrate; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.progress.PerformInBackgroundOption; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.progress.ProgressManager; -import com.intellij.openapi.progress.Task; -import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.application.*; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.ui.*; import com.intellij.openapi.vcs.*; -import com.intellij.openapi.vcs.changes.Change; -import com.intellij.openapi.vcs.changes.ChangeListManager; -import com.intellij.openapi.vcs.changes.InvokeAfterUpdateMode; -import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; -import com.intellij.openapi.vcs.changes.ui.CommitChangeListDialog; -import com.intellij.openapi.vcs.ex.ProjectLevelVcsManagerEx; +import com.intellij.openapi.vcs.changes.*; +import com.intellij.openapi.vcs.changes.ui.*; +import com.intellij.openapi.vcs.ex.*; import com.intellij.openapi.vcs.update.*; -import com.intellij.util.Consumer; -import com.intellij.util.NotNullFunction; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.util.*; +import org.jetbrains.annotations.*; import org.jetbrains.idea.svn.*; -import org.jetbrains.idea.svn.update.SvnStatusWorker; -import org.jetbrains.idea.svn.update.UpdateEventHandler; -import org.tmatesoft.svn.core.SVNException; -import org.tmatesoft.svn.core.SVNURL; -import org.tmatesoft.svn.core.wc.SVNStatus; -import org.tmatesoft.svn.core.wc.SVNStatusType; +import org.jetbrains.idea.svn.update.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.wc.*; -import java.io.File; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; +import java.io.*; +import java.util.*; public class SvnIntegrateChangesTask extends Task.Backgroundable { private final ProjectLevelVcsManagerEx myProjectLevelVcsManager; @@ -82,6 +69,8 @@ public class SvnIntegrateChangesTask extends Task.Backgroundable { myAccomulatedFiles = new UpdatedFilesReverseSide(UpdatedFiles.create()); myExceptions = new ArrayList(); + myHandler = new IntegrateEventHandler(myVcs, ProgressManager.getInstance().getProgressIndicator()); + myMerger = myMergerFactory.createMerger(myVcs, new File(myInfo.getLocalPath()), myHandler, myCurrentBranchUrl, myBranchName); } private void indicatorOnStart() { @@ -95,8 +84,7 @@ public class SvnIntegrateChangesTask extends Task.Backgroundable { } public void run(@NotNull final ProgressIndicator indicator) { - myHandler = new IntegrateEventHandler(myVcs, ProgressManager.getInstance().getProgressIndicator()); - myMerger = myMergerFactory.createMerger(myVcs, new File(myInfo.getLocalPath()), myHandler, myCurrentBranchUrl, myBranchName); + myHandler.setProgressIndicator(ProgressManager.getInstance().getProgressIndicator()); myResolveWorker = new ResolveWorker(myInfo.isUnderProjectRoot(), myProject); BlockReloadingUtil.block(); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/mergeinfo/OneRecursiveShotMergeInfoWorker.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/mergeinfo/OneRecursiveShotMergeInfoWorker.java index 054695418d4d..d8f248e426e9 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/mergeinfo/OneRecursiveShotMergeInfoWorker.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/mergeinfo/OneRecursiveShotMergeInfoWorker.java @@ -15,22 +15,18 @@ */ package org.jetbrains.idea.svn.mergeinfo; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.util.PairProcessor; -import org.jetbrains.idea.svn.SvnVcs; -import org.jetbrains.idea.svn.dialogs.WCInfo; +import com.intellij.openapi.project.*; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.io.*; +import com.intellij.util.*; +import org.jetbrains.idea.svn.*; +import org.jetbrains.idea.svn.dialogs.*; import org.tmatesoft.svn.core.*; -import org.tmatesoft.svn.core.internal.util.SVNMergeInfoUtil; -import org.tmatesoft.svn.core.internal.util.SVNPathUtil; -import org.tmatesoft.svn.core.wc.ISVNPropertyHandler; -import org.tmatesoft.svn.core.wc.SVNPropertyData; -import org.tmatesoft.svn.core.wc.SVNRevision; -import org.tmatesoft.svn.core.wc.SVNWCClient; +import org.tmatesoft.svn.core.internal.util.*; +import org.tmatesoft.svn.core.wc.*; -import java.io.File; -import java.util.Map; +import java.io.*; +import java.util.*; public class OneRecursiveShotMergeInfoWorker implements MergeInfoWorker { private final Project myProject; @@ -61,8 +57,9 @@ public class OneRecursiveShotMergeInfoWorker implements MergeInfoWorker { final SvnVcs vcs = SvnVcs.getInstance(myProject); final SVNWCClient client = vcs.createWCClient(); + final SVNDepth depth = SvnConfiguration.getInstance(myProject).CHECK_NESTED_FOR_QUICK_MERGE ? SVNDepth.INFINITY : SVNDepth.EMPTY; client.doGetProperty(new File(myWCInfo.getPath()), SVNProperty.MERGE_INFO, SVNRevision.UNDEFINED, SVNRevision.WORKING, - SVNDepth.INFINITY, new ISVNPropertyHandler() { + depth, new ISVNPropertyHandler() { public void handleProperty(File path, SVNPropertyData property) throws SVNException { final String key = keyFromFile(path); myDataMap.put(key, SVNMergeInfoUtil.parseMergeInfo(new StringBuffer(replaceSeparators(property.getValue().getString())), null)); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/UpdateEventHandler.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/UpdateEventHandler.java index cd7941bee992..836ef9a88838 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/update/UpdateEventHandler.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/update/UpdateEventHandler.java @@ -15,33 +15,24 @@ */ package org.jetbrains.idea.svn.update; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.openapi.vcs.VcsBundle; -import com.intellij.openapi.vcs.update.FileGroup; -import com.intellij.openapi.vcs.update.UpdatedFiles; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.svn.SvnBundle; -import org.jetbrains.idea.svn.SvnFileUrlMapping; -import org.jetbrains.idea.svn.SvnVcs; -import org.tmatesoft.svn.core.SVNCancelException; -import org.tmatesoft.svn.core.SVNURL; -import org.tmatesoft.svn.core.internal.wc.SVNErrorManager; -import org.tmatesoft.svn.core.wc.ISVNEventHandler; -import org.tmatesoft.svn.core.wc.SVNEvent; -import org.tmatesoft.svn.core.wc.SVNEventAction; -import org.tmatesoft.svn.core.wc.SVNStatusType; -import org.tmatesoft.svn.util.SVNLogType; +import com.intellij.openapi.progress.*; +import com.intellij.openapi.vcs.*; +import com.intellij.openapi.vcs.update.*; +import com.intellij.openapi.wm.*; +import org.jetbrains.annotations.*; +import org.jetbrains.idea.svn.*; +import org.tmatesoft.svn.core.*; +import org.tmatesoft.svn.core.internal.wc.*; +import org.tmatesoft.svn.core.wc.*; +import org.tmatesoft.svn.util.*; -import javax.swing.*; -import java.io.File; +import java.io.*; /** * @author lesya */ public class UpdateEventHandler implements ISVNEventHandler { - private final ProgressIndicator myProgressIndicator; + private ProgressIndicator myProgressIndicator; private UpdatedFiles myUpdatedFiles; private int myExternalsCount; private final SvnVcs myVCS; @@ -159,17 +150,7 @@ public class UpdateEventHandler implements ISVNEventHandler { myText2 = SvnBundle.message("progres.text2.updated.to.revision", event.getRevision()); if (myExternalsCount == 0) { myExternalsCount = 1; - - final long revision = event.getRevision(); - //noinspection SSBasedInspection - SwingUtilities.invokeLater(new Runnable() { - public void run() { - final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myVCS.getProject()); - if (statusBar != null) { - statusBar.setInfo(SvnBundle.message("status.text.updated.to.revision", revision)); - } - } - }); + StatusBar.Info.set(SvnBundle.message("status.text.updated.to.revision", event.getRevision()), myVCS.getProject()); } } else if (event.getAction() == SVNEventAction.SKIP) { @@ -223,4 +204,8 @@ public class UpdateEventHandler implements ISVNEventHandler { private static FileGroup createFileGroup(String name, String id) { return new FileGroup(name, name, false, id, true); } + + public void setProgressIndicator(ProgressIndicator progressIndicator) { + myProgressIndicator = progressIndicator; + } } diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/QuickFixManagerImpl.java b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/QuickFixManagerImpl.java index 1c41388f5685..6b7ea84da53e 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/QuickFixManagerImpl.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/componentTree/QuickFixManagerImpl.java @@ -15,20 +15,17 @@ */ package com.intellij.uiDesigner.componentTree; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.uiDesigner.ErrorAnalyzer; -import com.intellij.uiDesigner.ErrorInfo; -import com.intellij.uiDesigner.radComponents.RadComponent; -import com.intellij.uiDesigner.designSurface.GuiEditor; -import com.intellij.uiDesigner.quickFixes.QuickFixManager; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.diagnostic.*; +import com.intellij.openapi.wm.*; +import com.intellij.uiDesigner.*; +import com.intellij.uiDesigner.designSurface.*; +import com.intellij.uiDesigner.quickFixes.*; +import com.intellij.uiDesigner.radComponents.*; +import org.jetbrains.annotations.*; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.tree.TreePath; import javax.swing.*; +import javax.swing.event.*; +import javax.swing.tree.*; import java.awt.*; /** @@ -64,13 +61,17 @@ public final class QuickFixManagerImpl extends QuickFixManager{ updateIntentionHintVisibility(); ErrorInfo[] errorInfos = getErrorInfos(); - final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myComponent.getProject()); + + + final String text; if (errorInfos.length > 0 && errorInfos [0].myDescription != null) { - statusBar.setInfo(errorInfos [0].myDescription); + text = errorInfos [0].myDescription; } else { - statusBar.setInfo(""); + text = ""; } + + StatusBar.Info.set(text, myComponent.getProject()); } } } \ No newline at end of file diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PasteProcessor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PasteProcessor.java index 532b2fbf7ad9..43e7162f2958 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PasteProcessor.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/designSurface/PasteProcessor.java @@ -16,22 +16,17 @@ package com.intellij.uiDesigner.designSurface; -import com.intellij.openapi.wm.StatusBar; -import com.intellij.openapi.wm.WindowManager; -import com.intellij.openapi.command.CommandProcessor; -import com.intellij.uiDesigner.FormEditingUtil; -import com.intellij.uiDesigner.UIDesignerBundle; -import com.intellij.uiDesigner.lw.IComponent; -import com.intellij.uiDesigner.radComponents.RadComponent; -import com.intellij.uiDesigner.radComponents.RadContainer; -import gnu.trove.TIntArrayList; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.command.*; +import com.intellij.openapi.wm.*; +import com.intellij.uiDesigner.*; +import com.intellij.uiDesigner.lw.*; +import com.intellij.uiDesigner.radComponents.*; +import gnu.trove.*; +import org.jetbrains.annotations.*; -import java.awt.Dimension; -import java.awt.Point; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.util.ArrayList; +import java.awt.*; +import java.awt.event.*; +import java.util.*; /** * @author yole @@ -82,8 +77,8 @@ public class PasteProcessor extends EventProcessor { } this.myMinRow = myMinRow; this.myMinCol = myMinCol; - final StatusBar statusBar = WindowManager.getInstance().getStatusBar(myEditor.getProject()); - statusBar.setInfo(UIDesignerBundle.message("paste.choose.destination.prompt")); + + StatusBar.Info.set(UIDesignerBundle.message("paste.choose.destination.prompt"), myEditor.getProject()); } protected void processKeyEvent(KeyEvent e) { diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltResourceProvider.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltResourceProvider.java index aa82d2dd2568..ce30a72264c9 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltResourceProvider.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltResourceProvider.java @@ -16,18 +16,15 @@ package org.intellij.lang.xpath.xslt.impl; -import com.intellij.javaee.ResourceRegistrar; -import com.intellij.javaee.StandardResourceProvider; -import org.intellij.lang.xpath.xslt.XsltSupport; +import com.intellij.javaee.*; +import org.intellij.lang.xpath.xslt.*; /** * @author Dmitry Avdeev */ public class XsltResourceProvider implements StandardResourceProvider { - private static final String XSLT_SCHEMA_LOCATION = "resources/xslt-schema.xsd"; - public void registerResources(ResourceRegistrar registrar) { - registrar.addStdResource(XsltSupport.XSLT_NS, XSLT_SCHEMA_LOCATION, getClass()); + registrar.addStdResource(XsltSupport.XSLT_NS, "/org/intellij/lang/xpath/xslt/resources/xslt-schema.xsd", getClass()); } } diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/validation/inspections/SuppressInspectionAction.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/validation/inspections/SuppressInspectionAction.java index c54fdfdd032f..bfa22b0507d2 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/validation/inspections/SuppressInspectionAction.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/validation/inspections/SuppressInspectionAction.java @@ -15,23 +15,17 @@ */ package org.intellij.lang.xpath.xslt.validation.inspections; -import com.intellij.codeInspection.SuppressIntentionAction; -import com.intellij.lang.xml.XMLLanguage; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiWhiteSpace; +import com.intellij.codeInspection.*; +import com.intellij.lang.xml.*; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; import com.intellij.psi.XmlElementFactory; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.XmlComment; -import com.intellij.psi.xml.XmlProlog; -import com.intellij.psi.xml.XmlTag; -import com.intellij.psi.xml.XmlText; -import com.intellij.util.IncorrectOperationException; -import com.intellij.xml.util.XmlUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.psi.util.*; +import com.intellij.psi.xml.*; +import com.intellij.util.*; +import com.intellij.xml.util.*; +import org.jetbrains.annotations.*; abstract class SuppressInspectionAction extends SuppressIntentionAction { private final String myToolId; @@ -55,8 +49,8 @@ abstract class SuppressInspectionAction extends SuppressIntentionAction { @Nullable protected abstract XmlTag getAnchor(@NotNull PsiElement element); - public boolean isAvailable(@NotNull Project project, Editor editor, @Nullable PsiElement element) { - return element != null && getAnchor(element) != null; + public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { + return getAnchor(element) != null; } public void invoke(Project project, Editor editor, PsiElement element) throws IncorrectOperationException { diff --git a/xml/impl/src/com/intellij/javaee/ResourceRegistrarImpl.java b/xml/impl/src/com/intellij/javaee/ResourceRegistrarImpl.java index 338613e7af01..f3b093f33708 100644 --- a/xml/impl/src/com/intellij/javaee/ResourceRegistrarImpl.java +++ b/xml/impl/src/com/intellij/javaee/ResourceRegistrarImpl.java @@ -16,15 +16,13 @@ package com.intellij.javaee; -import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.application.*; +import com.intellij.openapi.util.io.*; import com.intellij.util.containers.HashMap; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; -import java.net.URL; -import java.util.List; -import java.util.Map; -import java.util.ArrayList; +import java.net.*; +import java.util.*; /** * @author Dmitry Avdeev @@ -50,7 +48,13 @@ public class ResourceRegistrarImpl implements ResourceRegistrar { map.put(resource, file); } else { - ExternalResourceManagerImpl.LOG.info("Cannot find standard resource. filename:" + fileName + " klass=" + klass); + String message = "Cannot find standard resource. filename:" + fileName + " klass=" + klass; + if (ApplicationManager.getApplication().isUnitTestMode()) { + ExternalResourceManagerImpl.LOG.error(message); + } + else { + ExternalResourceManagerImpl.LOG.warn(message); + } } } diff --git a/xml/openapi/src/com/intellij/codeInspection/XmlSuppressableInspectionTool.java b/xml/openapi/src/com/intellij/codeInspection/XmlSuppressableInspectionTool.java index 7dfc0def14b6..49d816523b6e 100644 --- a/xml/openapi/src/com/intellij/codeInspection/XmlSuppressableInspectionTool.java +++ b/xml/openapi/src/com/intellij/codeInspection/XmlSuppressableInspectionTool.java @@ -16,16 +16,13 @@ package com.intellij.codeInspection; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.XmlFile; -import com.intellij.psi.xml.XmlTag; -import com.intellij.util.IncorrectOperationException; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.editor.*; +import com.intellij.openapi.project.*; +import com.intellij.psi.*; +import com.intellij.psi.util.*; +import com.intellij.psi.xml.*; +import com.intellij.util.*; +import org.jetbrains.annotations.*; public abstract class XmlSuppressableInspectionTool extends LocalInspectionTool implements CustomSuppressableInspectionTool { @NonNls static final String ALL = "ALL"; @@ -50,7 +47,7 @@ public abstract class XmlSuppressableInspectionTool extends LocalInspectionTool return getText(); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { return PsiTreeUtil.getParentOfType(element, XmlTag.class) != null; } @@ -84,8 +81,8 @@ public abstract class XmlSuppressableInspectionTool extends LocalInspectionTool XmlSuppressionProvider.getProvider(element.getContainingFile()).suppressForFile(element, myInspectionId); } - public boolean isAvailable(@NotNull final Project project, final Editor editor, @Nullable final PsiElement element) { - return element != null && element.isValid() && element.getContainingFile() instanceof XmlFile; + public boolean isAvailable(@NotNull final Project project, final Editor editor, @NotNull final PsiElement element) { + return element.isValid() && element.getContainingFile() instanceof XmlFile; }