Merge branch 'slava/plugin-incompatible-with'
[idea/community.git] / platform / core-impl / src / com / intellij / ide / plugins / IdeaPluginDescriptorImpl.java
index 5ba3259827f0a3345d57f8704e1ebf7fb2113f77..521e1d1d37d3391373302961566e7e45f267e83f 100644 (file)
@@ -10,6 +10,7 @@ import com.intellij.openapi.util.JDOMUtil;
 import com.intellij.openapi.util.io.FileUtil;
 import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.util.text.StringUtilRt;
+import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.ref.GCWatcher;
 import org.jdom.Content;
 import org.jdom.Element;
@@ -58,6 +59,7 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
   private String myCategory;
   String myUrl;
   @Nullable List<PluginDependency> pluginDependencies;
+  @Nullable private List<PluginId> myIncompatibilities;
 
   transient List<Path> jarFiles;
 
@@ -260,6 +262,10 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
           }
           break;
 
+        case "incompatible-with":
+          readPluginIncompatibility(child);
+          break;
+
         case "category":
           myCategory = StringUtil.nullize(child.getTextTrim());
           break;
@@ -318,6 +324,16 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
     myIsLicenseOptional = Boolean.parseBoolean(child.getAttributeValue("optional", "false"));
   }
 
+  private void readPluginIncompatibility(@NotNull Element child) {
+    String pluginId = child.getTextTrim();
+    if (pluginId.isEmpty()) return;
+
+    if (myIncompatibilities == null) {
+      myIncompatibilities = new ArrayList<>();
+    }
+    myIncompatibilities.add(PluginId.getId(pluginId));
+  }
+
   private boolean readPluginDependency(@NotNull Path basePath, @NotNull DescriptorListLoadingContext context, @NotNull Element child) {
     String dependencyIdString = child.getTextTrim();
     if (dependencyIdString.isEmpty()) {
@@ -637,6 +653,11 @@ public final class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
     return myIsLicenseOptional;
   }
 
+  @Override
+  public @NotNull List<PluginId> getIncompatibleModuleIds() {
+    return ContainerUtil.notNullize(myIncompatibilities);
+  }
+
   @SuppressWarnings("deprecation")
   @Override
   public PluginId @NotNull [] getDependentPluginIds() {