Fix access around unknownFieldData.
Instead of publishing its class I chose to encapsulate the troublesome references in equals()/hashCode() in the generated code into superclass methods in ExtendableMessageNano. Changed a couple of java packages in the test suite to catch this issue easier in the future. Change-Id: I43f88411f63bb6f3ffc8d63361f2f77bebf6220a
This commit is contained in:
parent
30b1454d8b
commit
d1a8a8f6f1
@ -147,4 +147,29 @@ public abstract class ExtendableMessageNano<M extends ExtendableMessageNano<M>>
|
||||
field.addUnknownField(unknownField);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the stored unknown field data in this message is equivalent to that in the
|
||||
* other message.
|
||||
*
|
||||
* @param other the other message.
|
||||
* @return whether the two sets of unknown field data are equal.
|
||||
*/
|
||||
protected final boolean unknownFieldDataEquals(M other) {
|
||||
if (unknownFieldData == null || unknownFieldData.isEmpty()) {
|
||||
return other.unknownFieldData == null || other.unknownFieldData.isEmpty();
|
||||
} else {
|
||||
return unknownFieldData.equals(other.unknownFieldData);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the hashcode representing the unknown field data stored in this message.
|
||||
*
|
||||
* @return the hashcode for the unknown field data.
|
||||
*/
|
||||
protected final int unknownFieldDataHashCode() {
|
||||
return (unknownFieldData == null || unknownFieldData.isEmpty()
|
||||
? 0 : unknownFieldData.hashCode());
|
||||
}
|
||||
}
|
||||
|
@ -35,9 +35,6 @@ import com.google.protobuf.nano.EnumClassNanoMultiple;
|
||||
import com.google.protobuf.nano.EnumClassNanos;
|
||||
import com.google.protobuf.nano.EnumValidity;
|
||||
import com.google.protobuf.nano.EnumValidityAccessors;
|
||||
import com.google.protobuf.nano.Extensions;
|
||||
import com.google.protobuf.nano.Extensions.AnotherMessage;
|
||||
import com.google.protobuf.nano.Extensions.MessageWithGroup;
|
||||
import com.google.protobuf.nano.FileScopeEnumMultiple;
|
||||
import com.google.protobuf.nano.FileScopeEnumRefNano;
|
||||
import com.google.protobuf.nano.InternalNano;
|
||||
@ -57,11 +54,14 @@ import com.google.protobuf.nano.PackedExtensions;
|
||||
import com.google.protobuf.nano.RepeatedExtensions;
|
||||
import com.google.protobuf.nano.SingularExtensions;
|
||||
import com.google.protobuf.nano.TestRepeatedMergeNano;
|
||||
import com.google.protobuf.nano.UnittestImportNano;
|
||||
import com.google.protobuf.nano.UnittestMultipleNano;
|
||||
import com.google.protobuf.nano.UnittestRecursiveNano.RecursiveMessageNano;
|
||||
import com.google.protobuf.nano.UnittestSimpleNano.SimpleMessageNano;
|
||||
import com.google.protobuf.nano.UnittestSingleNano.SingleMessageNano;
|
||||
import com.google.protobuf.nano.testext.Extensions;
|
||||
import com.google.protobuf.nano.testext.Extensions.AnotherMessage;
|
||||
import com.google.protobuf.nano.testext.Extensions.MessageWithGroup;
|
||||
import com.google.protobuf.nano.testimport.UnittestImportNano;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
@ -501,11 +501,7 @@ void MessageGenerator::GenerateEquals(io::Printer* printer) {
|
||||
|
||||
if (params_.store_unknown_fields()) {
|
||||
printer->Print(
|
||||
"if (unknownFieldData == null || unknownFieldData.isEmpty()) {\n"
|
||||
" return other.unknownFieldData == null || other.unknownFieldData.isEmpty();"
|
||||
"} else {\n"
|
||||
" return unknownFieldData.equals(other.unknownFieldData);\n"
|
||||
"}\n");
|
||||
"return unknownFieldDataEquals(other);\n");
|
||||
} else {
|
||||
printer->Print(
|
||||
"return true;\n");
|
||||
@ -534,8 +530,7 @@ void MessageGenerator::GenerateHashCode(io::Printer* printer) {
|
||||
|
||||
if (params_.store_unknown_fields()) {
|
||||
printer->Print(
|
||||
"result = 31 * result + (unknownFieldData == null || unknownFieldData.isEmpty()\n"
|
||||
" ? 0 : unknownFieldData.hashCode());\n");
|
||||
"result = 31 * result + unknownFieldDataHashCode();\n");
|
||||
}
|
||||
|
||||
printer->Print("return result;\n");
|
||||
|
@ -1,7 +1,7 @@
|
||||
syntax = "proto2";
|
||||
|
||||
option java_outer_classname = "Extensions";
|
||||
option java_package = "com.google.protobuf.nano";
|
||||
option java_package = "com.google.protobuf.nano.testext";
|
||||
|
||||
message ExtendableMessage {
|
||||
optional int32 field = 1;
|
||||
|
@ -35,7 +35,7 @@
|
||||
package protobuf_unittest_import;
|
||||
|
||||
// java_package and java_outer_classname are specified on the command line.
|
||||
//option java_package = "com.google.protobuf.nano";
|
||||
//option java_package = "com.google.protobuf.nano.testimport";
|
||||
//option java_outer_classname = "UnittestImportNano";
|
||||
|
||||
message ImportMessageNano {
|
||||
|
Loading…
Reference in New Issue
Block a user