-
Notifications
You must be signed in to change notification settings - Fork 0
/
node.go
76 lines (64 loc) · 1.53 KB
/
node.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package mbast
import (
"strconv"
"strings"
"github.com/maliboot/mago/mali/cmd/mbast/attribute"
)
type Node struct {
Name string
PackageName string
PackageAlias string
PackageFQN string
Type Type
Receiver *Node
Attributes []attribute.Attribute
}
type InterfaceNode = Node
type StructNode = Node
type BindNode = Node
func NewNodeFormString(name string, nodeType Type, nodeAttrs []attribute.Attribute) *Node {
if !strings.Contains(name, "/") {
return &Node{
Name: name,
PackageName: "",
PackageAlias: "",
PackageFQN: "",
Type: 0,
Attributes: nil,
}
}
nameSlice := strings.Split(name, "/")
nameSliceLen := len(nameSlice)
return &Node{
Name: nameSlice[nameSliceLen-1],
PackageName: nameSlice[nameSliceLen-2],
PackageAlias: "",
PackageFQN: strings.Join(nameSlice[:nameSliceLen-1], "/"),
Type: nodeType,
Attributes: nodeAttrs,
}
}
func (n *Node) ResetAlias(nodes []*Node) *Node {
pkgNames := make(map[string]int)
nodeListLen := len(nodes)
for i := 0; i < nodeListLen; i++ {
if n.PackageFQN == nodes[i].PackageFQN {
n.PackageAlias = nodes[i].PackageAlias
return n
}
pkgNames[nodes[i].PackageName] = 1
}
if _, ok := pkgNames[n.PackageName]; ok {
n.PackageAlias = n.PackageName + strconv.Itoa(nodeListLen+1)
}
return n
}
func (n *Node) GetTplRef() string {
return n.GetTplRefPrefix() + "." + n.Name
}
func (n *Node) GetTplRefPrefix() string {
if n.PackageAlias != "" {
return n.PackageAlias
}
return n.PackageName
}