// Define defines the member under the type or module in the type graph. func (mb *MemberBuilder) Define() TGMember { var name = mb.name if mb.isOperator { // Normalize the name by lowercasing it. name = strings.ToLower(mb.name) } // Create the member node. var memberNode compilergraph.ModifiableGraphNode if mb.isOperator { memberNode = mb.modifier.CreateNode(NodeTypeOperator) memberNode.Decorate(NodePredicateOperatorName, name) memberNode.Decorate(NodePredicateMemberName, operatorMemberNamePrefix+name) } else { memberNode = mb.modifier.CreateNode(NodeTypeMember) memberNode.Decorate(NodePredicateMemberName, name) } if mb.hasSourceNode { memberNode.Connect(NodePredicateSource, mb.sourceNode) } memberNode.Decorate(NodePredicateModulePath, mb.parent.ParentModule().Get(NodePredicateModulePath)) // Decorate the member with its generics. for index, genericInfo := range mb.memberGenerics { genericBuilder := genericBuilder{ modifier: mb.modifier, tdg: mb.tdg, parentNode: memberNode, genericKind: typeMemberGeneric, index: index, parentPredicate: NodePredicateMemberGeneric, } genericBuilder.Name(genericInfo.name) if genericInfo.hasSourceNode { genericBuilder.SourceNode(genericInfo.sourceNode) } genericBuilder.defineGeneric() } // Add the member to the parent node. parentNode := mb.modifier.Modify(mb.parent.Node()) if mb.isOperator { parentNode.Connect(NodePredicateTypeOperator, memberNode) } else { parentNode.Connect(NodePredicateMember, memberNode) } return TGMember{memberNode.AsNode(), mb.tdg} }
// decorateWithError decorates the given node with an associated error node. func (t *TypeGraph) decorateWithError(node compilergraph.ModifiableGraphNode, message string, args ...interface{}) { errorNode := node.Modifier().CreateNode(NodeTypeError) errorNode.Decorate(NodePredicateErrorMessage, fmt.Sprintf(message, args...)) node.Connect(NodePredicateError, errorNode) }