diff options
author | Feng Xiao <xfxyjwf@gmail.com> | 2018-08-08 17:14:42 -0700 |
---|---|---|
committer | Feng Xiao <xfxyjwf@gmail.com> | 2018-08-08 17:14:42 -0700 |
commit | a8465b738e5a1f346ece58ea6f82612bcd6659d2 (patch) | |
tree | b755540a5d7d2cc988eabc7ac594e6abd9da29d1 /java/core/src/main | |
parent | 6bbe197e9c1b6fc38cbdc45e3bf83fa7ced792a3 (diff) | |
parent | 9bbc4b1fab8262958c172f2d8e87b486c950a051 (diff) | |
download | protobuf-a8465b738e5a1f346ece58ea6f82612bcd6659d2.tar.gz protobuf-a8465b738e5a1f346ece58ea6f82612bcd6659d2.tar.bz2 protobuf-a8465b738e5a1f346ece58ea6f82612bcd6659d2.zip |
Merge master branch.
Diffstat (limited to 'java/core/src/main')
-rw-r--r-- | java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java b/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java index 35b31f15..ff670fd8 100644 --- a/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java +++ b/java/core/src/main/java/com/google/protobuf/GeneratedMessageLite.java @@ -1406,7 +1406,7 @@ public abstract class GeneratedMessageLite< /** * A serialized (serializable) form of the generated message. Stores the - * message as a class name and a byte array. + * message as a class and a byte array. */ protected static final class SerializedForm implements Serializable { @@ -1416,6 +1416,9 @@ public abstract class GeneratedMessageLite< private static final long serialVersionUID = 0L; + // since v3.6.1 + private final Class<?> messageClass; + // only included for backwards compatibility before messageClass was added private final String messageClassName; private final byte[] asBytes; @@ -1424,7 +1427,8 @@ public abstract class GeneratedMessageLite< * @param regularForm the message to serialize */ SerializedForm(MessageLite regularForm) { - messageClassName = regularForm.getClass().getName(); + messageClass = regularForm.getClass(); + messageClassName = messageClass.getName(); asBytes = regularForm.toByteArray(); } @@ -1436,7 +1440,7 @@ public abstract class GeneratedMessageLite< @SuppressWarnings("unchecked") protected Object readResolve() throws ObjectStreamException { try { - Class<?> messageClass = Class.forName(messageClassName); + Class<?> messageClass = resolveMessageClass(); java.lang.reflect.Field defaultInstanceField = messageClass.getDeclaredField("DEFAULT_INSTANCE"); defaultInstanceField.setAccessible(true); @@ -1463,7 +1467,7 @@ public abstract class GeneratedMessageLite< @Deprecated private Object readResolveFallback() throws ObjectStreamException { try { - Class<?> messageClass = Class.forName(messageClassName); + Class<?> messageClass = resolveMessageClass(); java.lang.reflect.Field defaultInstanceField = messageClass.getDeclaredField("defaultInstance"); defaultInstanceField.setAccessible(true); @@ -1483,6 +1487,10 @@ public abstract class GeneratedMessageLite< throw new RuntimeException("Unable to understand proto buffer", e); } } + + private Class<?> resolveMessageClass() throws ClassNotFoundException { + return messageClass != null ? messageClass : Class.forName(messageClassName); + } } /** |