Passed
Push — main ( 221f6d...f8c128 )
by Siad
05:28
created

src/Phing/Dispatch/DispatchUtils.php (1 issue)

Severity
1
<?php
2
3
/**
4
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15
 *
16
 * This software consists of voluntary contributions made by many individuals
17
 * and is licensed under the LGPL. For more information please see
18
 * <http://phing.info>.
19
 */
20
21
namespace Phing\Dispatch;
22
23
use Phing\Exception\BuildException;
24
use Phing\Task;
25
use Phing\UnknownElement;
26
use ReflectionClass;
27
use ReflectionException;
28
29
/**
30
 * Determines and Executes the action method for the task.
31
 *
32
 * @author  Siad Ardroumli <[email protected]>
33
 */
34
class DispatchUtils
35
{
36
    /**
37
     * Determines and Executes the action method for the task.
38
     *
39
     * @param object $task the task to execute
40
     *
41
     * @throws BuildException on error
42
     */
43 722
    public static function main($task)
44
    {
45 722
        $methodName = 'main';
46 722
        $dispatchable = null;
47
48
        try {
49 722
            if ($task instanceof Dispatchable) {
50
                $dispatchable = $task;
51 722
            } elseif ($task instanceof UnknownElement) {
52 719
                $ue = $task;
53 719
                $realThing = $ue->getRealThing();
54 719
                if (null != $realThing && $realThing instanceof Dispatchable && $realThing instanceof Task) {
55 1
                    $dispatchable = $realThing;
56
                }
57
            }
58 722
            if (null != $dispatchable) {
59 1
                $mName = null;
0 ignored issues
show
The assignment to $mName is dead and can be removed.
Loading history...
60
61 1
                $name = trim($dispatchable->getActionParameterName());
62 1
                if (empty($name)) {
63
                    throw new BuildException(
64
                        'Action Parameter Name must not be empty for Dispatchable Task.'
65
                    );
66
                }
67 1
                $mName = 'get' . ucfirst($name);
68
69
                try {
70 1
                    $c = new ReflectionClass($dispatchable);
71 1
                    $actionM = $c->getMethod($mName);
72 1
                    $o = $actionM->invoke($dispatchable);
73 1
                    $methodName = trim((string) $o);
74 1
                    if (empty($methodName)) {
75 1
                        throw new ReflectionException();
76
                    }
77
                } catch (ReflectionException $re) {
78
                    throw new BuildException(
79
                        "Dispatchable Task attribute '" . $name . "' not set or value is empty."
80
                    );
81
                }
82 1
                $executeM = $c->getMethod($methodName);
83 1
                $executeM->invoke($dispatchable);
84
85 1
                if ($task instanceof UnknownElement) {
86 1
                    $task->setRealThing(null);
87
                }
88
            } else {
89
                try {
90 722
                    $refl = new ReflectionClass($task);
91 722
                    $executeM = $refl->getMethod($methodName);
92
                } catch (ReflectionException $re) {
93
                    throw new BuildException('No public ' . $methodName . '() in ' . get_class($task));
94
                }
95 722
                $executeM->invoke($task);
96 687
                if ($task instanceof UnknownElement) {
97 687
                    $task->setRealThing(null);
98
                }
99
            }
100 154
        } catch (ReflectionException $e) {
101
            throw new BuildException($e);
102
        }
103 687
    }
104
}
105