提交 680649f6 编写于 作者: J Jesse Glick

[FIXED JENKINS-14995] Fail consistently when getDescriptor is called with an ambiguous short name.

上级 223e8955
......@@ -56,6 +56,9 @@ Upcoming changes</a>
<div id="trunk" style="display:none"><!--=TRUNK-BEGIN=-->
<ul class=image>
<li class=>
<li class=bug>
Detect bugs relating to short <code>Descriptor</code> names early.
(<a href="https://issues.jenkins-ci.org/browse/JENKINS-14995">issue 14995</a> continued)
</ul>
</div><!--=TRUNK-END=-->
......
......@@ -1067,17 +1067,29 @@ public class Jenkins extends AbstractCIBase implements ModifiableTopLevelItemGro
*
* @param id
* Either {@link Descriptor#getId()} (recommended) or the short name of a {@link Describable} subtype (for compatibility)
* @throws IllegalArgumentException if a short name was passed which matches multiple IDs (fail fast)
*/
@SuppressWarnings({"unchecked", "rawtypes"}) // too late to fix
public Descriptor getDescriptor(String id) {
// legacy descriptors that are reigstered manually doesn't show up in getExtensionList, so check them explicitly.
for( Descriptor d : Iterators.sequence(getExtensionList(Descriptor.class),DescriptorExtensionList.listLegacyInstances()) ) {
String name = d.getId();
if(name.equals(id))
return d;
if(name.substring(name.lastIndexOf('.')+1).equals(id))
Iterable<Descriptor> descriptors = Iterators.sequence(getExtensionList(Descriptor.class), DescriptorExtensionList.listLegacyInstances());
for (Descriptor d : descriptors) {
if (d.getId().equals(id)) {
return d;
}
}
return null;
Descriptor candidate = null;
for (Descriptor d : descriptors) {
String name = d.getId();
if (name.substring(name.lastIndexOf('.') + 1).equals(id)) {
if (candidate == null) {
candidate = d;
} else {
throw new IllegalArgumentException(id + " is ambiguous; matches both " + name + " and " + candidate.getId());
}
}
}
return candidate;
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册