All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.model.queue.Executables Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2010, InfraDNA, Inc.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *
 *
 *
 *
 *******************************************************************************/ 

package hudson.model.queue;

import hudson.model.Queue.Executable;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * Convenience methods around {@link Executable}.
 *
 * @author Kohsuke Kawaguchi
 */
public class Executables {

    /**
     * Due to the return type change in {@link Executable}, the caller needs a
     * special precaution now.
     */
    public static SubTask getParentOf(Executable e) {
        try {
            return _getParentOf(e);
        } catch (AbstractMethodError _) {
            try {
                Method m = e.getClass().getMethod("getParent");
                m.setAccessible(true);
                return (SubTask) m.invoke(e);
            } catch (IllegalAccessException x) {
                throw (Error) new IllegalAccessError().initCause(x);
            } catch (NoSuchMethodException x) {
                throw (Error) new NoSuchMethodError().initCause(x);
            } catch (InvocationTargetException x) {
                Throwable y = x.getTargetException();
                if (y instanceof Error) {
                    throw (Error) y;
                }
                if (y instanceof RuntimeException) {
                    throw (RuntimeException) y;
                }
                throw new Error(x);
            }
        }
    }

    /**
     * A pointless function to work around what appears to be a HotSpot problem.
     * See HUDSON-5756 and bug 6933067 on BugParade for more details.
     */
    private static SubTask _getParentOf(Executable e) {
        return e.getParent();
    }

    /**
     * Returns the estimated duration for the executable. Protects against
     * {@link AbstractMethodError}s if the {@link Executable} implementation was
     * compiled against Hudson < 1.383
     */
    public static long getEstimatedDurationFor(Executable e) {
        try {
            return _getEstimatedDuration(e);
        } catch (AbstractMethodError error) {
            return e.getParent().getEstimatedDuration();
        }
    }

    /**
     * A pointless function to work around what appears to be a HotSpot problem.
     * See HUDSON-5756 and bug 6933067 on BugParade for more details.
     */
    private static long _getEstimatedDuration(Executable e) {
        return e.getEstimatedDuration();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy