@@ -208,22 +208,19 @@ private void add(final CompositeType type, final int currOffset, final Field fie
208208 .semanticType (semanticTypeOf (type , field ))
209209 .build ();
210210
211+ final int version = null != field ? Math .max (field .sinceVersion (), type .sinceVersion ()) : type .sinceVersion ();
212+
211213 final Token .Builder builder = new Token .Builder ()
212214 .signal (Signal .BEGIN_COMPOSITE )
213215 .name (type .name ())
214216 .referencedName (type .referencedName ())
215217 .offset (currOffset )
216218 .size (type .encodedLength ())
217- .version (type . sinceVersion () )
219+ .version (version )
218220 .deprecated (type .deprecated ())
219221 .description (type .description ())
220222 .encoding (encoding );
221223
222- if (null != field )
223- {
224- builder .version (Math .max (field .sinceVersion (), type .sinceVersion ()));
225- }
226-
227224 tokenList .add (builder .build ());
228225
229226 int offset = 0 ;
@@ -236,19 +233,21 @@ private void add(final CompositeType type, final int currOffset, final Field fie
236233
237234 if (elementType instanceof EncodedDataType )
238235 {
239- add ((EncodedDataType )elementType , offset );
236+ add ((EncodedDataType )elementType ,
237+ offset ,
238+ null != field ? Math .max (field .sinceVersion (), type .sinceVersion ()) : elementType .sinceVersion ());
240239 }
241240 else if (elementType instanceof EnumType )
242241 {
243- add ((EnumType )elementType , offset , null );
242+ add ((EnumType )elementType , offset , field );
244243 }
245244 else if (elementType instanceof SetType )
246245 {
247- add ((SetType )elementType , offset , null );
246+ add ((SetType )elementType , offset , field );
248247 }
249248 else if (elementType instanceof CompositeType )
250249 {
251- add ((CompositeType )elementType , offset , null );
250+ add ((CompositeType )elementType , offset , field );
252251 }
253252
254253 offset += elementType .encodedLength ();
@@ -266,22 +265,19 @@ private void add(final EnumType type, final int offset, final Field field)
266265 .nullValue (type .nullValue ())
267266 .byteOrder (schema .byteOrder ());
268267
268+ final int version = null != field ? Math .max (field .sinceVersion (), type .sinceVersion ()) : type .sinceVersion ();
269+
269270 final Token .Builder builder = new Token .Builder ()
270271 .signal (Signal .BEGIN_ENUM )
271272 .name (type .name ())
272273 .referencedName (type .referencedName ())
273274 .size (encodingType .size ())
274275 .offset (offset )
275- .version (type . sinceVersion () )
276+ .version (version )
276277 .deprecated (type .deprecated ())
277278 .description (type .description ())
278279 .encoding (encodingBuilder .build ());
279280
280- if (null != field )
281- {
282- builder .version (Math .max (field .sinceVersion (), type .sinceVersion ()));
283- }
284-
285281 tokenList .add (builder .build ());
286282
287283 for (final EnumType .ValidValue validValue : type .validValues ())
@@ -322,22 +318,19 @@ private void add(final SetType type, final int offset, final Field field)
322318 .primitiveType (encodingType )
323319 .build ();
324320
321+ final int version = null != field ? Math .max (field .sinceVersion (), type .sinceVersion ()) : type .sinceVersion ();
322+
325323 final Token .Builder builder = new Token .Builder ()
326324 .signal (Signal .BEGIN_SET )
327325 .name (type .name ())
328326 .referencedName (type .referencedName ())
329327 .size (encodingType .size ())
330328 .offset (offset )
331- .version (type . sinceVersion () )
329+ .version (version )
332330 .deprecated (type .deprecated ())
333331 .description (type .description ())
334332 .encoding (encoding );
335333
336- if (null != field )
337- {
338- builder .version (Math .max (field .sinceVersion (), type .sinceVersion ()));
339- }
340-
341334 tokenList .add (builder .build ());
342335
343336 for (final SetType .Choice choice : type .choices ())
@@ -369,7 +362,7 @@ private void add(final SetType.Choice value, final PrimitiveType encodingType)
369362 tokenList .add (builder .build ());
370363 }
371364
372- private void add (final EncodedDataType type , final int offset )
365+ private void add (final EncodedDataType type , final int offset , final int sinceVersion )
373366 {
374367 final Encoding .Builder encodingBuilder = new Encoding .Builder ()
375368 .primitiveType (type .primitiveType ())
@@ -382,7 +375,7 @@ private void add(final EncodedDataType type, final int offset)
382375 .referencedName (type .referencedName ())
383376 .size (type .encodedLength ())
384377 .description (type .description ())
385- .version (type . sinceVersion () )
378+ .version (sinceVersion )
386379 .deprecated (type .deprecated ())
387380 .offset (offset );
388381
@@ -426,21 +419,18 @@ private void add(final EncodedDataType type, final int offset, final Field field
426419 .timeUnit (field .timeUnit ())
427420 .epoch (field .epoch ());
428421
422+ final int version = Math .max (field .sinceVersion (), type .sinceVersion ());
423+
429424 final Token .Builder tokenBuilder = new Token .Builder ()
430425 .signal (Signal .ENCODING )
431426 .name (type .name ())
432427 .referencedName (type .referencedName ())
433428 .size (type .encodedLength ())
434429 .description (type .description ())
435- .version (type . sinceVersion () )
430+ .version (version )
436431 .deprecated (type .deprecated ())
437432 .offset (offset );
438433
439- if (field .type () instanceof CompositeType )
440- {
441- tokenBuilder .version (Math .max (field .sinceVersion (), type .sinceVersion ()));
442- }
443-
444434 switch (field .presence ())
445435 {
446436 case REQUIRED :
0 commit comments