Passed
Push — master ( d5c6e8...acf3eb )
by Jean-Christophe
06:08
created

UIntrospection   A

Complexity

Total Complexity 18

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Test Coverage

Coverage 76.67%

Importance

Changes 0
Metric Value
wmc 18
eloc 56
dl 0
loc 83
ccs 46
cts 60
cp 0.7667
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A getMethodCode() 0 12 3
B closure_dump() 0 35 8
A getLoadedViews() 0 8 2
A getFileName() 0 3 1
A getClassCode() 0 4 1
A getChildClasses() 0 9 3
1
<?php
2
3
namespace Ubiquity\utils\base;
4
5
class UIntrospection {
6
7 2
	public static function getClassCode($classname) {
8 2
		$r=new \ReflectionClass($classname);
9 2
		$lines=file($r->getFileName());
10 2
		return $lines;
11
	}
12
13 1
	public static function getFileName($classname) {
14 1
		$r=new \ReflectionClass($classname);
15 1
		return $r->getFileName();
16
	}
17
18 2
	public static function getLoadedViews(\ReflectionMethod $r, $lines) {
19 2
		$matches=[ ];
20 2
		$code=self::getMethodCode($r, $lines);
21 2
		\preg_match_all('@(?:.*?)\$this\-\>loadView\([\'\"](.+?)[\'\"](?:.*?)@s', $code, $matches);
22 2
		if (isset($matches[1])) {
23 2
			return $matches[1];
24
		}
25
		return [ ];
26
	}
27
28 2
	public static function getMethodCode(\ReflectionMethod $r, $lines) {
29 2
		$str="";
30 2
		$count=\sizeof($lines);
31 2
		$sLine=$r->getStartLine();
32 2
		$eLine=$r->getEndLine();
33 2
		if ($sLine == $eLine)
34
			return $lines[$sLine];
35 2
		$min=\min($eLine, $count);
36 2
		for($l=$sLine; $l < $min; $l++) {
37 2
			$str.=$lines[$l];
38
		}
39 2
		return $str;
40
	}
41
42 4
	public static function closure_dump(\Closure $c) {
43 4
		$str='function (';
44 4
		$r=new \ReflectionFunction($c);
45 4
		$params=array ();
46 4
		foreach ( $r->getParameters() as $p ) {
47 4
			$s='';
48 4
			if ($p->isArray()) {
49
				$s.='array ';
50 4
			} else if ($p->getClass()) {
51
				$s.=$p->getClass()->name . ' ';
52
			}
53 4
			if ($p->isPassedByReference()) {
54
				$s.='&';
55
			}
56 4
			$s.='$' . $p->name;
57 4
			if ($p->isOptional()) {
58
				$s.=' = ' . \var_export($p->getDefaultValue(), TRUE);
59
			}
60 4
			$params[]=$s;
61
		}
62 4
		$str.=\implode(', ', $params);
63 4
		$str.=')';
64 4
		$lines=file($r->getFileName());
65 4
		$sLine=$r->getStartLine();
66 4
		$eLine=$r->getEndLine();
67 4
		if($eLine===$sLine){
68
			$str.=strstr(strstr($lines[$sLine-1],"{"),"}",true)."}";
69
		}else{
70 4
			$str.=strstr($lines[$sLine-1],"{");
71 4
			for($l=$sLine; $l < $eLine-1; $l++) {
72 4
				$str.=$lines[$l];
73
			}
74 4
			$str.=strstr($lines[$eLine-1],"}",true)."}";
75
		}
76 4
		return $str;
77
	}
78
79
	public static function getChildClasses($baseClass){
80
		$children  = [];
81
		foreach(\get_declared_classes() as $class){
82
			$rClass=new \ReflectionClass($class);
83
			if($rClass->isSubclassOf($baseClass)){
84
				$children[] = $class;
85
			}
86
		}
87
		return $children;
88
	}
89
}
90