@Override
		public boolean equals(Object obj) {
			if (this == obj) {
				return true;
			}
			if (obj == null) {
				return false;
			}
			if (getClass() != obj.getClass()) {
				return false;
			}

			ProgramID other = (ProgramID) obj;
			if (!getOuterType().equals(other.getOuterType())) {
				return false;
			}

			if (compilerSpecID == null) {
				if (other.compilerSpecID != null) {
					return false;
				}
			}
			else if (!compilerSpecID.equals(other.compilerSpecID)) {
				return false;
			}
			if (languageID == null) {
				if (other.languageID != null) {
					return false;
				}
			}
			else if (!languageID.equals(other.languageID)) {
				return false;
			}
			return true;
		}
Verifies that all programs to be analyzed have similar architectures (if
not, they can't be analyzed in a single batch, as their analyzer options
do not match). 
<p>
If any architectures do not match, the user will be notified via
a popup dialog.

@return the list of programs that can be analyzed, or null if the operation
was cancelled by the user
@throws CancelledException if the user cancelled the operation
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/analysis/AnalyzeAllOpenProgramsTask.java