From f61d9ff9f0f8e63f4fab6c194e4621f6747d6585 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 2 Jan 2022 16:58:15 +0000 Subject: [PATCH] Fix NPE from permission holder initialisation order (#3263) --- .../lucko/luckperms/common/model/InheritanceOrigin.java | 4 ++-- .../lucko/luckperms/common/model/PermissionHolder.java | 9 ++++++--- .../common/model/PermissionHolderIdentifier.java | 8 ++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/model/InheritanceOrigin.java b/common/src/main/java/me/lucko/luckperms/common/model/InheritanceOrigin.java index 8fbe8f33c..904b51e96 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/InheritanceOrigin.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/InheritanceOrigin.java @@ -37,8 +37,8 @@ public class InheritanceOrigin implements InheritanceOriginMetadata { private final DataType dataType; public InheritanceOrigin(PermissionHolderIdentifier origin, DataType dataType) { - this.origin = origin; - this.dataType = dataType; + this.origin = Objects.requireNonNull(origin, "origin"); + this.dataType = Objects.requireNonNull(dataType, "dataType"); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java index fd9e71d4c..d2ab7171a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java @@ -110,7 +110,7 @@ public abstract class PermissionHolder { * * @see #normalData() */ - private final RecordedNodeMap normalNodes = new RecordedNodeMap(new NodeMapMutable(this, DataType.NORMAL)); + private final RecordedNodeMap normalNodes; /** * The holders transient nodes. @@ -122,12 +122,12 @@ public abstract class PermissionHolder { * * @see #transientData() */ - private final NodeMap transientNodes = new NodeMapMutable(this, DataType.TRANSIENT); + private final NodeMap transientNodes; /** * Comparator used to ordering groups when calculating inheritance */ - private final Comparator inheritanceComparator = InheritanceComparator.getFor(this); + private final Comparator inheritanceComparator; /** * Creates a new instance @@ -137,6 +137,9 @@ public abstract class PermissionHolder { protected PermissionHolder(LuckPermsPlugin plugin, String objectName) { this.plugin = plugin; this.identifier = new PermissionHolderIdentifier(getType(), objectName); + this.normalNodes = new RecordedNodeMap(new NodeMapMutable(this, DataType.NORMAL)); + this.transientNodes = new NodeMapMutable(this, DataType.TRANSIENT); + this.inheritanceComparator = InheritanceComparator.getFor(this); } // getters diff --git a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolderIdentifier.java b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolderIdentifier.java index dc829ff69..4d5c772e1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolderIdentifier.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolderIdentifier.java @@ -36,15 +36,15 @@ public final class PermissionHolderIdentifier implements Identifier { private final String name; public PermissionHolderIdentifier(HolderType type, String name) { - this.type = type == HolderType.USER + this.type = Objects.requireNonNull(type, "type") == HolderType.USER ? Identifier.USER_TYPE : Identifier.GROUP_TYPE; - this.name = name; + this.name = Objects.requireNonNull(name, "name"); } public PermissionHolderIdentifier(String type, String name) { - this.type = type; - this.name = name; + this.type = Objects.requireNonNull(type, "type"); + this.name = Objects.requireNonNull(name, "name"); } @Override