create ClassExtends ClassImplements InterfaceExtends nodes

This commit is contained in:
z7zmey
2018-05-12 23:10:01 +03:00
parent cf4fb26764
commit ac74ae3225
19 changed files with 1720 additions and 1495 deletions

View File

@@ -66,11 +66,13 @@ func (nsr *NamespaceResolver) EnterNode(w walker.Walkable) bool {
case *stmt.Class:
if n.Extends != nil {
nsr.ResolveName(n.Extends, "")
nsr.ResolveName(n.Extends.ClassName, "")
}
for _, interfaceName := range n.Implements {
nsr.ResolveName(interfaceName, "")
if n.Implements != nil {
for _, interfaceName := range n.Implements.InterfaceNames {
nsr.ResolveName(interfaceName, "")
}
}
if n.ClassName != nil {
@@ -78,8 +80,10 @@ func (nsr *NamespaceResolver) EnterNode(w walker.Walkable) bool {
}
case *stmt.Interface:
for _, interfaceName := range n.Extends {
nsr.ResolveName(interfaceName, "")
if n.Extends != nil {
for _, interfaceName := range n.Extends.InterfaceNames {
nsr.ResolveName(interfaceName, "")
}
}
nsr.AddNamespacedName(n, n.InterfaceName.(*node.Identifier).Value)

View File

@@ -411,9 +411,13 @@ func TestResolveClassName(t *testing.T) {
class := &stmt.Class{
PhpDocComment: "",
ClassName: &node.Identifier{Value: "A"},
Extends: nameAB,
Implements: []node.Node{
nameBC,
Extends: &stmt.ClassExtends{
ClassName: nameAB,
},
Implements: &stmt.ClassImplements{
InterfaceNames: []node.Node{
nameBC,
},
},
}
@@ -442,9 +446,11 @@ func TestResolveInterfaceName(t *testing.T) {
interfaceNode := &stmt.Interface{
PhpDocComment: "",
InterfaceName: &node.Identifier{Value: "A"},
Extends: []node.Node{
nameAB,
nameBC,
Extends: &stmt.InterfaceExtends{
InterfaceNames: []node.Node{
nameAB,
nameBC,
},
},
}