MCPcopy Create free account
hub / github.com/devfile/api / Generate

Method Generate

generator/interfaces/gen.go:66–184  ·  view source on GitHub ↗

Generate generates the artifacts

(ctx *genall.GenerationContext)

Source from the content-addressed store, hash-verified

64
65// Generate generates the artifacts
66func (g Generator) Generate(ctx *genall.GenerationContext) error {
67 for _, root := range ctx.Roots {
68 ctx.Checker.Check(root)
69
70 root.NeedTypesInfo()
71
72 unions := orderedmap.NewOrderedMap()
73 toplevelListContainers := orderedmap.NewOrderedMap()
74 keyed := orderedmap.NewOrderedMap()
75 if err := markers.EachType(ctx.Collector, root, func(info *markers.TypeInfo) {
76 if info.Markers.Get(genutils.UnionMarker.Name) != nil {
77 unions.Set(info.Name, info)
78 return
79 }
80 for i, field := range info.Fields {
81 if field.Markers.Get(toplevelListMarker.Name) != nil {
82 toplevelListContainers.Set(info.Name, info)
83 if arrayType, isArrayType := field.RawField.Type.(*ast.ArrayType); isArrayType {
84 if ident, isIdent := arrayType.Elt.(*ast.Ident); isIdent {
85 keyed.Set(ident.Name, &info.Fields[i])
86 }
87 }
88 }
89 }
90 }); err != nil {
91 root.AddError(err)
92 return nil
93 }
94
95 genutils.WriteFormattedSourceFile("keyed_definitions", ctx, root, func(buf *bytes.Buffer) {
96 for elt := keyed.Front(); elt != nil; elt = elt.Next() {
97 typeName := elt.Key.(string)
98 field := elt.Value.(*markers.FieldInfo)
99 mergeKey := strings.Title(genutils.GetPatchMergeKey(field))
100 buf.WriteString(`
101func (keyed ` + typeName + `) Key() string {
102 return keyed.` + mergeKey + `
103}
104`)
105 }
106 })
107
108 genutils.WriteFormattedSourceFile("toplevellistcontainer_definitions", ctx, root, func(buf *bytes.Buffer) {
109 for elt := toplevelListContainers.Front(); elt != nil; elt = elt.Next() {
110 typeName := elt.Key.(string)
111 theType := elt.Value.(*markers.TypeInfo)
112 buf.WriteString(`
113func (container ` + typeName + `) GetToplevelLists() TopLevelLists {
114 return TopLevelLists{`)
115 for _, field := range theType.Fields {
116 if field.Markers.Get(toplevelListMarker.Name) != nil {
117 buf.WriteString(`
118 "` + field.Name + `": extractKeys(container.` + field.Name + `),`)
119 }
120 }
121 buf.WriteString(`
122 }
123}

Callers

nothing calls this directly

Calls 1

GetMethod · 0.80

Tested by

no test coverage detected