src/common/core/coretype.js
function getInheritedCollectionPaths(node, name) {
            var paths = [],
                startNode = node,
                actualNode = node,
                endNode,
                prefixNode,
                i,
                inverseOverlays,
                target;

            while (startNode) {
                actualNode = self.getBase(startNode);
                endNode = self.getBase(getInstanceRoot(startNode));
                target = '';
                if (actualNode && endNode) {
                    prefixNode = node;
                    while (actualNode && actualNode !== self.getParent(endNode)) {
                        inverseOverlays = innerCore.getInverseOverlayOfNode(actualNode);
                        if (inverseOverlays[target] && inverseOverlays[target][name]) {
                            for (i = 0; i < inverseOverlays[target][name].length; i += 1) {
                                paths.push(self.joinPaths(self.getPath(prefixNode), inverseOverlays[target][name][i]));
                            }
                        }
                        target = CONSTANTS.PATH_SEP + self.getRelid(actualNode) + target;
                        actualNode = self.getParent(actualNode);
                        prefixNode = self.getParent(prefixNode);
                    }
                }
                startNode = self.getBase(startNode);
            }

            return paths;
        }
function getInheritedCollectionPaths(node, name) {
            var paths = [],
                startNode = node,
                actualNode = node,
                endNode,
                prefixNode,
                i,
                inverseOverlays,
                target;

            while (startNode) {
                actualNode = self.getBase(startNode);
                endNode = self.getBase(getInstanceRoot(startNode));
                target = '';
                if (actualNode && endNode) {
                    prefixNode = node;
                    while (actualNode && actualNode !== self.getParent(endNode)) {
                        inverseOverlays = innerCore.getInverseOverlayOfNode(actualNode);
                        if (inverseOverlays[target] && inverseOverlays[target][name]) {
                            for (i = 0; i < inverseOverlays[target][name].length; i += 1) {
                                paths.push(self.joinPaths(self.getPath(prefixNode), inverseOverlays[target][name][i]));
                            }
                        }
                        target = CONSTANTS.PATH_SEP + self.getRelid(actualNode) + target;
                        actualNode = self.getParent(actualNode);
                        prefixNode = self.getParent(prefixNode);
                    }
                }
                startNode = self.getBase(startNode);
            }

            return paths;
        }
function getInheritedCollectionPaths ( node , name ) { var paths = [ ] , startNode = node , actualNode = node , endNode , prefixNode , i , inverseOverlays , target ; while ( startNode ) { actualNode = self . getBase ( startNode ) ; endNode = self . getBase ( getInstanceRoot ( startNode ) ) ; target = '' ; if ( actualNode && endNode ) { prefixNode = node ; while ( actualNode && actualNode !== self . getParent ( endNode ) ) { inverseOverlays = innerCore . getInverseOverlayOfNode ( actualNode ) ; if ( inverseOverlays [ target ] && inverseOverlays [ target ] [ name ] ) { for ( i = 0 ; i < inverseOverlays [ target ] [ name ] . length ; i += 1 ) { paths . push ( self . joinPaths ( self . getPath ( prefixNode ) , inverseOverlays [ target ] [ name ] [ i ] ) ) ; } } target = CONSTANTS . PATH_SEP + self . getRelid ( actualNode ) + target ; actualNode = self . getParent ( actualNode ) ; prefixNode = self . getParent ( prefixNode ) ; } } startNode = self . getBase ( startNode ) ; } return paths ; }
This function gathers the paths of the nodes that are pointing to the questioned node. The set of relations
that are checked is the 'inherited' inverse relations.

The method of this function is identical to getInheritedCollectionNames, except this function collects the
sources of the given relations and not just the name of all such relation. To return a correct path (as
the data exists in some bases of the actual nodes) the function always convert it back to the place of
inquiry.
@param node - the node in question
@param name - name of the relation that we are interested in
@returns {Array} - list of paths of sources of inherited relations by the given name
This function gathers the paths of the nodes that are pointing to the questioned node . The set of relations that are checked is the inherited inverse relations .