本文整理汇总了Golang中github.com/serulian/compiler/compilergraph.GraphNode.GetTagged方法的典型用法代码示例。如果您正苦于以下问题:Golang GraphNode.GetTagged方法的具体用法?Golang GraphNode.GetTagged怎么用?Golang GraphNode.GetTagged使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/serulian/compiler/compilergraph.GraphNode
的用法示例。
在下文中一共展示了GraphNode.GetTagged方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: adjustedMemberSignature
// adjustedMemberSignature returns the member signature found on the given node, adjusted for
// the parent type's generics, as specified in this type reference. Will panic if the type reference
// does not refer to the node's parent type.
func (tr TypeReference) adjustedMemberSignature(node compilergraph.GraphNode) string {
compilerutil.DCHECK(func() bool {
return node.StartQuery().In(NodePredicateMember).GetNode() == tr.referredTypeNode()
}, "Type reference must be parent of member node")
// Retrieve the generics of the parent type.
parentNode := tr.referredTypeNode()
pgit := parentNode.StartQuery().Out(NodePredicateTypeGeneric).BuildNodeIterator()
// Parse the member signature.
esig := &proto.MemberSig{}
memberSig := node.GetTagged(NodePredicateMemberSignature, esig).(*proto.MemberSig)
// Replace the generics of the parent type in the signature with those of the type reference.
generics := tr.Generics()
var index = 0
var memberType = tr.Build(memberSig.GetMemberType()).(TypeReference)
for pgit.Next() {
genericNode := pgit.Node()
genericRef := generics[index]
genericType := TGTypeDecl{genericNode, tr.tdg}
// Replace the generic in the member type.
memberType = memberType.ReplaceType(genericType, genericRef)
// Replace the generic in any generic constraints.
for cindex, constraint := range memberSig.GetGenericConstraints() {
memberSig.GenericConstraints[cindex] = tr.Build(constraint).(TypeReference).
ReplaceType(genericType, genericRef).
Value()
}
index = index + 1
}
adjustedType := memberType.Value()
memberSig.MemberType = &adjustedType
return memberSig.Value()
}