public PEXSubjectCollection(final String identifier, final PermissionsExPlugin plugin)
     throws ExecutionException, PermissionsLoadingException {
   this.identifier = identifier;
   this.plugin = plugin;
   this.cache = plugin.getManager().getSubjects(identifier);
   this.transientCache = plugin.getManager().getTransientSubjects(identifier);
 }
 public void uncache(String identifier) {
   subjectCache.invalidate(identifier);
   PermissionsEx manager = plugin.getManager();
   if (manager != null) {
     manager.uncache(getIdentifier(), identifier);
   }
 }
 public Optional<CommandSource> getCommandSource(String identifier) {
   final Function<String, Optional<CommandSource>> provider =
       plugin.getCommandSourceProvider(getIdentifier());
   if (provider != null) {
     return provider.apply(identifier);
   } else {
     return Optional.empty();
   }
 }
 public CalculatedSubject getCalculatedSubject(String identifier)
     throws PermissionsLoadingException {
   return plugin.getManager().getCalculatedSubject(this.identifier, identifier);
 }