@Override
	public int hashCode() {
		// NOTE: Do NOT consider the properties since contents of the map can point back to this instance
		//       or our containing resource, causing a cycle.
		int result = name.hashCode();
		result = 31 * result + (superName != null ? superName.hashCode() : 0);
		result = 31 * result + interfaces.hashCode();
		result = 31 * result + access;
		result = 31 * result + (signature != null ? signature.hashCode() : 0);
		result = 31 * result + (sourceFileName != null ? sourceFileName.hashCode() : 0);
		result = 31 * result + annotations.hashCode();
		result = 31 * result + typeAnnotations.hashCode();
		result = 31 * result + (outerClassName != null ? outerClassName.hashCode() : 0);
		result = 31 * result + (outerMethodName != null ? outerMethodName.hashCode() : 0);
		result = 31 * result + (outerMethodDescriptor != null ? outerMethodDescriptor.hashCode() : 0);
		result = 31 * result + innerClasses.hashCode();
		result = 31 * result + fields.hashCode();
		result = 31 * result + methods.hashCode();
		return result;
	}
Basic implementation of class info.

@author Matt Coley
@see BasicJvmClassInfo
@see BasicAndroidClassInfo
recaf-core/src/main/java/software/coley/recaf/info/BasicClassInfo.java