private static Stream<Method> getMethods(Class<?> cls) {
		if (isPublic(cls)) {
			return Arrays.stream(cls.getMethods());
		}
		Class<?> base = cls;
		while (!isPublic(base)) {
			base = base.getSuperclass();
		}
		Stream<Method> head = Arrays.stream(base.getMethods())
				.filter(PropertyUtils::methodFilter);
		Stream<Method> tail = Stream.concat(
			Arrays.stream(base.getInterfaces()),
			Arrays.stream(cls.getInterfaces()))
				.sorted(Comparator.comparing(Class::getSimpleName))
				.distinct()
				.map(Class::getDeclaredMethods)
				.flatMap(Arrays::stream)
				.filter(PropertyUtils::methodFilter);
		return Stream.concat(head, tail)
				.sorted(Comparator.comparing(Method::toGenericString))
				.distinct();
	}
Gets an array of {@link JavaProperty} for the provided class.

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

@param cls the class to get the properties for
@return an array of properties
Ghidra/Features/PyGhidra/src/main/java/ghidra/pyghidra/property/PropertyUtils.java