提交 cf25766b 编写于 作者: K kohsuke

converted Builder to support auto-registration.

git-svn-id: https://hudson.dev.java.net/svn/hudson/trunk/hudson/main@15617 71c3de6d-444a-0410-be80-ed276b4c234a
上级 23e2dcbe
...@@ -601,7 +601,7 @@ public class Functions { ...@@ -601,7 +601,7 @@ public class Functions {
} }
public static List<Descriptor<Builder>> getBuilderDescriptors(AbstractProject<?,?> project) { public static List<Descriptor<Builder>> getBuilderDescriptors(AbstractProject<?,?> project) {
return BuildStepDescriptor.filter(BuildStep.BUILDERS, project.getClass()); return BuildStepDescriptor.filter(Builder.all(), project.getClass());
} }
public static List<Descriptor<Publisher>> getPublisherDescriptors(AbstractProject<?,?> project) { public static List<Descriptor<Publisher>> getPublisherDescriptors(AbstractProject<?,?> project) {
......
...@@ -534,7 +534,7 @@ public class MatrixProject extends AbstractProject<MatrixProject,MatrixBuild> im ...@@ -534,7 +534,7 @@ public class MatrixProject extends AbstractProject<MatrixProject,MatrixBuild> im
JSONObject json = req.getSubmittedForm(); JSONObject json = req.getSubmittedForm();
buildWrappers.rebuild(req, json, BuildWrappers.getFor(this)); buildWrappers.rebuild(req, json, BuildWrappers.getFor(this));
builders.rebuildHetero(req, json, BuildStep.BUILDERS, "builder"); builders.rebuildHetero(req, json, Builder.all(), "builder");
publishers.rebuild(req, json, BuildStepDescriptor.filter(BuildStep.PUBLISHERS,this.getClass())); publishers.rebuild(req, json, BuildStepDescriptor.filter(BuildStep.PUBLISHERS,this.getClass()));
updateTransientActions(); // to pick up transient actions from builder, publisher, etc. updateTransientActions(); // to pick up transient actions from builder, publisher, etc.
......
...@@ -639,7 +639,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -639,7 +639,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
* Gets the builder descriptor by name. Primarily used for making them web-visible. * Gets the builder descriptor by name. Primarily used for making them web-visible.
*/ */
public Descriptor<Builder> getBuilder(String shortClassName) { public Descriptor<Builder> getBuilder(String shortClassName) {
return findDescriptor(shortClassName, BuildStep.BUILDERS); return findDescriptor(shortClassName, Builder.all());
} }
/** /**
...@@ -2023,7 +2023,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl ...@@ -2023,7 +2023,7 @@ public final class Hudson extends Node implements ItemGroup<TopLevelItem>, Stapl
boolean result = true; boolean result = true;
for( Descriptor<Builder> d : BuildStep.BUILDERS ) for( Descriptor<Builder> d : Builder.all() )
result &= configureDescriptor(req,json,d); result &= configureDescriptor(req,json,d);
for( Descriptor<Publisher> d : BuildStep.PUBLISHERS ) for( Descriptor<Publisher> d : BuildStep.PUBLISHERS )
......
...@@ -186,7 +186,7 @@ public abstract class Project<P extends Project<P,B>,B extends Build<P,B>> ...@@ -186,7 +186,7 @@ public abstract class Project<P extends Project<P,B>,B extends Build<P,B>>
JSONObject json = req.getSubmittedForm(); JSONObject json = req.getSubmittedForm();
buildWrappers.rebuild(req,json, BuildWrappers.getFor(this)); buildWrappers.rebuild(req,json, BuildWrappers.getFor(this));
builders.rebuildHetero(req,json, BuildStep.BUILDERS, "builder"); builders.rebuildHetero(req,json, Builder.all(), "builder");
publishers.rebuild(req, json, BuildStepDescriptor.filter(BuildStep.PUBLISHERS, this.getClass())); publishers.rebuild(req, json, BuildStepDescriptor.filter(BuildStep.PUBLISHERS, this.getClass()));
updateTransientActions(); // to pick up transient actions from builder, publisher, etc. updateTransientActions(); // to pick up transient actions from builder, publisher, etc.
} }
......
...@@ -28,12 +28,12 @@ import hudson.EnvVars; ...@@ -28,12 +28,12 @@ import hudson.EnvVars;
import hudson.FilePath; import hudson.FilePath;
import hudson.Launcher; import hudson.Launcher;
import hudson.Util; import hudson.Util;
import hudson.Extension;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import hudson.model.EnvironmentSpecific; import hudson.model.EnvironmentSpecific;
import hudson.model.ParametersAction;
import hudson.model.TaskListener; import hudson.model.TaskListener;
import hudson.remoting.Callable; import hudson.remoting.Callable;
import hudson.util.ArgumentListBuilder; import hudson.util.ArgumentListBuilder;
...@@ -110,7 +110,7 @@ public class Ant extends Builder { ...@@ -110,7 +110,7 @@ public class Ant extends Builder {
* or null to invoke the default one. * or null to invoke the default one.
*/ */
public AntInstallation getAnt() { public AntInstallation getAnt() {
for( AntInstallation i : DESCRIPTOR.getInstallations() ) { for( AntInstallation i : getDescriptor().getInstallations() ) {
if(antName!=null && i.getName().equals(antName)) if(antName!=null && i.getName().equals(antName))
return i; return i;
} }
...@@ -213,7 +213,7 @@ public class Ant extends Builder { ...@@ -213,7 +213,7 @@ public class Ant extends Builder {
String errorMessage = Messages.Ant_ExecFailed(); String errorMessage = Messages.Ant_ExecFailed();
if(ai==null && (System.currentTimeMillis()-startTime)<1000) { if(ai==null && (System.currentTimeMillis()-startTime)<1000) {
if(DESCRIPTOR.getInstallations()==null) if(getDescriptor().getInstallations()==null)
// looks like the user didn't configure any Ant installation // looks like the user didn't configure any Ant installation
errorMessage += Messages.Ant_GlobalConfigNeeded(); errorMessage += Messages.Ant_GlobalConfigNeeded();
else else
...@@ -238,17 +238,16 @@ public class Ant extends Builder { ...@@ -238,17 +238,16 @@ public class Ant extends Builder {
return base.child("build.xml"); return base.child("build.xml");
} }
public Descriptor<Builder> getDescriptor() { public DescriptorImpl getDescriptor() {
return DESCRIPTOR; return (DescriptorImpl)super.getDescriptor();
} }
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); @Extension
public static class DescriptorImpl extends Descriptor<Builder> { public static class DescriptorImpl extends Descriptor<Builder> {
@CopyOnWrite @CopyOnWrite
private volatile AntInstallation[] installations = new AntInstallation[0]; private volatile AntInstallation[] installations = new AntInstallation[0];
private DescriptorImpl() { public DescriptorImpl() {
load(); load();
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
package hudson.tasks; package hudson.tasks;
import hudson.FilePath; import hudson.FilePath;
import hudson.Extension;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerRequest;
...@@ -50,12 +51,7 @@ public class BatchFile extends CommandInterpreter { ...@@ -50,12 +51,7 @@ public class BatchFile extends CommandInterpreter {
return ".bat"; return ".bat";
} }
public Descriptor<Builder> getDescriptor() { @Extension
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
public String getHelpFile() { public String getHelpFile() {
return "/help/project-config/batch.html"; return "/help/project-config/batch.html";
......
...@@ -24,6 +24,8 @@ ...@@ -24,6 +24,8 @@
package hudson.tasks; package hudson.tasks;
import hudson.Launcher; import hudson.Launcher;
import hudson.Extension;
import hudson.util.DescriptorList;
import hudson.maven.RedeployPublisher; import hudson.maven.RedeployPublisher;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
...@@ -123,13 +125,12 @@ public interface BuildStep { ...@@ -123,13 +125,12 @@ public interface BuildStep {
* List of all installed builders. * List of all installed builders.
* *
* Builders are invoked to perform the build itself. * Builders are invoked to perform the build itself.
*
* @deprecated as of 1.286.
* Use {@link Builder#all()} for read access, and use
* {@link Extension} for registration.
*/ */
public static final List<Descriptor<Builder>> BUILDERS = Descriptor.toList( public static final List<Descriptor<Builder>> BUILDERS = new DescriptorList<Builder>(Builder.class);
Shell.DESCRIPTOR,
BatchFile.DESCRIPTOR,
Ant.DESCRIPTOR,
Maven.DESCRIPTOR
);
/** /**
* List of all installed publishers. * List of all installed publishers.
......
...@@ -29,6 +29,7 @@ import hudson.model.AbstractProject; ...@@ -29,6 +29,7 @@ import hudson.model.AbstractProject;
import java.util.List; import java.util.List;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
/** /**
* {@link Descriptor} for {@link Builder} and {@link Publisher}. * {@link Descriptor} for {@link Builder} and {@link Publisher}.
...@@ -65,9 +66,20 @@ public abstract class BuildStepDescriptor<T extends BuildStep & Describable<T>> ...@@ -65,9 +66,20 @@ public abstract class BuildStepDescriptor<T extends BuildStep & Describable<T>>
/** /**
* Fiters a descriptor for {@link BuildStep}s by using {@link BuildStepDescriptor#isApplicable(Class)}. * Fiters a descriptor for {@link BuildStep}s by using {@link BuildStepDescriptor#isApplicable(Class)}.
*
* @deprecated as of 1.286.
* Use the {@link Collection} version which is more general.
*/ */
public static <T extends BuildStep&Describable<T>> public static <T extends BuildStep&Describable<T>>
List<Descriptor<T>> filter(List<Descriptor<T>> base, Class<? extends AbstractProject> type) { List<Descriptor<T>> filter(List<Descriptor<T>> base, Class<? extends AbstractProject> type) {
return filter((Collection<Descriptor<T>>)base,type);
}
/**
* Fiters a descriptor for {@link BuildStep}s by using {@link BuildStepDescriptor#isApplicable(Class)}.
*/
public static <T extends BuildStep&Describable<T>>
List<Descriptor<T>> filter(Collection<? extends Descriptor<T>> base, Class<? extends AbstractProject> type) {
List<Descriptor<T>> r = new ArrayList<Descriptor<T>>(base.size()); List<Descriptor<T>> r = new ArrayList<Descriptor<T>>(base.size());
for (Descriptor<T> d : base) { for (Descriptor<T> d : base) {
if (d instanceof BuildStepDescriptor) { if (d instanceof BuildStepDescriptor) {
......
...@@ -25,6 +25,7 @@ package hudson.tasks; ...@@ -25,6 +25,7 @@ package hudson.tasks;
import hudson.ExtensionPoint; import hudson.ExtensionPoint;
import hudson.Launcher; import hudson.Launcher;
import hudson.DescriptorExtensionList;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.Build; import hudson.model.Build;
import hudson.model.BuildListener; import hudson.model.BuildListener;
...@@ -32,12 +33,10 @@ import hudson.model.Describable; ...@@ -32,12 +33,10 @@ import hudson.model.Describable;
import hudson.model.Project; import hudson.model.Project;
import hudson.model.Action; import hudson.model.Action;
import hudson.model.AbstractProject; import hudson.model.AbstractProject;
import hudson.model.Descriptor;
import hudson.model.Hudson; import hudson.model.Hudson;
import hudson.model.Run.RunnerAbortedException; import hudson.model.Run.RunnerAbortedException;
import java.io.IOException; import java.io.IOException;
import java.util.Collection;
/** /**
* Pluggability point for performing pre/post actions for the build process. * Pluggability point for performing pre/post actions for the build process.
...@@ -188,7 +187,7 @@ public abstract class BuildWrapper implements ExtensionPoint, Describable<BuildW ...@@ -188,7 +187,7 @@ public abstract class BuildWrapper implements ExtensionPoint, Describable<BuildW
/** /**
* Returns all the registered {@link BuildWrapper} descriptors. * Returns all the registered {@link BuildWrapper} descriptors.
*/ */
public static Collection<Descriptor<BuildWrapper>> all() { public static DescriptorExtensionList<BuildWrapper> all() {
// use getDescriptorList and not getExtensionList to pick up legacy instances // use getDescriptorList and not getExtensionList to pick up legacy instances
return Hudson.getInstance().getDescriptorList(BuildWrapper.class); return Hudson.getInstance().getDescriptorList(BuildWrapper.class);
} }
......
...@@ -24,18 +24,22 @@ ...@@ -24,18 +24,22 @@
package hudson.tasks; package hudson.tasks;
import hudson.ExtensionPoint; import hudson.ExtensionPoint;
import hudson.Extension;
import hudson.DescriptorExtensionList;
import hudson.model.Action; import hudson.model.Action;
import hudson.model.Build; import hudson.model.Build;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Describable; import hudson.model.Describable;
import hudson.model.Project; import hudson.model.Project;
import hudson.model.Descriptor;
import hudson.model.Hudson;
/** /**
* {@link BuildStep}s that perform the actual build. * {@link BuildStep}s that perform the actual build.
* *
* <p> * <p>
* To register a custom {@link Builder} from a plugin, * To register a custom {@link Builder} from a plugin,
* add it to {@link BuildStep#BUILDERS}. * put {@link Extension} on your descriptor.
* *
* @author Kohsuke Kawaguchi * @author Kohsuke Kawaguchi
*/ */
...@@ -58,4 +62,16 @@ public abstract class Builder extends BuildStepCompatibilityLayer implements Bui ...@@ -58,4 +62,16 @@ public abstract class Builder extends BuildStepCompatibilityLayer implements Bui
public Action getProjectAction(Project project) { public Action getProjectAction(Project project) {
return null; return null;
} }
public Descriptor<Builder> getDescriptor() {
return Hudson.getInstance().getDescriptor(getClass());
}
/**
* Returns all the registered {@link Builder} descriptors.
*/
public static DescriptorExtensionList<Builder> all() {
return Hudson.getInstance().getDescriptorList(Builder.class);
}
} }
...@@ -30,6 +30,7 @@ import hudson.Launcher; ...@@ -30,6 +30,7 @@ import hudson.Launcher;
import hudson.Launcher.LocalLauncher; import hudson.Launcher.LocalLauncher;
import hudson.Util; import hudson.Util;
import hudson.EnvVars; import hudson.EnvVars;
import hudson.Extension;
import hudson.maven.MavenEmbedder; import hudson.maven.MavenEmbedder;
import hudson.maven.MavenUtil; import hudson.maven.MavenUtil;
import hudson.maven.RedeployPublisher; import hudson.maven.RedeployPublisher;
...@@ -38,7 +39,6 @@ import hudson.model.AbstractProject; ...@@ -38,7 +39,6 @@ import hudson.model.AbstractProject;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import hudson.model.EnvironmentSpecific; import hudson.model.EnvironmentSpecific;
import hudson.model.ParametersAction;
import hudson.remoting.Callable; import hudson.remoting.Callable;
import hudson.remoting.VirtualChannel; import hudson.remoting.VirtualChannel;
import hudson.util.ArgumentListBuilder; import hudson.util.ArgumentListBuilder;
...@@ -119,7 +119,7 @@ public class Maven extends Builder { ...@@ -119,7 +119,7 @@ public class Maven extends Builder {
* or null to invoke the default one. * or null to invoke the default one.
*/ */
public MavenInstallation getMaven() { public MavenInstallation getMaven() {
for( MavenInstallation i : DESCRIPTOR.getInstallations() ) { for( MavenInstallation i : getDescriptor().getInstallations() ) {
if(mavenName !=null && i.getName().equals(mavenName)) if(mavenName !=null && i.getName().equals(mavenName))
return i; return i;
} }
...@@ -255,21 +255,19 @@ public class Maven extends Builder { ...@@ -255,21 +255,19 @@ public class Maven extends Builder {
return true; return true;
} }
public Descriptor<Builder> getDescriptor() { public DescriptorImpl getDescriptor() {
return DESCRIPTOR; return (DescriptorImpl)super.getDescriptor();
} }
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); @Extension
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
@CopyOnWrite @CopyOnWrite
private volatile MavenInstallation[] installations = new MavenInstallation[0]; private volatile MavenInstallation[] installations = new MavenInstallation[0];
private DescriptorImpl() { public DescriptorImpl() {
load(); load();
} }
protected void convert(Map<String, Object> oldPropertyBag) { protected void convert(Map<String, Object> oldPropertyBag) {
if(oldPropertyBag.containsKey("installations")) if(oldPropertyBag.containsKey("installations"))
installations = (MavenInstallation[]) oldPropertyBag.get("installations"); installations = (MavenInstallation[]) oldPropertyBag.get("installations");
......
...@@ -25,6 +25,7 @@ package hudson.tasks; ...@@ -25,6 +25,7 @@ package hudson.tasks;
import hudson.FilePath; import hudson.FilePath;
import hudson.Util; import hudson.Util;
import hudson.Extension;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import static hudson.model.Hudson.isWindows; import static hudson.model.Hudson.isWindows;
import hudson.util.FormFieldValidator; import hudson.util.FormFieldValidator;
...@@ -82,7 +83,7 @@ public class Shell extends CommandInterpreter { ...@@ -82,7 +83,7 @@ public class Shell extends CommandInterpreter {
args.set(0,args.get(0).substring(2)); // trim off "#!" args.set(0,args.get(0).substring(2)); // trim off "#!"
return args.toArray(new String[args.size()]); return args.toArray(new String[args.size()]);
} else } else
return new String[] { DESCRIPTOR.getShellOrDefault(),"-xe",script.getRemote()}; return new String[] { getDescriptor().getShellOrDefault(),"-xe",script.getRemote()};
} }
protected String getContents() { protected String getContents() {
...@@ -93,19 +94,18 @@ public class Shell extends CommandInterpreter { ...@@ -93,19 +94,18 @@ public class Shell extends CommandInterpreter {
return ".sh"; return ".sh";
} }
public Descriptor<Builder> getDescriptor() { public DescriptorImpl getDescriptor() {
return DESCRIPTOR; return (DescriptorImpl)super.getDescriptor();
} }
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl(); @Extension
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
/** /**
* Shell executable, or null to default. * Shell executable, or null to default.
*/ */
private String shell; private String shell;
private DescriptorImpl() { public DescriptorImpl() {
load(); load();
} }
......
package org.jvnet.hudson.test; package org.jvnet.hudson.test;
import hudson.Launcher; import hudson.Launcher;
import hudson.Extension;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import hudson.model.Result;
import hudson.tasks.Builder; import hudson.tasks.Builder;
import hudson.tasks.BuildStep;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerRequest;
...@@ -31,12 +30,7 @@ public class CaptureEnvironmentBuilder extends Builder { ...@@ -31,12 +30,7 @@ public class CaptureEnvironmentBuilder extends Builder {
return true; return true;
} }
public Descriptor<Builder> getDescriptor() { @Extension
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
public Builder newInstance(StaplerRequest req, JSONObject data) { public Builder newInstance(StaplerRequest req, JSONObject data) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
...@@ -46,8 +40,4 @@ public class CaptureEnvironmentBuilder extends Builder { ...@@ -46,8 +40,4 @@ public class CaptureEnvironmentBuilder extends Builder {
return "Capture Environment Variables"; return "Capture Environment Variables";
} }
} }
static {
BuildStep.BUILDERS.add(DESCRIPTOR);
}
} }
...@@ -24,12 +24,12 @@ ...@@ -24,12 +24,12 @@
package org.jvnet.hudson.test; package org.jvnet.hudson.test;
import hudson.Launcher; import hudson.Launcher;
import hudson.Extension;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import hudson.model.Result; import hudson.model.Result;
import hudson.tasks.Builder; import hudson.tasks.Builder;
import hudson.tasks.BuildStep;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerRequest;
...@@ -47,12 +47,7 @@ public class FailureBuilder extends Builder { ...@@ -47,12 +47,7 @@ public class FailureBuilder extends Builder {
return false; return false;
} }
public Descriptor<Builder> getDescriptor() { @Extension
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
public Builder newInstance(StaplerRequest req, JSONObject data) { public Builder newInstance(StaplerRequest req, JSONObject data) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
...@@ -62,8 +57,4 @@ public class FailureBuilder extends Builder { ...@@ -62,8 +57,4 @@ public class FailureBuilder extends Builder {
return "Always fail"; return "Always fail";
} }
} }
static {
BuildStep.BUILDERS.add(DESCRIPTOR);
}
} }
...@@ -24,10 +24,10 @@ ...@@ -24,10 +24,10 @@
package org.jvnet.hudson.test; package org.jvnet.hudson.test;
import hudson.Launcher; import hudson.Launcher;
import hudson.Extension;
import hudson.model.AbstractBuild; import hudson.model.AbstractBuild;
import hudson.model.BuildListener; import hudson.model.BuildListener;
import hudson.model.Descriptor; import hudson.model.Descriptor;
import hudson.tasks.BuildStep;
import hudson.tasks.Builder; import hudson.tasks.Builder;
import net.sf.json.JSONObject; import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerRequest;
...@@ -52,12 +52,7 @@ public class SleepBuilder extends Builder { ...@@ -52,12 +52,7 @@ public class SleepBuilder extends Builder {
return true; return true;
} }
public Descriptor<Builder> getDescriptor() { @Extension
return DESCRIPTOR;
}
public static final DescriptorImpl DESCRIPTOR = new DescriptorImpl();
public static final class DescriptorImpl extends Descriptor<Builder> { public static final class DescriptorImpl extends Descriptor<Builder> {
public Builder newInstance(StaplerRequest req, JSONObject data) { public Builder newInstance(StaplerRequest req, JSONObject data) {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
...@@ -67,8 +62,4 @@ public class SleepBuilder extends Builder { ...@@ -67,8 +62,4 @@ public class SleepBuilder extends Builder {
return "Sleep"; return "Sleep";
} }
} }
static {
BuildStep.BUILDERS.add(DESCRIPTOR);
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册