private void logMissingLocation(E e, V v) {

		//
		// This can happen when an edge has a vertex that is 'equal' to a vertex that is 
		// in the graph, but is not the same instance.  The can also happen when a new or
		// copied layout does not initialize its vertices with locations.  This can happen
		// when:
		// 	-two nodes share the same name
		//  -a node is added a second time to the graph
		//
		// An example of duplicate nodes being added is when a client creates a new 
		// edge with a new start and end vertex, which are equal, but not the same, as vertices
		// already in the graph.  **Instead of creating those vertices from scratch, they should
		// be retrieved from the graph when creating the edge.  Further, if you are creating a 
		// new vertex to be added to the graph, be sure to only create one representation of 
		// that vertex that will be shared amongst any edges that are to be added to the graph.
		// 
		// The reason this happens is that the newly 'equals' vertices live in the edge, but 
		// they have not had their 'setLocation' called--the graph contains a vertex that 
		// is 'equals' that has had its 'setLocation' called.  When this transformer grabs the
		// vertex from the edge, its location was never set.
		// 
		boolean isStart = e.getStart() == v;
		String type = isStart ? "start" : "end";
		Msg.debug(this,
			"no location defined for " + type + " vertex: " + v + " " + System.identityHashCode(v));
		if (SystemUtilities.isInTestingMode()) {
			throw new IllegalStateException("Edge vertex is missing a location");
		}
	}
Get the shape for this edge

@param e the edge
@return the edge shape
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/shape/ArticulatedEdgeTransformer.java