diff --git a/go/otel/otelstef/exphistogramvalue.go b/go/otel/otelstef/exphistogramvalue.go index ef063515..d22a9076 100644 --- a/go/otel/otelstef/exphistogramvalue.go +++ b/go/otel/otelstef/exphistogramvalue.go @@ -101,6 +101,7 @@ func (s *ExpHistogramValue) reset() { s.positiveBuckets.reset() s.negativeBuckets.reset() s.zeroThreshold = 0.0 + s.optionalFieldsPresent = 0 } // fixParent sets the parentModifiedFields pointer to the supplied value. diff --git a/go/otel/otelstef/histogramvalue.go b/go/otel/otelstef/histogramvalue.go index 67c4f3d0..cc82184a 100644 --- a/go/otel/otelstef/histogramvalue.go +++ b/go/otel/otelstef/histogramvalue.go @@ -87,6 +87,7 @@ func (s *HistogramValue) reset() { s.min = 0.0 s.max = 0.0 s.bucketCounts.reset() + s.optionalFieldsPresent = 0 } // fixParent sets the parentModifiedFields pointer to the supplied value. diff --git a/java/src/main/java/com/example/otelstef/ExpHistogramValue.java b/java/src/main/java/com/example/otelstef/ExpHistogramValue.java index 9ec1db94..1857e949 100644 --- a/java/src/main/java/com/example/otelstef/ExpHistogramValue.java +++ b/java/src/main/java/com/example/otelstef/ExpHistogramValue.java @@ -90,6 +90,7 @@ void reset() { negativeBuckets.reset(); } zeroThreshold = 0.0; + optionalFieldsPresent = 0; } diff --git a/java/src/main/java/com/example/otelstef/HistogramValue.java b/java/src/main/java/com/example/otelstef/HistogramValue.java index fa7d02f6..b740956f 100644 --- a/java/src/main/java/com/example/otelstef/HistogramValue.java +++ b/java/src/main/java/com/example/otelstef/HistogramValue.java @@ -72,6 +72,7 @@ void reset() { if (bucketCounts != null) { bucketCounts.reset(); } + optionalFieldsPresent = 0; } diff --git a/stefc/generator/testdata/optional_reset_fail.stef b/stefc/generator/testdata/optional_reset_fail.stef new file mode 100644 index 00000000..795932f5 --- /dev/null +++ b/stefc/generator/testdata/optional_reset_fail.stef @@ -0,0 +1,14 @@ +// This schema was failing (for seed 1765233907441407000) because +// optional struct fields were not reset correctly by reset() method. +package com.example.gentest.optional_reset_fail + +multimap MultiMap1 { + key Struct1 + value int64 +} + +struct Struct1 root { + Field1 bytes optional + Field2 MultiMap1 + Field3 Struct1 optional +} diff --git a/stefc/generator/testdata/seeds/optional_reset_fail_Struct1_seeds.txt b/stefc/generator/testdata/seeds/optional_reset_fail_Struct1_seeds.txt new file mode 100644 index 00000000..696b53d2 --- /dev/null +++ b/stefc/generator/testdata/seeds/optional_reset_fail_Struct1_seeds.txt @@ -0,0 +1 @@ +1765234703981295000 diff --git a/stefc/templates/go/struct.go.tmpl b/stefc/templates/go/struct.go.tmpl index a74128c3..a7397fce 100644 --- a/stefc/templates/go/struct.go.tmpl +++ b/stefc/templates/go/struct.go.tmpl @@ -138,6 +138,9 @@ func (s *{{ $.StructName }}) reset() { {{- end -}} {{- end -}} {{- end -}} + {{- if .OptionalFieldCount}} + s.optionalFieldsPresent = 0 + {{- end}} } // fixParent sets the parentModifiedFields pointer to the supplied value. diff --git a/stefc/templates/java/struct.java.tmpl b/stefc/templates/java/struct.java.tmpl index 647ea844..2d747c09 100644 --- a/stefc/templates/java/struct.java.tmpl +++ b/stefc/templates/java/struct.java.tmpl @@ -79,6 +79,9 @@ public class {{ .StructName }} { {{- end }} {{- end }} + {{- if .OptionalFieldCount}} + optionalFieldsPresent = 0; + {{- end}} } {{ range .Fields }}