You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by dk...@apache.org on 2020/05/21 14:39:40 UTC
[avro] 01/02: AVRO-2569:Deprecated annotation usage does not
conform to the Java specification
This is an automated email from the ASF dual-hosted git repository.
dkulp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git
commit f301980140db3c8506baa43a40ded48a7c2e2c40
Author: zeshuai007 <51...@qq.com>
AuthorDate: Wed Sep 25 15:51:58 2019 +0800
AVRO-2569:Deprecated annotation usage does not conform to the Java specification
---
.../avro/compiler/specific/SpecificCompiler.java | 3 +-
.../specific/templates/java/classic/protocol.vm | 4 +-
.../specific/templates/java/classic/record.vm | 16 +++---
.../compiler/specific/TestSpecificCompiler.java | 67 ++++++++++++++--------
4 files changed, 54 insertions(+), 36 deletions(-)
diff --git a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
index c0fe0cd..2f2b942 100644
--- a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
+++ b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
@@ -820,9 +820,10 @@ public class SpecificCompiler {
/**
* Utility for template use. Returns the unboxed java type for a Schema.
*
- * @Deprecated use javaUnbox(Schema, boolean), kept for backward compatibiliby
+ * @deprecated use javaUnbox(Schema, boolean), kept for backward compatibiliby
* of custom templates
*/
+ @Deprecated
public String javaUnbox(Schema schema) {
return javaUnbox(schema, false);
}
diff --git a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/protocol.vm b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/protocol.vm
index 7f79ce5..4fd1fac 100644
--- a/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/protocol.vm
+++ b/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/protocol.vm
@@ -47,7 +47,7 @@ public interface $this.mangle($protocol.getName()) {
#if ($message.isOneWay())void#else${this.javaUnbox($response, true)}#end
${this.mangle($name)}(##
#foreach ($p in $message.getRequest().getFields())##
-#* *#${this.javaUnbox($p.schema())} ${this.mangle($p.name())}#if ($foreach.hasNext), #end
+#* *#${this.javaUnbox($p.schema(), false)} ${this.mangle($p.name())}#if ($foreach.hasNext), #end
#end
)#if (! $message.isOneWay() && $message.getErrors().getTypes().size() > 1)
throws ##
@@ -85,7 +85,7 @@ ${this.mangle($error.getFullName())}##
*/
void ${this.mangle($name)}(##
#foreach ($p in $message.getRequest().getFields())##
-#* *#${this.javaUnbox($p.schema())} ${this.mangle($p.name())}#if ($foreach.hasNext), #end
+#* *#${this.javaUnbox($p.schema(), false)} ${this.mangle($p.name())}#if ($foreach.hasNext), #end
#end
#if ($message.getRequest().getFields().size() > 0), #end
org.apache.avro.ipc.Callback<${this.javaType($response)}> callback) throws java.io.IOException;
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 5777879..69e5b00 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
@@ -111,7 +111,7 @@ static {
#foreach ($annotation in $this.javaAnnotations($field))
@$annotation
#end
- #if (${this.deprecatedFields()})@Deprecated#end #if (${this.publicFields()})public#elseif (${this.privateFields()})private#end ${this.javaUnbox($field.schema())} ${this.mangle($field.name(), $schema.isError())};
+ #if (${this.deprecatedFields()})@Deprecated#end #if (${this.publicFields()})public#elseif (${this.privateFields()})private#end ${this.javaUnbox($field.schema(), false)} ${this.mangle($field.name(), $schema.isError())};
#end
#if ($schema.isError())
@@ -226,7 +226,7 @@ static {
#else * @return The value of the '${this.mangle($field.name(), $schema.isError())}' field.
#end
*/
- public ${this.javaUnbox($field.schema())} ${this.generateGetMethod($schema, $field)}() {
+ public ${this.javaUnbox($field.schema(), false)} ${this.generateGetMethod($schema, $field)}() {
return ${this.mangle($field.name(), $schema.isError())};
}
#end
@@ -250,7 +250,7 @@ static {
#end
* @param value the value to set.
*/
- public void ${this.generateSetMethod($schema, $field)}(${this.javaUnbox($field.schema())} value) {
+ public void ${this.generateSetMethod($schema, $field)}(${this.javaUnbox($field.schema(), false)} value) {
${this.generateSetterCode($field.schema(), ${this.mangle($field.name(), $schema.isError())}, "value")}
}
#end
@@ -302,9 +302,9 @@ static {
#if ($field.doc())
/** $field.doc() */
#end
- private ${this.javaUnbox($field.schema())} ${this.mangle($field.name(), $schema.isError())};
+ private ${this.javaUnbox($field.schema(), false)} ${this.mangle($field.name(), $schema.isError())};
#if (${this.hasBuilder($field.schema())})
- private ${this.javaUnbox($field.schema())}.Builder ${this.mangle($field.name(), $schema.isError())}Builder;
+ private ${this.javaUnbox($field.schema(), false)}.Builder ${this.mangle($field.name(), $schema.isError())}Builder;
#end
#end
@@ -383,7 +383,7 @@ static {
#end
* @return The value.
*/
- public ${this.javaUnbox($field.schema())} ${this.generateGetMethod($schema, $field)}() {
+ public ${this.javaUnbox($field.schema(), false)} ${this.generateGetMethod($schema, $field)}() {
return ${this.mangle($field.name(), $schema.isError())};
}
@@ -406,7 +406,7 @@ static {
* @param value The value of '${this.mangle($field.name(), $schema.isError())}'.
* @return This builder.
*/
- public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateSetMethod($schema, $field)}(${this.javaUnbox($field.schema())} value) {
+ public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateSetMethod($schema, $field)}(${this.javaUnbox($field.schema(), false)} value) {
validate(fields()[$field.pos()], value);
#if (${this.hasBuilder($field.schema())})
this.${this.mangle($field.name(), $schema.isError())}Builder = null;
@@ -451,7 +451,7 @@ static {
* @param value The builder instance that must be set.
* @return This builder.
*/
- public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateSetBuilderMethod($schema, $field)}(${this.javaUnbox($field.schema())}.Builder value) {
+ public #if ($schema.getNamespace())$schema.getNamespace().#end${this.mangle($schema.getName())}.Builder ${this.generateSetBuilderMethod($schema, $field)}(${this.javaUnbox($field.schema(), false)}.Builder value) {
${this.generateClearMethod($schema, $field)}();
${this.mangle($field.name(), $schema.isError())}Builder = value;
return this;
diff --git a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
index 73f9840..b13d7c5 100644
--- a/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
+++ b/lang/java/compiler/src/test/java/org/apache/avro/compiler/specific/TestSpecificCompiler.java
@@ -418,22 +418,31 @@ public class TestSpecificCompiler {
Schema floatSchema = Schema.create(Schema.Type.FLOAT);
Schema doubleSchema = Schema.create(Schema.Type.DOUBLE);
Schema boolSchema = Schema.create(Schema.Type.BOOLEAN);
- Assert.assertEquals("Should use int for Type.INT", "int", compiler.javaUnbox(intSchema));
- Assert.assertEquals("Should use long for Type.LONG", "long", compiler.javaUnbox(longSchema));
- Assert.assertEquals("Should use float for Type.FLOAT", "float", compiler.javaUnbox(floatSchema));
- Assert.assertEquals("Should use double for Type.DOUBLE", "double", compiler.javaUnbox(doubleSchema));
- Assert.assertEquals("Should use boolean for Type.BOOLEAN", "boolean", compiler.javaUnbox(boolSchema));
+ Assert.assertEquals("Should use int for Type.INT", "int", compiler.javaUnbox(intSchema, false));
+ Assert.assertEquals("Should use long for Type.LONG", "long", compiler.javaUnbox(longSchema, false));
+ Assert.assertEquals("Should use float for Type.FLOAT", "float", compiler.javaUnbox(floatSchema, false));
+ Assert.assertEquals("Should use double for Type.DOUBLE", "double", compiler.javaUnbox(doubleSchema, false));
+ Assert.assertEquals("Should use boolean for Type.BOOLEAN", "boolean", compiler.javaUnbox(boolSchema, false));
Schema dateSchema = LogicalTypes.date().addToSchema(Schema.create(Schema.Type.INT));
Schema timeSchema = LogicalTypes.timeMillis().addToSchema(Schema.create(Schema.Type.INT));
Schema timestampSchema = LogicalTypes.timestampMillis().addToSchema(Schema.create(Schema.Type.LONG));
// Date/time types should always use upper level java classes, even though
// their underlying representations are primitive types
- Assert.assertEquals("Should use LocalDate for date type", "java.time.LocalDate", compiler.javaUnbox(dateSchema));
+ Assert.assertEquals("Should use LocalDate for date type", "java.time.LocalDate",
+ compiler.javaUnbox(dateSchema, false));
Assert.assertEquals("Should use LocalTime for time-millis type", "java.time.LocalTime",
- compiler.javaUnbox(timeSchema));
+ compiler.javaUnbox(timeSchema, false));
Assert.assertEquals("Should use DateTime for timestamp-millis type", "java.time.Instant",
- compiler.javaUnbox(timestampSchema));
+ compiler.javaUnbox(timestampSchema, false));
+ }
+
+ @Test
+ public void testJavaUnboxNullToVoid() throws Exception {
+ // see AVRO-2569
+ SpecificCompiler compiler = createCompiler();
+ Schema nullSchema = Schema.create(Schema.Type.NULL);
+ Assert.assertEquals("Should use void for Type.NULL", "void", compiler.javaUnbox(nullSchema, true));
}
@Test
@@ -446,11 +455,11 @@ public class TestSpecificCompiler {
// Date/time types should always use upper level java classes, even though
// their underlying representations are primitive types
Assert.assertEquals("Should use java.time.LocalDate for date type", "java.time.LocalDate",
- compiler.javaUnbox(dateSchema));
+ compiler.javaUnbox(dateSchema, false));
Assert.assertEquals("Should use java.time.LocalTime for time-millis type", "java.time.LocalTime",
- compiler.javaUnbox(timeSchema));
+ compiler.javaUnbox(timeSchema, false));
Assert.assertEquals("Should use java.time.Instant for timestamp-millis type", "java.time.Instant",
- compiler.javaUnbox(timestampSchema));
+ compiler.javaUnbox(timestampSchema, false));
}
@Test
@@ -463,8 +472,10 @@ public class TestSpecificCompiler {
LogicalTypes.decimal(9, 2).addToSchema(Schema.create(Schema.Type.BYTES)));
Schema nullableDecimalSchema2 = Schema.createUnion(
LogicalTypes.decimal(9, 2).addToSchema(Schema.create(Schema.Type.BYTES)), Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema1), "java.math.BigDecimal");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema2), "java.math.BigDecimal");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema1, false),
+ "java.math.BigDecimal");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema2, false),
+ "java.math.BigDecimal");
}
@Test
@@ -477,8 +488,10 @@ public class TestSpecificCompiler {
LogicalTypes.decimal(9, 2).addToSchema(Schema.create(Schema.Type.BYTES)));
Schema nullableDecimalSchema2 = Schema.createUnion(
LogicalTypes.decimal(9, 2).addToSchema(Schema.create(Schema.Type.BYTES)), Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema1), "java.nio.ByteBuffer");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema2), "java.nio.ByteBuffer");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema1, false),
+ "java.nio.ByteBuffer");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDecimalSchema2, false),
+ "java.nio.ByteBuffer");
}
@Test
@@ -489,32 +502,36 @@ public class TestSpecificCompiler {
// Nullable types should return boxed types instead of primitive types
Schema nullableIntSchema1 = Schema.createUnion(Schema.create(Schema.Type.NULL), Schema.create(Schema.Type.INT));
Schema nullableIntSchema2 = Schema.createUnion(Schema.create(Schema.Type.INT), Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableIntSchema1), "java.lang.Integer");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableIntSchema2), "java.lang.Integer");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableIntSchema1, false), "java.lang.Integer");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableIntSchema2, false), "java.lang.Integer");
Schema nullableLongSchema1 = Schema.createUnion(Schema.create(Schema.Type.NULL), Schema.create(Schema.Type.LONG));
Schema nullableLongSchema2 = Schema.createUnion(Schema.create(Schema.Type.LONG), Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableLongSchema1), "java.lang.Long");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableLongSchema2), "java.lang.Long");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableLongSchema1, false), "java.lang.Long");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableLongSchema2, false), "java.lang.Long");
Schema nullableFloatSchema1 = Schema.createUnion(Schema.create(Schema.Type.NULL), Schema.create(Schema.Type.FLOAT));
Schema nullableFloatSchema2 = Schema.createUnion(Schema.create(Schema.Type.FLOAT), Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableFloatSchema1), "java.lang.Float");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableFloatSchema2), "java.lang.Float");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableFloatSchema1, false), "java.lang.Float");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableFloatSchema2, false), "java.lang.Float");
Schema nullableDoubleSchema1 = Schema.createUnion(Schema.create(Schema.Type.NULL),
Schema.create(Schema.Type.DOUBLE));
Schema nullableDoubleSchema2 = Schema.createUnion(Schema.create(Schema.Type.DOUBLE),
Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDoubleSchema1), "java.lang.Double");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDoubleSchema2), "java.lang.Double");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDoubleSchema1, false),
+ "java.lang.Double");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableDoubleSchema2, false),
+ "java.lang.Double");
Schema nullableBooleanSchema1 = Schema.createUnion(Schema.create(Schema.Type.NULL),
Schema.create(Schema.Type.BOOLEAN));
Schema nullableBooleanSchema2 = Schema.createUnion(Schema.create(Schema.Type.BOOLEAN),
Schema.create(Schema.Type.NULL));
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableBooleanSchema1), "java.lang.Boolean");
- Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableBooleanSchema2), "java.lang.Boolean");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableBooleanSchema1, false),
+ "java.lang.Boolean");
+ Assert.assertEquals("Should return boxed type", compiler.javaUnbox(nullableBooleanSchema2, false),
+ "java.lang.Boolean");
}
@Test