return lhs.compareTo(rhs);
if ((cmp = lhs.getSelectedOpcodesAsString().compareTo(rhs.getSelectedOpcodesAsString())) != 0) { return cmp; }   if ((cmp = lhs.getLaterOpcodesAsString(NUM_CONTEXT_OPCODES).compareTo( rhs.getLaterOpcodesAsString(NUM_CONTEXT_OPCODES))) != 0) { return cmp; }  return 0;
	public int compareSourceLines(BugCollection lhsCollection, BugCollection rhsCollection, SourceLineAnnotation lhs, SourceLineAnnotation rhs) {		if (lhs == null || rhs == null) {			return compareNullElements(lhs, rhs);		}				// Classes must match fuzzily.		int cmp = compareClassesByName(lhsCollection, rhsCollection, lhs.getClassName(), rhs.getClassName());		if (cmp != 0)			return cmp;				// If both annotations refer to entire methods, as opposed to		// a specific instruction or range of instructions, consider them		// equal.  This handles the case where a warning may refer to		// another method (i.e., it was called).		// Even if the referred-to method changes between versions, we want		// the warning to be considered equivalent in both versions.		if (!lhs.hasSpecificInstructions() && !rhs.hasSpecificInstructions())			return 0;				// See if the opcode contexts match.		if (   lhs.getEarlierOpcodesAsString(NUM_CONTEXT_OPCODES).equals(rhs.getEarlierOpcodesAsString(NUM_CONTEXT_OPCODES))			&& lhs.getSelectedOpcodesAsString().equals(rhs.getSelectedOpcodesAsString())			&& lhs.getLaterOpcodesAsString(NUM_CONTEXT_OPCODES).equals(rhs.getLaterOpcodesAsString(NUM_CONTEXT_OPCODES)))				return 0;				// Give up and use exact matching algorithm to order the annotations		return lhs.compareTo(rhs);	}