_disabledReason_overlappingTags(outerRow, row) {
        let keys = new Set(
            this.gates[row].customColumnContextProvider(outerRow + row, this.gates[row]).map(e => e.key));
        if (keys.length === 0) {
            return undefined;
        }

        for (let i = 0; i < row; i++) {
            let g = this.gates[i];
            for (let {key: otherKey} of g === undefined ? [] : g.customColumnContextProvider(outerRow + i, g)) {
                //noinspection JSUnusedAssignment
                if (keys.has(otherKey)) {
                    return "already\ndefined";
                }
            }
        }

        return undefined;
    }
@param {!int} outerRow
@param {!int} row
@returns {undefined|!string}
@private