From 1034f51f9c0b19484a2e960b720a30ee1889ef7b Mon Sep 17 00:00:00 2001 From: Martin Jubelgas Date: Tue, 27 Apr 2021 20:22:31 +0200 Subject: [PATCH 1/2] AVRO-3048: Use SpecificRecord's MODEL$ in builder creation --- .../apache/avro/specific/SpecificErrorBuilderBase.java | 10 ++++++++++ .../avro/specific/SpecificRecordBuilderBase.java | 10 ++++++++++ .../compiler/specific/templates/java/classic/record.vm | 4 ++-- .../avro/examples/baseball/FieldTest.java | 4 ++-- .../output-string/avro/examples/baseball/Player.java | 4 ++-- .../output-string/avro/examples/baseball/Proto.java | 2 +- .../compiler/output/AddExtraOptionalGettersTest.java | 4 ++-- .../tools/src/test/compiler/output/NoSettersTest.java | 4 ++-- .../compiler/output/OptionalGettersAllFieldsTest.java | 4 ++-- .../output/OptionalGettersNullableFieldsTest.java | 4 ++-- lang/java/tools/src/test/compiler/output/Player.java | 4 ++-- 11 files changed, 37 insertions(+), 17 deletions(-) diff --git a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificErrorBuilderBase.java b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificErrorBuilderBase.java index 5390a67d409..2aac97dab3d 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificErrorBuilderBase.java +++ b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificErrorBuilderBase.java @@ -44,6 +44,16 @@ protected SpecificErrorBuilderBase(Schema schema) { super(schema, SpecificData.get()); } + /** + * Creates a SpecificErrorBuilderBase for building errors of the given type. + * + * @param schema the schema associated with the error class. + * @param model the SpecificData instance associated with the error class + */ + protected SpecificErrorBuilderBase(Schema schema, SpecificData model) { + super(schema, model); + } + /** * SpecificErrorBuilderBase copy constructor. * diff --git a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificRecordBuilderBase.java b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificRecordBuilderBase.java index 533e9f90bf9..ba5d26a4997 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificRecordBuilderBase.java +++ b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificRecordBuilderBase.java @@ -35,6 +35,16 @@ protected SpecificRecordBuilderBase(Schema schema) { super(schema, SpecificData.getForSchema(schema)); } + /** + * Creates a SpecificRecordBuilderBase for building records of the given type. + * + * @param schema the schema associated with the record class. + * @param model the SpecificData associated with the specific record class + */ + protected SpecificRecordBuilderBase(Schema schema, SpecificData model) { + super(schema, model); + } + /** * SpecificRecordBuilderBase copy constructor. * diff --git a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm index 0eac87bbc4d..87fef3807a1 100755 --- a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm +++ b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm @@ -310,7 +310,7 @@ static { /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -338,7 +338,7 @@ static { */ private Builder(#if ($schema.getNamespace())$this.mangle($schema.getNamespace()).#end${this.mangle($schema.getName())} other) { #if ($schema.isError()) super(other)#else - super(SCHEMA$)#end; + super(SCHEMA$,MODEL$)#end; #foreach ($field in $schema.getFields()) if (isValidValue(fields()[$field.pos()], other.${this.mangle($field.name(), $schema.isError())})) { this.${this.mangle($field.name(), $schema.isError())} = data().deepCopy(fields()[$field.pos()].schema(), other.${this.mangle($field.name(), $schema.isError())}); diff --git a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java index 7a9bb2a6875..1c786405cd9 100644 --- a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java +++ b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java @@ -310,7 +310,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -350,7 +350,7 @@ private Builder(avro.examples.baseball.FieldTest.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.FieldTest other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java index c24fdb857de..d8250f0d737 100644 --- a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java +++ b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java @@ -242,7 +242,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -274,7 +274,7 @@ private Builder(avro.examples.baseball.Player.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.Player other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Proto.java b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Proto.java index 4c8a6d0d66f..20463106a1c 100644 --- a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Proto.java +++ b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Proto.java @@ -24,4 +24,4 @@ public interface Callback extends Proto { */ void bar(org.apache.avro.ipc.Callback callback) throws java.io.IOException; } -} +} \ No newline at end of file diff --git a/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java b/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java index 3a545db98d5..ee9d1546edc 100644 --- a/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java +++ b/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java @@ -207,7 +207,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -231,7 +231,7 @@ private Builder(avro.examples.baseball.AddExtraOptionalGettersTest.Builder other * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.AddExtraOptionalGettersTest other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/NoSettersTest.java b/lang/java/tools/src/test/compiler/output/NoSettersTest.java index 266096afbc7..1bd8c903a72 100644 --- a/lang/java/tools/src/test/compiler/output/NoSettersTest.java +++ b/lang/java/tools/src/test/compiler/output/NoSettersTest.java @@ -179,7 +179,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -203,7 +203,7 @@ private Builder(avro.examples.baseball.NoSettersTest.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.NoSettersTest other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java b/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java index 5570d8de246..2a4818348e5 100644 --- a/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java +++ b/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java @@ -239,7 +239,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -271,7 +271,7 @@ private Builder(avro.examples.baseball.OptionalGettersAllFieldsTest.Builder othe * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.OptionalGettersAllFieldsTest other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java b/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java index 6a733a21d8c..98fd36db29e 100644 --- a/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java +++ b/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java @@ -239,7 +239,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -271,7 +271,7 @@ private Builder(avro.examples.baseball.OptionalGettersNullableFieldsTest.Builder * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.OptionalGettersNullableFieldsTest other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/Player.java b/lang/java/tools/src/test/compiler/output/Player.java index 61cc22f56c0..371d28d7995 100644 --- a/lang/java/tools/src/test/compiler/output/Player.java +++ b/lang/java/tools/src/test/compiler/output/Player.java @@ -242,7 +242,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$); + super(SCHEMA$,MODEL$); } /** @@ -274,7 +274,7 @@ private Builder(avro.examples.baseball.Player.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.Player other) { - super(SCHEMA$); + super(SCHEMA$,MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true; From 302c573003842a94ab41caab941eecc40b8a45e1 Mon Sep 17 00:00:00 2001 From: Martin Jubelgas Date: Mon, 3 May 2021 23:24:08 +0200 Subject: [PATCH 2/2] AVRO-3048: fix formatting of code templates --- .../avro/compiler/specific/templates/java/classic/record.vm | 4 ++-- .../output-string/avro/examples/baseball/FieldTest.java | 4 ++-- .../compiler/output-string/avro/examples/baseball/Player.java | 4 ++-- .../src/test/compiler/output/AddExtraOptionalGettersTest.java | 4 ++-- lang/java/tools/src/test/compiler/output/NoSettersTest.java | 4 ++-- .../test/compiler/output/OptionalGettersAllFieldsTest.java | 4 ++-- .../compiler/output/OptionalGettersNullableFieldsTest.java | 4 ++-- lang/java/tools/src/test/compiler/output/Player.java | 4 ++-- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm index 87fef3807a1..6449e8fb949 100755 --- a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm +++ b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm @@ -310,7 +310,7 @@ static { /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -338,7 +338,7 @@ static { */ private Builder(#if ($schema.getNamespace())$this.mangle($schema.getNamespace()).#end${this.mangle($schema.getName())} other) { #if ($schema.isError()) super(other)#else - super(SCHEMA$,MODEL$)#end; + super(SCHEMA$, MODEL$)#end; #foreach ($field in $schema.getFields()) if (isValidValue(fields()[$field.pos()], other.${this.mangle($field.name(), $schema.isError())})) { this.${this.mangle($field.name(), $schema.isError())} = data().deepCopy(fields()[$field.pos()].schema(), other.${this.mangle($field.name(), $schema.isError())}); diff --git a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java index 1c786405cd9..92d81f7845e 100644 --- a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java +++ b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/FieldTest.java @@ -310,7 +310,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -350,7 +350,7 @@ private Builder(avro.examples.baseball.FieldTest.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.FieldTest other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java index d8250f0d737..63d475c179e 100644 --- a/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java +++ b/lang/java/tools/src/test/compiler/output-string/avro/examples/baseball/Player.java @@ -242,7 +242,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -274,7 +274,7 @@ private Builder(avro.examples.baseball.Player.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.Player other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java b/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java index ee9d1546edc..d9fe0840e6a 100644 --- a/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java +++ b/lang/java/tools/src/test/compiler/output/AddExtraOptionalGettersTest.java @@ -207,7 +207,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -231,7 +231,7 @@ private Builder(avro.examples.baseball.AddExtraOptionalGettersTest.Builder other * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.AddExtraOptionalGettersTest other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/NoSettersTest.java b/lang/java/tools/src/test/compiler/output/NoSettersTest.java index 1bd8c903a72..12d1de5c3e9 100644 --- a/lang/java/tools/src/test/compiler/output/NoSettersTest.java +++ b/lang/java/tools/src/test/compiler/output/NoSettersTest.java @@ -179,7 +179,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -203,7 +203,7 @@ private Builder(avro.examples.baseball.NoSettersTest.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.NoSettersTest other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java b/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java index 2a4818348e5..6abbfe4b8e7 100644 --- a/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java +++ b/lang/java/tools/src/test/compiler/output/OptionalGettersAllFieldsTest.java @@ -239,7 +239,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -271,7 +271,7 @@ private Builder(avro.examples.baseball.OptionalGettersAllFieldsTest.Builder othe * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.OptionalGettersAllFieldsTest other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java b/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java index 98fd36db29e..bc9b75614e9 100644 --- a/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java +++ b/lang/java/tools/src/test/compiler/output/OptionalGettersNullableFieldsTest.java @@ -239,7 +239,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -271,7 +271,7 @@ private Builder(avro.examples.baseball.OptionalGettersNullableFieldsTest.Builder * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.OptionalGettersNullableFieldsTest other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.name)) { this.name = data().deepCopy(fields()[0].schema(), other.name); fieldSetFlags()[0] = true; diff --git a/lang/java/tools/src/test/compiler/output/Player.java b/lang/java/tools/src/test/compiler/output/Player.java index 371d28d7995..731ced798b3 100644 --- a/lang/java/tools/src/test/compiler/output/Player.java +++ b/lang/java/tools/src/test/compiler/output/Player.java @@ -242,7 +242,7 @@ public static class Builder extends org.apache.avro.specific.SpecificRecordBuild /** Creates a new Builder */ private Builder() { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); } /** @@ -274,7 +274,7 @@ private Builder(avro.examples.baseball.Player.Builder other) { * @param other The existing instance to copy. */ private Builder(avro.examples.baseball.Player other) { - super(SCHEMA$,MODEL$); + super(SCHEMA$, MODEL$); if (isValidValue(fields()[0], other.number)) { this.number = data().deepCopy(fields()[0].schema(), other.number); fieldSetFlags()[0] = true;