DispatchUtils::main()   C
last analyzed

Complexity

Conditions 14
Paths 105

Size

Total Lines 59
Code Lines 42

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 31
CRAP Score 16.8436

Importance

Changes 0
Metric Value
eloc 42
c 0
b 0
f 0
dl 0
loc 59
ccs 31
cts 41
cp 0.7561
rs 6.225
cc 14
nc 105
nop 1
crap 16.8436

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 768
    public static function main($task)
44
    {
45 768
        $methodName = 'main';
46 768
        $dispatchable = null;
47
48
        try {
49 768
            if ($task instanceof Dispatchable) {
50
                $dispatchable = $task;
51 768
            } elseif ($task instanceof UnknownElement) {
52 765
                $ue = $task;
53 765
                $realThing = $ue->getRealThing();
54 765
                if (null != $realThing && $realThing instanceof Dispatchable && $realThing instanceof Task) {
55 3
                    $dispatchable = $realThing;
56
                }
57
            }
58 768
            if (null != $dispatchable) {
59 3
                $mName = null;
0 ignored issues
show
Unused Code introduced by
The assignment to $mName is dead and can be removed.
Loading history...
60
61 3
                $name = trim($dispatchable->getActionParameterName());
62 3
                if (empty($name)) {
63
                    throw new BuildException(
64
                        'Action Parameter Name must not be empty for Dispatchable Task.'
65
                    );
66
                }
67 3
                $mName = 'get' . ucfirst($name);
68
69
                try {
70 3
                    $c = new ReflectionClass($dispatchable);
71 3
                    $actionM = $c->getMethod($mName);
72 3
                    $o = $actionM->invoke($dispatchable);
73 3
                    $methodName = trim((string) $o);
74 3
                    if (empty($methodName)) {
75 3
                        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 3
                $executeM = $c->getMethod($methodName);
83 2
                $executeM->invoke($dispatchable);
84
85 2
                if ($task instanceof UnknownElement) {
86 2
                    $task->setRealThing(null);
87
                }
88
            } else {
89
                try {
90 767
                    $refl = new ReflectionClass($task);
91 767
                    $executeM = $refl->getMethod($methodName);
92
                } catch (ReflectionException $re) {
93
                    throw new BuildException('No public ' . $methodName . '() in ' . get_class($task));
94
                }
95 767
                $executeM->invoke($task);
96 732
                if ($task instanceof UnknownElement) {
97 732
                    $task->setRealThing(null);
98
                }
99
            }
100 160
        } catch (ReflectionException $e) {
101 1
            throw new BuildException($e);
102
        }
103
    }
104
}
105