提交 e6db919e 编写于 作者: J Jesse Glick 提交者: Oleg Nenashev

[JENKINS-39520] ExtensionList.removeAll is unimplemented (#2612)

* Work around SUREFIRE-1226 just like https://github.com/jenkinsci/plugin-pom/pull/33.

* [JENKINS-39520] Implement ExtensionList.removeAll.

* @oleg-nenashev suggests not notifying listeners unless we are actually removing something.
上级 643442a4
......@@ -204,6 +204,21 @@ public class ExtensionList<T> extends AbstractList<T> implements OnMaster {
}
}
@Override
public boolean removeAll(Collection<?> c) {
boolean removed = false;
try {
for (Object o : c) {
removed |= removeSync(o);
}
return removed;
} finally {
if (extensions != null && removed) {
fireOnChangeListeners();
}
}
}
private synchronized boolean removeSync(Object o) {
boolean removed = removeComponent(legacyInstances, o);
if(extensions!=null) {
......
......@@ -40,6 +40,7 @@ THE SOFTWARE.
<concurrency>2</concurrency> <!-- may use e.g. 2C for 2 × (number of cores) -->
<mavenDebug>false</mavenDebug>
<jacocoSurefireArgs /><!-- empty by default -->
<trimStackTrace>false</trimStackTrace> <!-- SUREFIRE-1226 workaround -->
</properties>
<dependencies>
......
......@@ -10,12 +10,14 @@ import jenkins.model.Jenkins;
import hudson.model.Descriptor;
import hudson.model.Describable;
import hudson.util.DescriptorList;
import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.JenkinsRule;
import org.jvnet.hudson.test.WithoutJenkins;
......@@ -204,4 +206,15 @@ public class ExtensionListTest {
assertEquals("mazda",list.get(1).name);
assertEquals("toyota",list.get(2).name);
}
@Issue("JENKINS-39520")
@Test
public void removeAll() {
ExtensionList<Animal> list = ExtensionList.lookup(Animal.class);
assertTrue(list.removeAll(new ArrayList<>(list)));
assertEquals(0, list.size());
assertFalse(list.removeAll(new ArrayList<>(list)));
assertEquals(0, list.size());
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册