提交 c8a6dac2 编写于 作者: K Kohsuke Kawaguchi

defer the resolution

Otherwise it might try to access a Descriptor that's not yet registered.
上级 8eefed28
......@@ -223,7 +223,22 @@ public abstract class Descriptor<T extends Describable<T>> implements Saveable {
*
* @see #getHelpFile(String)
*/
private transient final Map<String,String> helpRedirect = new HashMap<String, String>();
private transient final Map<String,HelpRedirect> helpRedirect = new HashMap<String,HelpRedirect>();
private static class HelpRedirect {
private final Class<? extends Describable> owner;
private final String fieldNameToRedirectTo;
private HelpRedirect(Class<? extends Describable> owner, String fieldNameToRedirectTo) {
this.owner = owner;
this.fieldNameToRedirectTo = fieldNameToRedirectTo;
}
private String resolve() {
// the resolution has to be deferred to avoid ordering issue among descriptor registrations.
return Jenkins.getInstance().getDescriptor(owner).getHelpFile(fieldNameToRedirectTo);
}
}
/**
*
......@@ -657,8 +672,8 @@ public abstract class Descriptor<T extends Describable<T>> implements Saveable {
}
public String getHelpFile(Klass<?> clazz, String fieldName) {
String v = helpRedirect.get(fieldName);
if (v!=null) return v;
HelpRedirect r = helpRedirect.get(fieldName);
if (r!=null) return r.resolve();
for (Klass<?> c : clazz.getAncestors()) {
String page = "/descriptor/" + getId() + "/help";
......@@ -688,8 +703,7 @@ public abstract class Descriptor<T extends Describable<T>> implements Saveable {
* @since 1.425
*/
protected void addHelpFileRedirect(String fieldName, Class<? extends Describable> owner, String fieldNameToRedirectTo) {
helpRedirect.put(fieldName,
Jenkins.getInstance().getDescriptor(owner).getHelpFile(fieldNameToRedirectTo));
helpRedirect.put(fieldName, new HelpRedirect(owner,fieldNameToRedirectTo));
}
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册