Optimizations to the core PermissionHolder class
- Remove usage of Java 8 streams from frequently called methods - Use LinkedLists where appropriate to improve Iterator#remove speed - Cache immutable multimap conversion - Rename some methods to make the intended use/behaviour clearer
This commit is contained in:
+1
-1
@@ -130,7 +130,7 @@ public class MigrationPermissionManager extends SubCommand<Object> {
|
||||
// Make a LuckPerms user for the one being migrated
|
||||
plugin.getStorage().loadUser(uuid, "null").join();
|
||||
User user = plugin.getUserManager().getIfLoaded(uuid);
|
||||
if (user.getNodes().size() <= 1) {
|
||||
if (user.getEnduringNodes().size() <= 1) {
|
||||
user.clearNodes(false);
|
||||
}
|
||||
migrateSubject(pmUser, user, 100);
|
||||
|
||||
+1
-1
@@ -186,7 +186,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
|
||||
// Make a LuckPerms user for the one being migrated
|
||||
plugin.getStorage().loadUser(uuid, "null").join();
|
||||
User user = plugin.getUserManager().getIfLoaded(uuid);
|
||||
if (user.getNodes().size() <= 1) {
|
||||
if (user.getEnduringNodes().size() <= 1) {
|
||||
user.clearNodes(false);
|
||||
}
|
||||
migrateSubject(pexUser, user, maxWeight);
|
||||
|
||||
@@ -78,7 +78,7 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_GET_PERMISSIONS)) {
|
||||
Map<ImmutableContextSet, ImmutableMap.Builder<String, Boolean>> perms = new HashMap<>();
|
||||
|
||||
for (Map.Entry<ImmutableContextSet, Collection<Node>> e : (enduring ? holder.getNodes() : holder.getTransientNodes()).asMap().entrySet()) {
|
||||
for (Map.Entry<ImmutableContextSet, Collection<Node>> e : (enduring ? holder.getEnduringNodes() : holder.getTransientNodes()).asMap().entrySet()) {
|
||||
ImmutableMap.Builder<String, Boolean> results = ImmutableMap.builder();
|
||||
for (Node n : e.getValue()) {
|
||||
results.put(n.getPermission(), n.getValue());
|
||||
@@ -184,7 +184,7 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
try (Timing ignored = service.getPlugin().getTimings().time(LPTiming.LP_SUBJECT_GET_PARENTS)) {
|
||||
Map<ImmutableContextSet, ImmutableList.Builder<SubjectReference>> parents = new HashMap<>();
|
||||
|
||||
for (Map.Entry<ImmutableContextSet, Collection<Node>> e : (enduring ? holder.getNodes() : holder.getTransientNodes()).asMap().entrySet()) {
|
||||
for (Map.Entry<ImmutableContextSet, Collection<Node>> e : (enduring ? holder.getEnduringNodes() : holder.getTransientNodes()).asMap().entrySet()) {
|
||||
ImmutableList.Builder<SubjectReference> results = ImmutableList.builder();
|
||||
for (Node n : e.getValue()) {
|
||||
if (n.isGroupNode()) {
|
||||
@@ -321,7 +321,7 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
Map<ImmutableContextSet, Integer> minPrefixPriority = new HashMap<>();
|
||||
Map<ImmutableContextSet, Integer> minSuffixPriority = new HashMap<>();
|
||||
|
||||
for (Node n : enduring ? holder.getNodes().values() : holder.getTransientNodes().values()) {
|
||||
for (Node n : enduring ? holder.getEnduringNodes().values() : holder.getTransientNodes().values()) {
|
||||
if (!n.getValue()) continue;
|
||||
if (!n.isMeta() && !n.isPrefix() && !n.isSuffix()) continue;
|
||||
|
||||
@@ -460,7 +460,7 @@ public class LuckPermsSubjectData implements LPSubjectData {
|
||||
}
|
||||
|
||||
private Stream<Node> streamNodes(boolean enduring) {
|
||||
return (enduring ? holder.getNodes() : holder.getTransientNodes()).values().stream();
|
||||
return (enduring ? holder.getEnduringNodes() : holder.getTransientNodes()).values().stream();
|
||||
}
|
||||
|
||||
private Consumer<Node> makeUnsetConsumer(boolean enduring) {
|
||||
|
||||
+3
-3
@@ -37,7 +37,7 @@ import com.google.gson.JsonObject;
|
||||
import me.lucko.luckperms.api.context.ImmutableContextSet;
|
||||
import me.lucko.luckperms.common.contexts.ContextSetComparator;
|
||||
import me.lucko.luckperms.common.node.NodeModel;
|
||||
import me.lucko.luckperms.common.node.NodePriorityComparator;
|
||||
import me.lucko.luckperms.common.node.NodeWithContextComparator;
|
||||
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
|
||||
import me.lucko.luckperms.sponge.service.model.LPPermissionService;
|
||||
import me.lucko.luckperms.sponge.service.model.SubjectReference;
|
||||
@@ -194,7 +194,7 @@ public class SubjectStorageModel {
|
||||
|
||||
// sort alphabetically.
|
||||
List<Map.Entry<String, Boolean>> perms = new ArrayList<>(e.getValue().entrySet());
|
||||
perms.sort((o1, o2) -> NodePriorityComparator.get().compareStrings(o1.getKey(), o2.getKey()));
|
||||
perms.sort((o1, o2) -> NodeWithContextComparator.get().compareStrings(o1.getKey(), o2.getKey()));
|
||||
|
||||
for (Map.Entry<String, Boolean> ent : perms) {
|
||||
data.addProperty(ent.getKey(), ent.getValue());
|
||||
@@ -218,7 +218,7 @@ public class SubjectStorageModel {
|
||||
|
||||
// sort alphabetically.
|
||||
List<Map.Entry<String, String>> opts = new ArrayList<>(e.getValue().entrySet());
|
||||
opts.sort((o1, o2) -> NodePriorityComparator.get().compareStrings(o1.getKey(), o2.getKey()));
|
||||
opts.sort((o1, o2) -> NodeWithContextComparator.get().compareStrings(o1.getKey(), o2.getKey()));
|
||||
|
||||
for (Map.Entry<String, String> ent : opts) {
|
||||
data.addProperty(ent.getKey(), ent.getValue());
|
||||
|
||||
Reference in New Issue
Block a user