Fixed infinite recursion problem with Java GeneratedMessageV3 (#5657)

GeneratedMessageV3#setUnknownFieldsProto3 was trying to delegate to
setUnknownFields but was inadvertently resulting in infinite recursion.
This commit makes setUnknownFields and setUnknownFieldsProto3 delegate
to a common private method to fix the problem and avoid confusion.
diff --git a/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java b/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
index cacfa05..03eb803 100644
--- a/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
+++ b/java/core/src/main/java/com/google/protobuf/GeneratedMessageV3.java
@@ -710,19 +710,23 @@
       return (BuilderType) this;
     }
 
-    @Override
-    public BuilderType setUnknownFields(final UnknownFieldSet unknownFields) {
+    private BuilderType setUnknownFieldsInternal(final UnknownFieldSet unknownFields) {
       this.unknownFields = unknownFields;
       onChanged();
       return (BuilderType) this;
     }
 
+    @Override
+    public BuilderType setUnknownFields(final UnknownFieldSet unknownFields) {
+      return setUnknownFieldsInternal(unknownFields);
+    }
+
     /**
-     * Delegates to setUnknownFields. This method is obsolete, but we must retain it for
-     * compatibility with older generated code.
+     * This method is obsolete, but we must retain it for compatibility with
+     * older generated code.
      */
     protected BuilderType setUnknownFieldsProto3(final UnknownFieldSet unknownFields) {
-      return setUnknownFields(unknownFields);
+      return setUnknownFieldsInternal(unknownFields);
     }
 
     @Override