@Override
    public TristateResult apply(@NonNull String permission) {
        // convert the permission to lowercase, as all values in the backing map are also lowercase.
        // this allows fast case insensitive lookups
        permission = permission.toLowerCase(Locale.ROOT);

        // offer the permission to the permission vault
        // we only need to do this once per permission, so it doesn't matter
        // that this call is behind the cache.
        this.plugin.getPermissionRegistry().offer(permission);

        TristateResult result = TristateResult.UNDEFINED;
        for (PermissionProcessor processor : this.processors) {
            result = processor.hasPermission(result, permission);
        }
        return result;
    }
Performs a permission check against this calculator.

<p>The result is calculated using the calculators backing 'processors'.</p>

@param permission the permission to check
@param origin marks where this check originated from
@return the result
common/src/main/java/me/lucko/luckperms/common/calculator/PermissionCalculator.java