From c5afa4074fa4cdc6ec3048cea7c363ba7dd84a10 Mon Sep 17 00:00:00 2001 From: Stanislav Usenkov Date: Fri, 12 Aug 2016 19:31:44 +0700 Subject: [PATCH] I've searched that bug for a several hours! --- .../rscPermissions/API/RowInheritance.java | 23 ++++++++----------- .../Engine/Backends/DatabaseContents.java | 4 ++-- .../rscPermissions/Engine/InternalCache.java | 7 ++++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java index 8ba9043..1a10089 100644 --- a/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java +++ b/src/main/java/ru/simsonic/rscPermissions/API/RowInheritance.java @@ -12,13 +12,9 @@ public final class RowInheritance extends ConditionalRow implements Cloneable, C public transient RowEntity entityParent; public void deriveInstance() { - if(parent != null) - { - final String[] splitted = splitIntoNameAndInstance(parent); - parent = splitted[0]; - instance = splitted[1]; - } - instance = ""; + final String[] splitted = splitIntoNameAndInstance(parent); + parent = splitted[0]; + instance = splitted[1]; } public static String[] splitIntoNameAndInstance(String parent) { @@ -28,7 +24,8 @@ public final class RowInheritance extends ConditionalRow implements Cloneable, C final String[] splitted = parent.split(Settings.REGEXP_INSTANCE); if(splitted.length > 1) { - result[0] = GenericChatCodes.glue(Arrays.copyOf(splitted, splitted.length - 1), Settings.INSTANCE_SEP); + final String[] prevTokens = Arrays.copyOf(splitted, splitted.length - 1); + result[0] = GenericChatCodes.glue(prevTokens, Settings.INSTANCE_SEP); result[1] = splitted[splitted.length - 1]; } else { result[0] = parent; @@ -38,14 +35,14 @@ public final class RowInheritance extends ConditionalRow implements Cloneable, C } public static String mergeNameAndInstance(String parent, String instance) { - return parent - + (instance != null && !"".equals(instance) - ? Settings.INSTANCE_SEP + instance - : ""); + final StringBuilder sb = new StringBuilder(parent); + if(instance != null && !"".equals(instance)) + sb.append(Settings.INSTANCE_SEP).append(instance); + return sb.toString(); } public String getParentWithInstance() { - return this.parent + (instance.isEmpty() ? "" : "." + instance); + return mergeNameAndInstance(parent, instance); } @Override public RowInheritance clone() throws CloneNotSupportedException diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java index 7954ea7..72942b3 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/Backends/DatabaseContents.java @@ -151,10 +151,10 @@ public class DatabaseContents final ArrayList li = new ArrayList<>(); // Permissions for(RowPermission row : permissions) - if(row.destination.isServerIdApplicable(serverId)) + if(row.destination != null && row.destination.isServerIdApplicable(serverId)) lp.add(row); for(RowInheritance row : inheritance) - if(row.destination.isServerIdApplicable(serverId)) + if(row.destination != null && row.destination.isServerIdApplicable(serverId)) li.add(row); permissions = lp.toArray(new RowPermission[lp.size()]); inheritance = li.toArray(new RowInheritance[li.size()]); diff --git a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java index d9af603..4b524d2 100644 --- a/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java +++ b/src/main/java/ru/simsonic/rscPermissions/Engine/InternalCache.java @@ -139,8 +139,11 @@ public class InternalCache extends InternalStorage intermediateResults.add(resolveParent(params)); } params.branchDepth -= 1; - params.groupList.add(depthPrefix(params.branchDepth) + currentParent.entity - + ("".equals(instantiator) ? "" : Settings.INSTANCE_SEP + instantiator)); + params.groupList.add(depthPrefix(params.branchDepth) + + currentParent.entity + + ("".equals(instantiator) + ? "" + : Settings.INSTANCE_SEP + instantiator)); // Prefixes and suffixes params.parentEntity = currentParent; params.instantiator = instantiator;