2
2
3
3
namespace PHPSemVerChecker \Analyzer ;
4
4
5
+ use PhpParser \Node \Stmt ;
5
6
use PhpParser \Node \Stmt \Class_ ;
6
7
use PhpParser \Node \Stmt \ClassMethod ;
7
8
use PHPSemVerChecker \Comparator \Signature ;
15
16
16
17
class ClassMethodAnalyzer
17
18
{
18
- protected $ context = 'method ' ;
19
-
19
+ protected $ context ;
20
20
protected $ fileBefore ;
21
21
protected $ fileAfter ;
22
22
23
23
/**
24
24
* @param string $fileBefore
25
25
* @param string $fileAfter
26
26
*/
27
- public function __construct ($ fileBefore = null , $ fileAfter = null )
27
+ public function __construct ($ context , $ fileBefore = null , $ fileAfter = null )
28
28
{
29
+ $ this ->context = $ context ;
29
30
$ this ->fileBefore = $ fileBefore ;
30
31
$ this ->fileAfter = $ fileAfter ;
31
32
}
32
33
33
- public function analyze (Class_ $ classBefore , Class_ $ classAfter )
34
+ public function analyze (Stmt $ contextBefore , Stmt $ contextAfter )
34
35
{
36
+ // TODO: Verify that the given contexts match the context given in the constructor <[email protected] >
35
37
$ report = new Report ();
36
38
37
- $ methodsBefore = $ classBefore ->getMethods ();
38
- $ methodsAfter = $ classAfter ->getMethods ();
39
+ $ methodsBefore = $ contextBefore ->getMethods ();
40
+ $ methodsAfter = $ contextAfter ->getMethods ();
39
41
40
42
$ methodsBeforeKeyed = [];
41
43
foreach ($ methodsBefore as $ method ) {
@@ -66,7 +68,7 @@ public function analyze(Class_ $classBefore, Class_ $classAfter)
66
68
// Removed methods can either be implemented in parent classes or not exist anymore
67
69
foreach ($ methodsRemoved as $ method ) {
68
70
$ methodBefore = $ methodsBeforeKeyed [$ method ];
69
- $ data = new ClassMethodRemoved ($ this ->fileBefore , $ classBefore , $ methodBefore );
71
+ $ data = new ClassMethodRemoved ($ this ->context , $ this -> fileBefore , $ contextBefore , $ methodBefore );
70
72
$ report ->addClassMethod ($ data , Level::MAJOR );
71
73
}
72
74
@@ -83,36 +85,29 @@ public function analyze(Class_ $classBefore, Class_ $classAfter)
83
85
// Signature
84
86
85
87
if ( ! Signature::isSameTypehints ($ paramsBefore , $ paramsAfter )) {
86
- $ data = new ClassMethodParameterChanged ($ this ->fileBefore , $ classBefore , $ methodBefore , $ this ->fileAfter , $ classAfter , $ methodAfter );
88
+ $ data = new ClassMethodParameterChanged ($ this ->context , $ this -> fileBefore , $ contextBefore , $ methodBefore , $ this ->fileAfter , $ contextAfter , $ methodAfter );
87
89
$ report ->addClassMethod ($ data , Level::MAJOR );
88
- continue ;
89
90
}
90
91
91
92
if ( ! Signature::isSameVariables ($ paramsBefore , $ paramsAfter )) {
92
- $ data = new ClassMethodParameterChanged ($ this ->fileBefore , $ classBefore , $ methodBefore , $ this ->fileAfter , $ classAfter , $ methodAfter );
93
+ $ data = new ClassMethodParameterChanged ($ this ->context , $ this -> fileBefore , $ contextBefore , $ methodBefore , $ this ->fileAfter , $ contextAfter , $ methodAfter );
93
94
$ report ->addClassMethod ($ data , Level::PATCH );
94
- continue ;
95
95
}
96
96
97
97
// Different length (considering params with defaults)
98
98
99
99
// Difference in source code
100
100
if ($ methodBefore ->stmts != $ methodAfter ->stmts ) {
101
- $ data = new ClassMethodImplementationChanged ($ this ->fileBefore , $ classBefore , $ methodBefore , $ this ->fileAfter , $ classAfter , $ methodAfter );
101
+ $ data = new ClassMethodImplementationChanged ($ this ->context , $ this -> fileBefore , $ contextBefore , $ methodBefore , $ this ->fileAfter , $ contextAfter , $ methodAfter );
102
102
$ report ->addClassMethod ($ data , Level::PATCH );
103
- continue ;
104
103
}
105
-
106
- // Unable to match an issue, but there is one...
107
- $ data = new Unknown ($ this ->fileBefore , $ this ->fileAfter );
108
- $ report ->addClassMethod ($ data , Level::MAJOR );
109
104
}
110
105
}
111
106
112
107
// Added methods implies MINOR BUMP
113
108
foreach ($ methodsAdded as $ method ) {
114
109
$ methodAfter = $ methodsAfterKeyed [$ method ];
115
- $ data = new ClassMethodAdded ($ this ->fileAfter , $ classAfter , $ methodAfter );
110
+ $ data = new ClassMethodAdded ($ this ->context , $ this -> fileAfter , $ contextAfter , $ methodAfter );
116
111
$ report ->addClassMethod ($ data , Level::MINOR );
117
112
}
118
113
0 commit comments