[2/2] avro git commit: AVRO-1966: Java: Fix NPE When copying builder with nullable record.

2017-12-22 Thread nielsbasjes
AVRO-1966: Java: Fix NPE When copying builder with nullable record.


Project: http://git-wip-us.apache.org/repos/asf/avro/repo
Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/8bed58c6
Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/8bed58c6
Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/8bed58c6

Branch: refs/heads/branch-1.8
Commit: 8bed58c6ca57f43c20d2c0eae30e0d4e82d5e6fc
Parents: d35724e
Author: Niels Basjes 
Authored: Wed Nov 30 21:50:13 2016 +0100
Committer: Niels Basjes 
Committed: Fri Dec 22 23:29:48 2017 +0100

--
 CHANGES.txt |  2 +
 .../specific/templates/java/classic/record.vm   |  2 +-
 .../avro/specific/TestSpecificBuilderTree.java  | 29 ++
 .../avro/examples/baseball/Player.java  |  8 ++--
 .../tools/src/test/compiler/output/Player.java  |  8 ++--
 share/test/schemas/nestedNullable.avdl  | 41 
 6 files changed, 81 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/avro/blob/8bed58c6/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index d542d30..ff4e51f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -28,6 +28,8 @@ Trunk (not yet released)
 AVRO-1485: Specification says Record field type can be record name but 
implementation allows any named type.
 (Nandor Kollar via gabor)
 
+AVRO-1966: Java: Fix NPE When copying builder with nullable record. (Niels 
Basjes)
+
 Avro 1.8.2 (10 April 2017)
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/avro/blob/8bed58c6/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm
--
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 94090d8..50c9ecf 100644
--- 
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
@@ -274,7 +274,7 @@ public class ${this.mangle($schema.getName())}#if 
($schema.isError()) extends or
 #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())});
-fieldSetFlags()[$field.pos()] = true;
+fieldSetFlags()[$field.pos()] = other.fieldSetFlags()[$field.pos()];
   }
 #if (${this.hasBuilder($field.schema())})
   if (other.${this.generateHasBuilderMethod($schema, $field)}()) {

http://git-wip-us.apache.org/repos/asf/avro/blob/8bed58c6/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
--
diff --git 
a/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
 
b/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
index 24afd52..f9856e9 100644
--- 
a/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
+++ 
b/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
@@ -19,11 +19,15 @@ package org.apache.avro.specific;
 
 import org.apache.avro.AvroMissingFieldException;
 import org.apache.avro.test.http.*;
+import org.apache.avro.test.nullable.Nullable;
+import org.apache.avro.test.nullable.RecordWithNullables;
 import org.junit.Test;
 
 import java.util.ArrayList;
 
+import static org.apache.avro.test.nullable.Nullable.*;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.fail;
 
 public class TestSpecificBuilderTree {
@@ -260,4 +264,29 @@ public class TestSpecificBuilderTree {
 assertEquals("/index.html", 
request.getHttpRequest().getURI().getPath());
   }
 
+  @Test
+  public void copyBuilderWithNullables() {
+RecordWithNullables.Builder builder = RecordWithNullables.newBuilder();
+
+assertFalse(builder.hasNullableRecordBuilder());
+assertFalse(builder.hasNullableRecord());
+assertFalse(builder.hasNullableString());
+assertFalse(builder.hasNullableLong  ());
+assertFalse(builder.hasNullableInt   ());
+assertFalse(builder.hasNullableMap   ());
+assertFalse(builder.hasNullableArray ());
+
+RecordWithNullables.Builder builderCopy = 
RecordWithNullables.newBuilder(builder);
+
+assertFalse(builderCopy.hasNullableRecordBuilder());
+

avro git commit: AVRO-1966: Java: Fix NPE When copying builder with nullable record.

2016-12-01 Thread nielsbasjes
Repository: avro
Updated Branches:
  refs/heads/master cae491a62 -> a53a4fd10


AVRO-1966: Java: Fix NPE When copying builder with nullable record.


Project: http://git-wip-us.apache.org/repos/asf/avro/repo
Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/a53a4fd1
Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/a53a4fd1
Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/a53a4fd1

Branch: refs/heads/master
Commit: a53a4fd10072471aa7c8170499a10792e61e0d95
Parents: cae491a
Author: Niels Basjes 
Authored: Wed Nov 30 21:50:13 2016 +0100
Committer: Niels Basjes 
Committed: Wed Nov 30 21:50:13 2016 +0100

--
 CHANGES.txt |  2 +
 .../specific/templates/java/classic/record.vm   |  2 +-
 .../avro/specific/TestSpecificBuilderTree.java  | 29 ++
 .../avro/examples/baseball/Player.java  |  8 ++--
 .../tools/src/test/compiler/output/Player.java  |  8 ++--
 share/test/schemas/nestedNullable.avdl  | 41 
 6 files changed, 81 insertions(+), 9 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/avro/blob/a53a4fd1/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 3553e2a..fa11bb8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -104,6 +104,8 @@ Trunk (not yet released)
 
 AVRO-1951: Python: Fix ipc_test.py with a valid DNS name. (blue)
 
+AVRO-1966: Java: Fix NPE When copying builder with nullable record. (Niels 
Basjes)
+
 Avro 1.8.1 (14 May 2016)
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/avro/blob/a53a4fd1/lang/java/compiler/src/main/velocity/org/apache/avro/compiler/specific/templates/java/classic/record.vm
--
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 85c5e9d..c333dd0 100644
--- 
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
@@ -264,7 +264,7 @@ public class ${this.mangle($schema.getName())}#if 
($schema.isError()) extends or
 #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())});
-fieldSetFlags()[$field.pos()] = true;
+fieldSetFlags()[$field.pos()] = other.fieldSetFlags()[$field.pos()];
   }
 #if (${this.hasBuilder($field.schema())})
   if (other.${this.generateHasBuilderMethod($schema, $field)}()) {

http://git-wip-us.apache.org/repos/asf/avro/blob/a53a4fd1/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
--
diff --git 
a/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
 
b/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
index a0ad619..87b9e6f 100644
--- 
a/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
+++ 
b/lang/java/ipc/src/test/java/org/apache/avro/specific/TestSpecificBuilderTree.java
@@ -18,11 +18,15 @@
 package org.apache.avro.specific;
 
 import org.apache.avro.test.http.*;
+import org.apache.avro.test.nullable.Nullable;
+import org.apache.avro.test.nullable.RecordWithNullables;
 import org.junit.Test;
 
 import java.util.ArrayList;
 
+import static org.apache.avro.test.nullable.Nullable.*;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.fail;
 
 public class TestSpecificBuilderTree {
@@ -254,4 +258,29 @@ public class TestSpecificBuilderTree {
 assertEquals("/index.html", 
request.getHttpRequest().getURI().getPath());
   }
 
+  @Test
+  public void copyBuilderWithNullables() {
+RecordWithNullables.Builder builder = RecordWithNullables.newBuilder();
+
+assertFalse(builder.hasNullableRecordBuilder());
+assertFalse(builder.hasNullableRecord());
+assertFalse(builder.hasNullableString());
+assertFalse(builder.hasNullableLong  ());
+assertFalse(builder.hasNullableInt   ());
+assertFalse(builder.hasNullableMap   ());
+assertFalse(builder.hasNullableArray ());
+
+RecordWithNullables.Builder builderCopy = 
RecordWithNullables.newBuilder(builder);
+
+assertFalse(builderCopy.hasNullableRecordBuilder());
+assertFalse(builderCopy.hasNullableRecord())