Add property constructors.
このコミットが含まれているのは:
コミット
248a464c02
|
@ -875,9 +875,10 @@ func (c Converter) packageManager(s, vocabName string) (pkg *gen.PackageManager,
|
|||
// are the ones typically used by developers.
|
||||
func (c Converter) rootFiles(pkg gen.Package, vocabName string, v vocabulary, m *gen.ManagerGenerator) (f []*File, e error) {
|
||||
pg := gen.NewPackageGenerator()
|
||||
ctors, ext, disj, extBy := pg.RootDefinitions(vocabName, m, v.typeArray(), v.propArray())
|
||||
typeCtors, propCtors, ext, disj, extBy := pg.RootDefinitions(vocabName, m, v.typeArray(), v.propArray())
|
||||
lowerVocabName := strings.ToLower(vocabName)
|
||||
f = append(f, funcsToFile(pkg, ctors, fmt.Sprintf("gen_pkg_%s_constructors.go", lowerVocabName)))
|
||||
f = append(f, funcsToFile(pkg, typeCtors, fmt.Sprintf("gen_pkg_%s_type_constructors.go", lowerVocabName)))
|
||||
f = append(f, funcsToFile(pkg, propCtors, fmt.Sprintf("gen_pkg_%s_property_constructors.go", lowerVocabName)))
|
||||
f = append(f, funcsToFile(pkg, ext, fmt.Sprintf("gen_pkg_%s_extends.go", lowerVocabName)))
|
||||
f = append(f, funcsToFile(pkg, disj, fmt.Sprintf("gen_pkg_%s_disjoint.go", lowerVocabName)))
|
||||
f = append(f, funcsToFile(pkg, extBy, fmt.Sprintf("gen_pkg_%s_extendedby.go", lowerVocabName)))
|
||||
|
|
|
@ -472,6 +472,7 @@ func (p *FunctionalPropertyGenerator) singleTypeDef() *codegen.Struct {
|
|||
ser, deser := p.serializationFuncs()
|
||||
methods = append(methods, ser)
|
||||
funcs = append(funcs, deser)
|
||||
funcs = append(funcs, p.constructorFn())
|
||||
methods = append(methods, p.singleTypeFuncs()...)
|
||||
methods = append(methods, p.funcs()...)
|
||||
methods = append(methods, p.commonMethods()...)
|
||||
|
@ -721,6 +722,7 @@ func (p *FunctionalPropertyGenerator) multiTypeDef() *codegen.Struct {
|
|||
ser, deser := p.serializationFuncs()
|
||||
methods = append(methods, ser)
|
||||
funcs = append(funcs, deser)
|
||||
funcs = append(funcs, p.constructorFn())
|
||||
methods = append(methods, p.multiTypeFuncs()...)
|
||||
methods = append(methods, p.funcs()...)
|
||||
methods = append(methods, p.commonMethods()...)
|
||||
|
|
|
@ -69,6 +69,7 @@ func (p *NonFunctionalPropertyGenerator) Definitions() (*codegen.Struct, *codege
|
|||
ser, deser := p.serializationFuncs()
|
||||
methods = append(methods, ser)
|
||||
funcs = append(funcs, deser)
|
||||
funcs = append(funcs, p.constructorFn())
|
||||
methods = append(methods, p.funcs()...)
|
||||
property := codegen.NewStruct(
|
||||
fmt.Sprintf("%s is the non-functional property %q. It is permitted to have one or more values, and of different value types.", p.StructName(), p.PropertyName()),
|
||||
|
|
|
@ -202,7 +202,7 @@ func (t *PackageGenerator) InitDefinitions(pkg Package, tgs []*TypeGenerator, pg
|
|||
}
|
||||
|
||||
// RootDefinitions creates functions needed at the root level of the package declarations.
|
||||
func (t *PackageGenerator) RootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator, pgs []*PropertyGenerator) (ctors, ext, disj, extBy []*codegen.Function) {
|
||||
func (t *PackageGenerator) RootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator, pgs []*PropertyGenerator) (typeCtors, propCtors, ext, disj, extBy []*codegen.Function) {
|
||||
return rootDefinitions(vocabName, m, tgs, pgs)
|
||||
}
|
||||
|
||||
|
@ -280,10 +280,10 @@ func publicTypeDefinitions(tgs []*TypeGenerator) (typeI *codegen.Interface) {
|
|||
|
||||
// rootDefinitions creates common functions needed at the root level of the
|
||||
// package declarations.
|
||||
func rootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator, pgs []*PropertyGenerator) (ctors, ext, disj, extBy []*codegen.Function) {
|
||||
func rootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator, pgs []*PropertyGenerator) (typeCtors, propCtors, ext, disj, extBy []*codegen.Function) {
|
||||
// Type constructors
|
||||
for _, tg := range tgs {
|
||||
ctors = append(ctors, codegen.NewCommentedFunction(
|
||||
typeCtors = append(typeCtors, codegen.NewCommentedFunction(
|
||||
m.pkg.Path(),
|
||||
fmt.Sprintf("New%s%s", vocabName, tg.TypeName()),
|
||||
/*params=*/ nil,
|
||||
|
@ -293,7 +293,21 @@ func rootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator
|
|||
tg.constructorFn().Call(),
|
||||
),
|
||||
},
|
||||
fmt.Sprintf("New%s%s creates a new %s", tg.PublicPackage().Name(), tg.TypeName(), tg.InterfaceName())))
|
||||
fmt.Sprintf("New%s%s creates a new %s", vocabName, tg.TypeName(), tg.InterfaceName())))
|
||||
}
|
||||
// Property Constructors
|
||||
for _, pg := range pgs {
|
||||
propCtors = append(propCtors, codegen.NewCommentedFunction(
|
||||
m.pkg.Path(),
|
||||
fmt.Sprintf("New%s%s", vocabName, pg.StructName()),
|
||||
/*params=*/ nil,
|
||||
[]jen.Code{jen.Qual(pg.GetPublicPackage().Path(), pg.InterfaceName())},
|
||||
[]jen.Code{
|
||||
jen.Return(
|
||||
pg.constructorFn().Call(),
|
||||
),
|
||||
},
|
||||
fmt.Sprintf("New%s%s creates a new %s", vocabName, pg.StructName(), pg.InterfaceName())))
|
||||
}
|
||||
// Extends
|
||||
for _, tg := range tgs {
|
||||
|
|
|
@ -380,3 +380,25 @@ func (p *PropertyGenerator) commonMethods() []*codegen.Method {
|
|||
func (p *PropertyGenerator) isMethodName(i int) string {
|
||||
return fmt.Sprintf("%s%s", isMethod, p.kindCamelName(i))
|
||||
}
|
||||
|
||||
// constructorFn creates a constructor function with a default vocabulary
|
||||
// alias.
|
||||
func (p *PropertyGenerator) constructorFn() *codegen.Function {
|
||||
return codegen.NewCommentedFunction(
|
||||
p.GetPrivatePackage().Path(),
|
||||
fmt.Sprintf("%s%s", constructorName, p.StructName()),
|
||||
/*params=*/ nil,
|
||||
[]jen.Code{
|
||||
jen.Op("*").Qual(p.GetPrivatePackage().Path(), p.StructName()),
|
||||
},
|
||||
[]jen.Code{
|
||||
jen.Return(
|
||||
jen.Op("&").Qual(p.GetPrivatePackage().Path(), p.StructName()).Values(
|
||||
jen.Dict{
|
||||
jen.Id(aliasMember): jen.Lit(p.vocabAlias),
|
||||
},
|
||||
),
|
||||
),
|
||||
},
|
||||
fmt.Sprintf("%s%s creates a new %s property.", constructorName, p.StructName(), p.PropertyName()))
|
||||
}
|
||||
|
|
読み込み中…
新しいイシューから参照