public void accumulateNode(Node n) {
        ensureState(State.ACCUMULATING);

        // only process distinct nodes once, allows inheritance to be
        // "cancelled out" by assigning a false copy.
        if (!this.seenNodeKeys.add(n.getKey())) {
            return;
        }

        if (!n.getValue()) {
            return;
        }

        if (n instanceof MetaNode) {
            MetaNode mn = (MetaNode) n;
            this.meta.put(mn.getMetaKey(), StringResult.of(mn));
        }

        if (n instanceof PrefixNode) {
            PrefixNode pn = (PrefixNode) n;
            this.prefixes.putIfAbsent(pn.getPriority(), StringResult.of(pn));
            this.prefixAccumulator.offer(pn);
        }

        if (n instanceof SuffixNode) {
            SuffixNode pn = (SuffixNode) n;
            this.suffixes.putIfAbsent(pn.getPriority(), StringResult.of(pn));
            this.suffixAccumulator.offer(pn);
        }
    }
"Completes" the accumulator, preventing any further changes.

Also performs some final processing on the accumulators state, before
data is read.
common/src/main/java/me/lucko/luckperms/common/cacheddata/type/MetaAccumulator.java