@Override
    public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws InterruptedException, IOException {
        if (this instanceof SimpleBuildStep) {
            // delegate to the overloaded version defined in SimpleBuildStep
            FilePath workspace = build.getWorkspace();
            if (workspace == null) {
                throw new AbortException("no workspace for " + build);
            }
            ((SimpleBuildStep) this).perform(build, workspace, launcher, listener);
            return true;
        } else if (build instanceof Build) {
            // delegate to the legacy signature deprecated in 1.312
            return perform((Build)build,launcher,listener);
        } else {
            return true;
        }
    }
@ Override public boolean perform ( AbstractBuild < ? , ? > build , Launcher launcher , BuildListener listener ) throws InterruptedException , IOException { if ( this instanceof SimpleBuildStep ) { FilePath workspace = build . getWorkspace ( ) ; if ( workspace == null ) { throw new AbortException ( "no workspace for " + build ) ; } ( ( SimpleBuildStep ) this ) . perform ( build , workspace , launcher , listener ) ; return true ; } else if ( build instanceof Build ) { return perform ( ( Build ) build , launcher , listener ) ; } else { return true ; } }
{@inheritDoc}
@return Delegates to {@link SimpleBuildStep#perform(Run, FilePath, Launcher, TaskListener)} if possible, always returning true or throwing an error.