private List<InternalPath> getFiles(String prefix, String suffix) {
		List<InternalPath> list = new ArrayList<>();
		if (isJar()) {
			// Read self as jar
			try (ZipFile file = new ZipFile(getFile())) {
				Enumeration<? extends ZipEntry> entries = file.entries();
				while (entries.hasMoreElements()) {
					ZipEntry entry = entries.nextElement();
					// skip directories
					if (entry.isDirectory()) continue;
					String name = entry.getName();
					if (prefix != null && !name.startsWith(prefix))
						continue;
					if (suffix != null && !name.endsWith(suffix))
						continue;
					list.add(InternalPath.internal(name));
				}
			} catch (Exception ex) {
				logger.error("Failed internal file (archive) lookup: {}", getFile(), ex);
			}
		} else {
			try {
				// You may be asking yourself "wtf is this?"
				// Well, if this is run via gradle the current path is: 'recaf-ui/build/classes/java/main'
				//  - Needs to become: 'recaf-ui/build/resources/main'
				//  - So cd '../../resources/main'
				// But if you want to use IntelliJ's optimized run (waaaaay faster startup than Gradle) this changes.
				// However, for both you can use the system classloader's internal state to check the loaded directories.
				// Using this we scan for '/resources/' since this is a common path element in each case.
				// Plus, this supports finding files from all modules, not just the 'recaf-ui' module.
				List<URL> resourceDirUrls = ClassLoaderInternals.getUcpPathList(ClassLoaderInternals.getUcp()).stream()
						.filter(url -> url.toString().contains("/resources/"))
						.toList();
				for (URL url : resourceDirUrls) {
					Path dir = Paths.get(url.toURI());
					Files.walk(dir).forEach(p -> {
						File file = dir.relativize(p).toFile();
						String path = file.getPath().replace('\\', '/');
						if (prefix != null && !path.startsWith(prefix))
							return;
						if (suffix != null && !path.endsWith(suffix))
							return;
						list.add(InternalPath.internal(path));
					});
				}
			} catch (IOException ex) {
				logger.error("Failed internal file (directory) lookup: {}", getFile(), ex);
			} catch (ReflectiveOperationException ex) {
				logger.error("Failed to lookup resources path from UCP", ex);
			} catch (URISyntaxException ex) {
				throw new IllegalStateException("Malformed URI path from UCP", ex);
			}
		}
		return list;
	}
@param prefix
		File prefix to match.
@param suffix
		File suffix to match <i>(such as a file extension)</i>.

@return List of matching files.
recaf-core/src/main/java/software/coley/recaf/util/SelfReferenceUtil.java