GraphFragment (@NotNull GraphElement element) { int upNodeIndex; int downNodeIndex; if (element instanceof GraphNode) { upNodeIndex = ((GraphNode)element).getNodeIndex(); downNodeIndex = upNodeIndex; } else { NormalEdge graphEdge = LinearGraphUtils.asNormalEdge(((GraphEdge)element)); if (graphEdge == null) return null; upNodeIndex = graphEdge.up; downNodeIndex = graphEdge.down; } for (int i = 0; i < MAX_SEARCH_SIZE; i++) { GraphFragment graphFragment = getDownFragment(upNodeIndex); if (graphFragment != null && graphFragment.downNodeIndex >= downNodeIndex) return graphFragment; List<Integer> upNodes = myLinearGraph.getNodes(upNodeIndex, UP); if (upNodes.size() != 1) { break; } upNodeIndex = upNodes.get(0); } return null; }