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.
|
// 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) {
|
func (c Converter) rootFiles(pkg gen.Package, vocabName string, v vocabulary, m *gen.ManagerGenerator) (f []*File, e error) {
|
||||||
pg := gen.NewPackageGenerator()
|
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)
|
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, 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, disj, fmt.Sprintf("gen_pkg_%s_disjoint.go", lowerVocabName)))
|
||||||
f = append(f, funcsToFile(pkg, extBy, fmt.Sprintf("gen_pkg_%s_extendedby.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()
|
ser, deser := p.serializationFuncs()
|
||||||
methods = append(methods, ser)
|
methods = append(methods, ser)
|
||||||
funcs = append(funcs, deser)
|
funcs = append(funcs, deser)
|
||||||
|
funcs = append(funcs, p.constructorFn())
|
||||||
methods = append(methods, p.singleTypeFuncs()...)
|
methods = append(methods, p.singleTypeFuncs()...)
|
||||||
methods = append(methods, p.funcs()...)
|
methods = append(methods, p.funcs()...)
|
||||||
methods = append(methods, p.commonMethods()...)
|
methods = append(methods, p.commonMethods()...)
|
||||||
|
@ -721,6 +722,7 @@ func (p *FunctionalPropertyGenerator) multiTypeDef() *codegen.Struct {
|
||||||
ser, deser := p.serializationFuncs()
|
ser, deser := p.serializationFuncs()
|
||||||
methods = append(methods, ser)
|
methods = append(methods, ser)
|
||||||
funcs = append(funcs, deser)
|
funcs = append(funcs, deser)
|
||||||
|
funcs = append(funcs, p.constructorFn())
|
||||||
methods = append(methods, p.multiTypeFuncs()...)
|
methods = append(methods, p.multiTypeFuncs()...)
|
||||||
methods = append(methods, p.funcs()...)
|
methods = append(methods, p.funcs()...)
|
||||||
methods = append(methods, p.commonMethods()...)
|
methods = append(methods, p.commonMethods()...)
|
||||||
|
|
|
@ -69,6 +69,7 @@ func (p *NonFunctionalPropertyGenerator) Definitions() (*codegen.Struct, *codege
|
||||||
ser, deser := p.serializationFuncs()
|
ser, deser := p.serializationFuncs()
|
||||||
methods = append(methods, ser)
|
methods = append(methods, ser)
|
||||||
funcs = append(funcs, deser)
|
funcs = append(funcs, deser)
|
||||||
|
funcs = append(funcs, p.constructorFn())
|
||||||
methods = append(methods, p.funcs()...)
|
methods = append(methods, p.funcs()...)
|
||||||
property := codegen.NewStruct(
|
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()),
|
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.
|
// 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)
|
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
|
// rootDefinitions creates common functions needed at the root level of the
|
||||||
// package declarations.
|
// 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
|
// Type constructors
|
||||||
for _, tg := range tgs {
|
for _, tg := range tgs {
|
||||||
ctors = append(ctors, codegen.NewCommentedFunction(
|
typeCtors = append(typeCtors, codegen.NewCommentedFunction(
|
||||||
m.pkg.Path(),
|
m.pkg.Path(),
|
||||||
fmt.Sprintf("New%s%s", vocabName, tg.TypeName()),
|
fmt.Sprintf("New%s%s", vocabName, tg.TypeName()),
|
||||||
/*params=*/ nil,
|
/*params=*/ nil,
|
||||||
|
@ -293,7 +293,21 @@ func rootDefinitions(vocabName string, m *ManagerGenerator, tgs []*TypeGenerator
|
||||||
tg.constructorFn().Call(),
|
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
|
// Extends
|
||||||
for _, tg := range tgs {
|
for _, tg := range tgs {
|
||||||
|
|
|
@ -380,3 +380,25 @@ func (p *PropertyGenerator) commonMethods() []*codegen.Method {
|
||||||
func (p *PropertyGenerator) isMethodName(i int) string {
|
func (p *PropertyGenerator) isMethodName(i int) string {
|
||||||
return fmt.Sprintf("%s%s", isMethod, p.kindCamelName(i))
|
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()))
|
||||||
|
}
|
||||||
|
|
読み込み中…
新しいイシューから参照