private SourceCodeEdge createEdgeBetweenParents( Class<? extends SourceCode> type, SourceClass from, SourceClass to, SourceCodeEdge rootEdge) { SourceCode fromParent = from.getParent(type); SourceCode toParent = to.getParent(type); SourceCodeEdge parentEdge = null; if (canWeLinkNodes(fromParent, toParent) && rootEdge != null) { if (graph.getEdge(fromParent, toParent) == null) { parentEdge = new SourceCodeEdge(fromParent, toParent, SourceCodeEdgeUsage.USES); parentEdge.addRootEdge(rootEdge); graph.addEdge(parentEdge); fromParent.add(Metric.CE, 1); toParent.add(Metric.CA, 1); } else { parentEdge = graph.getEdge(fromParent, toParent); if (!parentEdge.hasAnEdgeFromRootNode(rootEdge.getFrom())) { toParent.add(Metric.CA, 1); } if (!parentEdge.hasAnEdgeToRootNode(rootEdge.getTo())) { fromParent.add(Metric.CE, 1); } parentEdge.addRootEdge(rootEdge); } } return parentEdge; }