@Override
		public int compare(KeyedObject object1, KeyedObject object2) {
			KeyedObject ko1 = object1;
			KeyedObject ko2 = object2;
			int returnValue = 0;
			String value1 = null;
			String value2 = null;
			value1 = getValue(ko1); //}catch( NoValueException exc ){value1 = null;}          	
			value2 = getValue(ko2); //} catch( NoValueException exc){value2 = null;}          	

			if (value1 != null) {
				if (value2 != null) {
					returnValue = value1.compareTo(value2);
					if (returnValue != 0) {
						return returnValue;
					}
					if ((ko1.key() - ko2.key()) < 0) {
						return -1;
					}
					else if ((ko1.key() - ko2.key()) > 0) {
						return +1;
					}
					else {
						return 0;
					}
				}
				//ko1 is ok, ko2 fails.
				return -1;
			}
			if (value2 != null) {
				return 1; //ko2 is ok so it precedes ko1
			}
			if ((ko1.key() - ko2.key()) < 0) {
				return -1;
			}
			else if ((ko1.key() - ko2.key()) > 0) {
				return +1;
			}
			else {
				return 0;
			}
		}
This class is a comparator (see java.util.Comparator) for
KeyedObjects having a StringAttribute. Keyed Objects are first
compared by the value of the attribute. Ties are broken by
considering the keys of the KeyedObjects.
Ghidra/Framework/Generic/src/main/java/ghidra/util/graph/attributes/StringAttribute.java