@SuppressWarnings("unchecked")
	private static Map<String, ExposedField> doGetProperties(
			Class<? extends PythonFieldExposer> cls)
			throws Throwable {
		ExposedFields fields = cls.getAnnotation(ExposedFields.class);
		String[] names = fields.names();
		Class<?>[] types = fields.types();
		if (names.length != types.length) {
			throw new AssertException("Improperly applied ExposedFields on " + cls.getSimpleName());
		}

		Constructor<? extends ExposedField> c =
			fields.exposer().getConstructor(String.class, Class.class);
		Map.Entry<String, ExposedField>[] properties = new Map.Entry[names.length];
		for (int i = 0; i < names.length; i++) {
			properties[i] = Map.entry(names[i], c.newInstance(names[i], types[i]));
		}
		return Map.ofEntries(properties);
	}
Gets a mapping of all the explicitly exposed fields of a class.

This method is for <b>internal use only</b> and is only public so it can be
called from Python.

@param cls the PythonFieldExposer class
@return a map of the exposed fields
Ghidra/Features/PyGhidra/src/main/java/ghidra/pyghidra/PythonFieldExposer.java