Message: make serializer field immutable

This requires two new pass-through constructors, but in return we
get rid of the setter.
This commit is contained in:
Andreas Schildbach 2023-03-22 20:49:29 +01:00
parent b8f77abe62
commit ed57fa08ed
3 changed files with 11 additions and 14 deletions

View file

@ -33,6 +33,10 @@ public abstract class ChildMessage extends Message {
super(params);
}
public ChildMessage(NetworkParameters params, MessageSerializer serializer) {
super(params, serializer);
}
public ChildMessage(NetworkParameters params, ByteBuffer payload) throws ProtocolException {
super(params, payload);
}

View file

@ -50,7 +50,7 @@ public abstract class Message {
// The raw message payload bytes themselves.
protected ByteBuffer payload;
protected MessageSerializer serializer;
protected final MessageSerializer serializer;
@Nullable
protected final NetworkParameters params;
@ -65,6 +65,11 @@ public abstract class Message {
this.serializer = params.getDefaultSerializer();
}
protected Message(NetworkParameters params, MessageSerializer serializer) {
this.params = params;
this.serializer = serializer;
}
/**
*
* @param params NetworkParameters object.
@ -99,17 +104,6 @@ public abstract class Message {
protected void unCache() {
}
/**
* Overrides the message serializer.
* @param serializer the new serializer
*/
public void setSerializer(MessageSerializer serializer) {
if (!this.serializer.equals(serializer)) {
this.serializer = serializer;
unCache();
}
}
/**
* <p>Serialize this message to a byte array that conforms to the bitcoin wire protocol.</p>
*

View file

@ -96,10 +96,9 @@ public class PeerAddress extends ChildMessage {
* Construct a peer address from a memorized or hardcoded address.
*/
public PeerAddress(NetworkParameters params, InetAddress addr, int port, BigInteger services, MessageSerializer serializer) {
super(params);
super(params, serializer);
this.addr = Objects.requireNonNull(addr);
this.port = port;
setSerializer(serializer);
this.services = services;
this.time = Optional.of(TimeUtils.currentTime().truncatedTo(ChronoUnit.SECONDS));
}