improved null safety

This commit is contained in:
2022-01-12 11:35:02 +01:00
parent c75cf03762
commit 0f3d3e929d
40 changed files with 157 additions and 113 deletions

View File

@@ -3,8 +3,8 @@ package eu.jonahbauer.wizard.common.messages.client;
import eu.jonahbauer.wizard.common.model.Configuration;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.Range;
@Getter
@RequiredArgsConstructor
@@ -13,11 +13,11 @@ public final class CreateSessionMessage extends ClientMessage {
/**
* Name of the session
*/
private final String sessionName;
private final @NonNull String sessionName;
/**
* Name of the creating and joining player
*/
private final String playerName;
private final @NonNull String playerName;
/**
* timout in milliseconds for user interactions
*/
@@ -25,5 +25,5 @@ public final class CreateSessionMessage extends ClientMessage {
/**
* Game configuration
*/
private final Configuration configuration;
private final @NonNull Configuration configuration;
}

View File

@@ -3,6 +3,7 @@ package eu.jonahbauer.wizard.common.messages.client;
import eu.jonahbauer.wizard.common.messages.player.PlayerMessage;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@@ -12,5 +13,5 @@ public final class InteractionMessage extends ClientMessage {
/**
* Wrapped {@link PlayerMessage}
*/
private final PlayerMessage playerMessage;
private final @NonNull PlayerMessage playerMessage;
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.client;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,9 +14,9 @@ public final class JoinSessionMessage extends ClientMessage {
/**
* UUID of the session
*/
private final UUID session;
private final @NonNull UUID session;
/**
* Name of the joining player
*/
private final String playerName;
private final @NonNull String playerName;
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.client;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,13 +14,13 @@ public final class RejoinMessage extends ClientMessage {
/**
* UUID of the session
*/
private final UUID session;
private final @NonNull UUID session;
/**
* UUID of the rejoining player
*/
private final UUID player;
private final @NonNull UUID player;
/**
* Secret in order to assure that no malicious user wants to join the message
*/
private final String secret;
private final @NonNull String secret;
}

View File

@@ -1,9 +1,6 @@
package eu.jonahbauer.wizard.common.messages.data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.*;
import java.util.UUID;
@@ -15,11 +12,11 @@ public class PlayerData {
/**
* UUID of the player
*/
private final UUID uuid;
private final @NonNull UUID uuid;
/**
* Name of the player
*/
private final String name;
private final @NonNull String name;
/**
* Readiness state of the player
*/

View File

@@ -1,10 +1,7 @@
package eu.jonahbauer.wizard.common.messages.data;
import eu.jonahbauer.wizard.common.model.Configuration;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import lombok.*;
import java.util.UUID;
@@ -16,11 +13,11 @@ public class SessionData {
/**
* UUID of the session
*/
private final UUID uuid;
private final @NonNull UUID uuid;
/**
* Name of the session
*/
private final String name;
private final @NonNull String name;
/**
* Number of players currently in the session
*/
@@ -28,5 +25,5 @@ public class SessionData {
/**
* Configuration of the session
*/
private final Configuration configuration;
private final @NonNull Configuration configuration;
}

View File

@@ -3,8 +3,8 @@ package eu.jonahbauer.wizard.common.messages.observer;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
@@ -18,9 +18,9 @@ public final class CardMessage extends ObserverMessage {
/**
* The UUID of the player.
*/
private final @NotNull UUID player;
private final @NonNull UUID player;
/**
* The card played.
*/
private final @NotNull Card card;
private final @NonNull Card card;
}

View File

@@ -3,7 +3,9 @@ package eu.jonahbauer.wizard.common.messages.observer;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Unmodifiable;
import java.util.List;
import java.util.UUID;
@@ -17,14 +19,14 @@ public final class HandMessage extends ObserverMessage {
/**
* The UUID of player whose hand cards are sent.
*/
private final @NotNull UUID player;
private final @NonNull UUID player;
/**
* A list of all the hand cards. May consist only of {@link Card#HIDDEN} if the cards are not visible to the player
* receiving this message.
*/
private final @NotNull List<@NotNull Card> hand;
private final @Unmodifiable @NonNull List<@NotNull Card> hand;
public HandMessage(@NotNull UUID player, @NotNull List<@NotNull Card> hand) {
public HandMessage(@NonNull UUID player, @NonNull List<@NonNull Card> hand) {
this.player = player;
this.hand = List.copyOf(hand);
}

View File

@@ -2,8 +2,7 @@ package eu.jonahbauer.wizard.common.messages.observer;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import lombok.NonNull;
import org.jetbrains.annotations.Range;
import java.util.UUID;
@@ -12,15 +11,20 @@ import java.util.UUID;
* A {@link PredictionMessage} is sent after a player makes (or changes) his prediction.
*/
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class PredictionMessage extends ObserverMessage {
/**
* The UUID of the player who made a prediction.
*/
private final @NotNull UUID player;
private final @NonNull UUID player;
/**
* The prediction.
*/
private final @Range(from = 0, to = Integer.MAX_VALUE) int prediction;
public PredictionMessage(@NonNull UUID player, int prediction) {
if (prediction < 0) throw new IllegalArgumentException("prediction is out of bounds");
this.player = player;
this.prediction = prediction;
}
}

View File

@@ -2,7 +2,9 @@ package eu.jonahbauer.wizard.common.messages.observer;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Unmodifiable;
import java.util.Map;
import java.util.UUID;
@@ -17,9 +19,9 @@ public final class ScoreMessage extends ObserverMessage {
/**
* The number of points for each player.
*/
private final @NotNull Map<@NotNull UUID, @NotNull Integer> points;
private final @Unmodifiable @NonNull Map<@NonNull UUID, @NonNull Integer> points;
public ScoreMessage(@NotNull Map<@NotNull UUID, @NotNull Integer> points) {
public ScoreMessage(@NonNull Map<@NonNull UUID, @NonNull Integer> points) {
this.points = Map.copyOf(points);
}
}

View File

@@ -2,7 +2,9 @@ package eu.jonahbauer.wizard.common.messages.observer;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
/**
* A {@link StateMessage} is sent whenever the game changes its internal state.
@@ -14,5 +16,5 @@ public final class StateMessage extends ObserverMessage {
/**
* The name of the new state in snake_case.
*/
private final String state;
private final @NonNull String state;
}

View File

@@ -3,6 +3,8 @@ package eu.jonahbauer.wizard.common.messages.observer;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.jetbrains.annotations.Unmodifiable;
import java.util.List;
import java.util.UUID;
@@ -17,13 +19,13 @@ public final class TrickMessage extends ObserverMessage {
/**
* The UUID of the player who won the trick.
*/
private final UUID player;
private final @NonNull UUID player;
/**
* The cards played.
*/
private final List<Card> cards;
private final @Unmodifiable @NonNull List<@NonNull Card> cards;
public TrickMessage(UUID player, List<Card> cards) {
public TrickMessage(@NonNull UUID player, @NonNull List<@NonNull Card> cards) {
this.player = player;
this.cards = List.copyOf(cards);
}

View File

@@ -7,7 +7,9 @@ import eu.jonahbauer.wizard.common.messages.player.PredictMessage;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.Nullable;
import java.util.UUID;
@@ -22,11 +24,11 @@ public final class UserInputMessage extends ObserverMessage {
* The UUID of the player whose input is required. May be {@code null} to indicate that an input is required from
* every player.
*/
private final UUID player;
private final @Nullable UUID player;
/**
* The type of input that is required.
*/
private final Action action;
private final @NonNull Action action;
/**
* A timeout in {@link System#currentTimeMillis() UNIX time} after which a default action is taken.
*/

View File

@@ -3,11 +3,12 @@ package eu.jonahbauer.wizard.common.messages.player;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class JuggleMessage extends PlayerMessage {
private final Card card;
private final @NonNull Card card;
}

View File

@@ -3,11 +3,12 @@ package eu.jonahbauer.wizard.common.messages.player;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class PickTrumpMessage extends PlayerMessage {
private final Card.Suit trumpSuit;
private final @NonNull Card.Suit trumpSuit;
}

View File

@@ -3,11 +3,12 @@ package eu.jonahbauer.wizard.common.messages.player;
import eu.jonahbauer.wizard.common.model.Card;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
@EqualsAndHashCode(callSuper = true)
public final class PlayCardMessage extends PlayerMessage {
private final Card card;
private final @NonNull Card card;
}

View File

@@ -3,6 +3,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.observer.ObserverMessage;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@@ -12,5 +13,5 @@ public final class GameMessage extends ServerMessage {
/**
* Wrapped {@link ObserverMessage}
*/
private final ObserverMessage observerMessage;
private final @NonNull ObserverMessage observerMessage;
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,11 +14,11 @@ public final class KickVotedMessage extends ServerMessage {
/**
* UUID of the voting player
*/
private final UUID voter;
private final @NonNull UUID voter;
/**
* UUID of player who is supposed to be kicked
*/
private final UUID player;
private final @NonNull UUID player;
/**
* Time until the vote ends in {@link System#currentTimeMillis() UNIX time}
*/

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,5 +14,5 @@ public final class KickedMessage extends ServerMessage {
/**
* UUID of player who was kicked
*/
private final UUID player;
private final @NonNull UUID player;
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.intellij.lang.annotations.MagicConstant;
@Getter
@@ -26,9 +27,9 @@ public final class NackMessage extends ServerMessage implements Response {
public static final int BAD_REQUEST = 999;
private final int code;
private final String message;
private final @NonNull String message;
public NackMessage(@MagicConstant(valuesFromClass = NackMessage.class) int code, String message) {
public NackMessage(@MagicConstant(valuesFromClass = NackMessage.class) int code, @NonNull String message) {
this.code = code;
this.message = message;
}

View File

@@ -2,11 +2,12 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.PlayerData;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
@EqualsAndHashCode(callSuper = true)
public final class PlayerJoinedMessage extends PlayerModifiedMessage {
public PlayerJoinedMessage(PlayerData playerData) {
super(playerData);
public PlayerJoinedMessage(@NonNull PlayerData player) {
super(player);
}
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,5 +14,5 @@ public final class PlayerLeftMessage extends ServerMessage {
/**
* UUID of player who has left
*/
private final UUID player;
private final @NonNull UUID player;
}

View File

@@ -3,6 +3,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.PlayerData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@@ -12,5 +13,5 @@ public sealed class PlayerModifiedMessage extends ServerMessage permits PlayerJo
/**
* Joining player
*/
private final PlayerData player;
private final @NonNull PlayerData player;
}

View File

@@ -2,11 +2,12 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.SessionData;
import lombok.EqualsAndHashCode;
import lombok.NonNull;
@EqualsAndHashCode(callSuper = true)
public final class SessionCreatedMessage extends SessionModifiedMessage {
public SessionCreatedMessage(SessionData session) {
public SessionCreatedMessage(@NonNull SessionData session) {
super(session);
}
}

View File

@@ -3,6 +3,8 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.PlayerData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.jetbrains.annotations.Unmodifiable;
import java.util.List;
import java.util.UUID;
@@ -13,21 +15,21 @@ public final class SessionJoinedMessage extends ServerMessage implements Respons
/**
* UUID of joined session
*/
private final UUID session;
private final @NonNull UUID session;
/**
* UUID assigned to the player
*/
private final UUID player;
private final @NonNull UUID player;
/**
* List of players already in the session
*/
private final List<PlayerData> players;
private final @Unmodifiable @NonNull List<@NonNull PlayerData> players;
/**
* Secret notified to player in order to ensure that if necessary the correct player rejoins
*/
private final String secret;
private final @NonNull String secret;
public SessionJoinedMessage(UUID session, UUID player, List<PlayerData> players, String secret) {
public SessionJoinedMessage(@NonNull UUID session, @NonNull UUID player, @NonNull List<@NonNull PlayerData> players, @NonNull String secret) {
this.session = session;
this.player = player;
this.players = List.copyOf(players);

View File

@@ -3,6 +3,8 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.SessionData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import org.jetbrains.annotations.Unmodifiable;
import java.util.List;
@@ -12,9 +14,9 @@ public final class SessionListMessage extends ServerMessage implements Response
/**
* List of available sessions
*/
private final List<SessionData> sessions;
private final @Unmodifiable @NonNull List<@NonNull SessionData> sessions;
public SessionListMessage(List<SessionData> sessions) {
public SessionListMessage(@NonNull List<@NonNull SessionData> sessions) {
this.sessions = List.copyOf(sessions);
}
}

View File

@@ -3,6 +3,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import eu.jonahbauer.wizard.common.messages.data.SessionData;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
@Getter
@@ -12,5 +13,5 @@ public sealed class SessionModifiedMessage extends ServerMessage permits Session
/**
* The created session
*/
private final SessionData session;
private final @NonNull SessionData session;
}

View File

@@ -2,6 +2,7 @@ package eu.jonahbauer.wizard.common.messages.server;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import java.util.UUID;
@@ -13,5 +14,5 @@ public final class SessionRemovedMessage extends ServerMessage {
/**
* UUID of the removed session
*/
private final UUID session;
private final @NonNull UUID session;
}