Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix ownership ref issue #214

Merged
merged 3 commits into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions pkg/concepts/attribute.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,17 @@ type Attribute struct {
namedSupport
typedSupport

owner *Type
link bool
owner *Type
link bool
linkOwner *Version
}

func (a *Attribute) SetLinkOwner(v *Version) {
a.linkOwner = v
}

func (a *Attribute) LinkOwner() *Version {
return a.linkOwner
}

// NewAttribute creates a new attribute.
Expand Down
36 changes: 21 additions & 15 deletions pkg/generators/golang/builders_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -642,20 +642,24 @@ func (g *BuildersGenerator) fieldName(attribute *concepts.Attribute) string {
func (g *BuildersGenerator) fieldType(attribute *concepts.Attribute) *TypeReference {
typ := attribute.Type()
var ref *TypeReference
referencedVersion := ""
if attribute.LinkOwner() != nil {
referencedVersion = attribute.LinkOwner().Name().String()
}
switch {
case typ.IsScalar():
ref = g.types.ValueReference(typ)
case typ.IsStruct():
ref = g.types.BuilderReference(typ)
ref = g.types.BuilderReference(typ, referencedVersion)
case typ.IsList():
if attribute.Link() {
ref = g.types.BuilderReference(typ)
ref = g.types.BuilderReference(typ, referencedVersion)
} else {
element := typ.Element()
if element.IsScalar() {
ref = g.types.NullableReference(typ)
ref = g.types.NullableReference(typ, referencedVersion)
} else {
ref = g.types.BuilderReference(element)
ref = g.types.BuilderReference(element, referencedVersion)
ref = g.types.Reference(
ref.Import(),
ref.Selector(),
Expand All @@ -667,9 +671,9 @@ func (g *BuildersGenerator) fieldType(attribute *concepts.Attribute) *TypeRefere
case typ.IsMap():
element := typ.Element()
if element.IsScalar() {
ref = g.types.NullableReference(typ)
ref = g.types.NullableReference(typ, referencedVersion)
} else {
ref = g.types.BuilderReference(element)
ref = g.types.BuilderReference(element, referencedVersion)
ref = g.types.Reference(
ref.Import(),
ref.Selector(),
Expand All @@ -689,12 +693,10 @@ func (g *BuildersGenerator) fieldType(attribute *concepts.Attribute) *TypeRefere
}

func (g *BuildersGenerator) selectorType(attribute *concepts.Attribute) string {
ref := g.fieldType(attribute)
pkgName := g.packages.VersionSelector(attribute.Owner().Owner())
if pkgName != ref.selector {
return fmt.Sprintf("%s.", ref.selector)
if attribute.LinkOwner() == nil {
return ""
}
return ""
return fmt.Sprintf("%s.", g.packages.VersionSelector(attribute.LinkOwner()))
}

func (g *BuildersGenerator) setterName(attribute *concepts.Attribute) string {
Expand All @@ -708,20 +710,24 @@ func (g *BuildersGenerator) setterName(attribute *concepts.Attribute) string {
func (g *BuildersGenerator) setterType(attribute *concepts.Attribute) *TypeReference {
typ := attribute.Type()
var ref *TypeReference
referencedVersion := ""
if attribute.LinkOwner() != nil {
referencedVersion = attribute.LinkOwner().Name().String()
}
switch {
case typ.IsScalar():
ref = g.types.ValueReference(typ)
case typ.IsStruct():
ref = g.types.BuilderReference(typ)
ref = g.types.BuilderReference(typ, referencedVersion)
case typ.IsList():
if attribute.Link() {
ref = g.types.BuilderReference(typ)
ref = g.types.BuilderReference(typ, referencedVersion)
} else {
element := typ.Element()
if element.IsScalar() {
ref = g.types.ValueReference(typ)
} else {
ref = g.types.BuilderReference(element)
ref = g.types.BuilderReference(element, referencedVersion)
ref = g.types.Reference(
ref.Import(),
ref.Selector(),
Expand All @@ -735,7 +741,7 @@ func (g *BuildersGenerator) setterType(attribute *concepts.Attribute) *TypeRefer
if element.IsScalar() {
ref = g.types.ValueReference(typ)
} else {
ref = g.types.BuilderReference(element)
ref = g.types.BuilderReference(element, referencedVersion)
ref = g.types.Reference(
ref.Import(),
ref.Selector(),
Expand Down
6 changes: 3 additions & 3 deletions pkg/generators/golang/clients_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -1049,7 +1049,7 @@ func (g *ClientsGenerator) fieldType(parameter *concepts.Parameter) *TypeReferen
case parameter.IsItems():
ref = g.types.ListReference(typ)
case typ.IsScalar() || typ.IsStruct() || typ.IsList() || typ.IsMap():
ref = g.types.NullableReference(typ)
ref = g.types.NullableReference(typ, "")
}
if ref == nil {
g.reporter.Errorf(
Expand Down Expand Up @@ -1091,13 +1091,13 @@ func (g *ClientsGenerator) accessorType(parameter *concepts.Parameter) *TypeRefe
typ := parameter.Type()
switch {
case typ.IsList() && typ.Element().IsScalar():
ref = g.types.NullableReference(typ)
ref = g.types.NullableReference(typ, "")
case parameter.IsItems():
ref = g.types.ListReference(typ)
case typ.IsScalar():
ref = g.types.ValueReference(typ)
case typ.IsStruct() || typ.IsList() || typ.IsMap():
ref = g.types.NullableReference(typ)
ref = g.types.NullableReference(typ, "")
}
if ref == nil {
g.reporter.Errorf(
Expand Down
Loading
Loading