Search in sources :

Example 6 with Edge

use of org.eclipse.n4js.smith.ui.graph.Edge in project n4js by eclipse.

the class ASTGraphProvider method getConnectedEdgesForEObject.

/**
 * Add outgoing references
 */
private void getConnectedEdgesForEObject(Node node, final List<Node> allNodes, final List<Edge> result, final EObject eobj) {
    for (EReference currRef : eobj.eClass().getEAllReferences()) {
        if (!currRef.isDerived() && !currRef.isContainer()) {
            if (currRef.isMany()) {
                final Object targets = eobj.eGet(currRef, false);
                if (targets instanceof Collection<?>) {
                    getConnectedEdgesForEObjectManyCase(node, allNodes, result, currRef, targets);
                }
            } else {
                final Object target = eobj.eGet(currRef, false);
                if (target instanceof EObject) {
                    getConnectedEdgesForEObjectSingleCase(node, allNodes, result, currRef, target);
                }
            }
        }
    }
    // add reference to containing Resource if immediate container is not in graph
    // (required when showing lower-level objects while hiding their ancestors)
    Node nodeForElement = GraphUtils.getNodeForElement(eobj.eContainer(), allNodes);
    if (eobj.eResource() != null && eobj.eContainer() != null && nodeForElement == null) {
        final Node nodeForResource = GraphUtils.getNodeForElement(eobj.eResource(), allNodes);
        if (nodeForResource != null) {
            Edge edge = new Edge("<... containment omitted ...>", // not a cross-link
            false, nodeForResource, Collections.singletonList(node), Collections.emptyList());
            result.add(edge);
        }
    }
}
Also used : EObject(org.eclipse.emf.ecore.EObject) ILeafNode(org.eclipse.xtext.nodemodel.ILeafNode) ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Node(org.eclipse.n4js.smith.ui.graph.Node) Collection(java.util.Collection) EObject(org.eclipse.emf.ecore.EObject) Edge(org.eclipse.n4js.smith.ui.graph.Edge) EReference(org.eclipse.emf.ecore.EReference)

Aggregations

Edge (org.eclipse.n4js.smith.ui.graph.Edge)6 EObject (org.eclipse.emf.ecore.EObject)5 Node (org.eclipse.n4js.smith.ui.graph.Node)4 ICompositeNode (org.eclipse.xtext.nodemodel.ICompositeNode)4 ILeafNode (org.eclipse.xtext.nodemodel.ILeafNode)4 ArrayList (java.util.ArrayList)2 Collection (java.util.Collection)2 EReference (org.eclipse.emf.ecore.EReference)1 Resource (org.eclipse.emf.ecore.resource.Resource)1 FlowEdge (org.eclipse.n4js.flowgraphs.FlowEdge)1 ControlFlowElement (org.eclipse.n4js.n4JS.ControlFlowElement)1 CFEdge (org.eclipse.n4js.smith.ui.graph.CFEdge)1