diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java
index 10ba954a4e0f..3257425964e4 100644
--- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java
+++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java
@@ -766,7 +766,16 @@ public class PluginManager {
message.append("not loaded plugins");
}
message.append("");
- message.append("
").append("Enable ").append(faultyDescriptors.size() == 1 ? disabledPluginNames.get(faultyDescriptors.iterator().next()) : " all necessary plugins").append("");
+ boolean possibleToEnable = true;
+ for (String descriptor : faultyDescriptors) {
+ if (disabledPluginNames.get(descriptor) == null) {
+ possibleToEnable = false;
+ break;
+ }
+ }
+ if (possibleToEnable) {
+ message.append("
").append("Enable ").append(faultyDescriptors.size() == 1 ? disabledPluginNames.get(faultyDescriptors.iterator().next()) : " all necessary plugins").append("");
+ }
message.append("
").append("Open plugin manager");
}
if (pluginsWithoutIdFound) {
diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeEncodingUpdateGroup.java b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeEncodingUpdateGroup.java
index 49cac45a411b..53c64fa3965c 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeEncodingUpdateGroup.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vfs/encoding/ChangeEncodingUpdateGroup.java
@@ -27,26 +27,38 @@ import com.intellij.pom.Navigatable;
* @author cdr
*/
public class ChangeEncodingUpdateGroup extends DefaultActionGroup {
+ private boolean myUpdating;
+
@Override
public void update(final AnActionEvent e) {
+ if (myUpdating) {
+ return;
+ }
VirtualFile virtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE);
VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY);
if (files != null && files.length > 1) {
virtualFile = null;
}
- if (virtualFile != null){
+ if (virtualFile != null) {
Navigatable navigatable = e.getData(PlatformDataKeys.NAVIGATABLE);
if (navigatable instanceof OpenFileDescriptor) {
// prefer source to the class file
virtualFile = ((OpenFileDescriptor)navigatable).getFile();
}
}
- if(virtualFile != null && !virtualFile.isInLocalFileSystem()){
+ if (virtualFile != null && !virtualFile.isInLocalFileSystem()) {
virtualFile = null;
}
Pair result = ChooseFileEncodingAction.update(virtualFile);
- e.getPresentation().setText(result.getFirst());
- e.getPresentation().setEnabled(result.getSecond());
+ myUpdating = true;
+ try {
+ e.getPresentation().setText(result.getFirst());
+ // updating the enabled state of the action can trigger the menuSelected handler, which updates the action group again
+ e.getPresentation().setEnabled(result.getSecond());
+ }
+ finally {
+ myUpdating = false;
+ }
}
}
diff --git a/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java b/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java
index 842cd469f4a4..c7dc592bb474 100644
--- a/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java
+++ b/platform/util/src/com/intellij/util/pico/DefaultPicoContainer.java
@@ -17,6 +17,7 @@ package com.intellij.util.pico;
import com.intellij.util.ReflectionCache;
import com.intellij.util.containers.ConcurrentHashMap;
+import com.intellij.util.containers.FList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.picocontainer.*;
@@ -24,7 +25,6 @@ import org.picocontainer.defaults.*;
import java.io.Serializable;
import java.util.*;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicReference;
public class DefaultPicoContainer implements MutablePicoContainer, Serializable {
@@ -34,11 +34,11 @@ public class DefaultPicoContainer implements MutablePicoContainer, Serializable
private final Set children = new HashSet();
private final Map