mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
platform: load components from optional descriptors in deterministic order (IDEA-203089)
This commit is contained in:
+1
@@ -0,0 +1 @@
|
||||
<idea-plugin/>
|
||||
+1
@@ -0,0 +1 @@
|
||||
<idea-plugin/>
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
<idea-plugin>
|
||||
<id>main</id>
|
||||
<depends optional="true" config-file="dep2.xml">dep2</depends>
|
||||
<depends optional="true" config-file="dep1.xml">dep1</depends>
|
||||
</idea-plugin>
|
||||
@@ -227,7 +227,7 @@ public class IdeaPluginDescriptorImpl implements IdeaPluginDescriptor {
|
||||
Set<PluginId> dependentPlugins = new LinkedHashSet<>();
|
||||
Set<PluginId> nonOptionalDependentPlugins = new LinkedHashSet<>();
|
||||
if (pluginBean.dependencies != null) {
|
||||
myOptionalConfigs = new THashMap<>();
|
||||
myOptionalConfigs = new LinkedHashMap<>();
|
||||
for (PluginDependency dependency : pluginBean.dependencies) {
|
||||
String text = dependency.pluginId;
|
||||
if (!StringUtil.isEmptyOrSpaces(text)) {
|
||||
|
||||
@@ -917,7 +917,7 @@ public class PluginManagerCore {
|
||||
@NotNull Function<? super String, ? extends IdeaPluginDescriptorImpl> optionalDescriptorLoader) {
|
||||
Map<PluginId, List<String>> optionalConfigs = descriptor.getOptionalConfigs();
|
||||
if (optionalConfigs != null && !optionalConfigs.isEmpty()) {
|
||||
Map<PluginId, List<IdeaPluginDescriptorImpl>> descriptors = new THashMap<>(optionalConfigs.size());
|
||||
Map<PluginId, List<IdeaPluginDescriptorImpl>> descriptors = new LinkedHashMap<>(optionalConfigs.size());
|
||||
|
||||
for (Map.Entry<PluginId, List<String>> entry : optionalConfigs.entrySet()) {
|
||||
for (String optionalDescriptorName : entry.getValue()) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
package com.intellij.ide.plugins;
|
||||
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.extensions.PluginId;
|
||||
import com.intellij.util.lang.UrlClassLoader;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -11,6 +12,7 @@ import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.Enumeration;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.intellij.testFramework.UsefulTestCase.assertEmpty;
|
||||
import static com.intellij.testFramework.UsefulTestCase.assertOneElement;
|
||||
@@ -39,6 +41,17 @@ public class PluginDescriptorTest {
|
||||
assertEquals(1, descriptor.getOptionalDescriptors().size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMultipleOptionalDescriptors() {
|
||||
IdeaPluginDescriptorImpl descriptor = loadDescriptor("multipleOptionalDescriptors");
|
||||
assertNotNull(descriptor);
|
||||
Set<PluginId> ids = descriptor.getOptionalDescriptors().keySet();
|
||||
assertEquals(2, ids.size());
|
||||
PluginId[] idsArray = ids.toArray(PluginId.EMPTY_ARRAY);
|
||||
assertEquals("dep2", idsArray[0].getIdString());
|
||||
assertEquals("dep1", idsArray[1].getIdString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMalformedDescriptor() {
|
||||
assertNull(loadDescriptor("malformed"));
|
||||
|
||||
Reference in New Issue
Block a user