@Override
	protected Map<String, GModule> findGhidraModules() throws IOException {

		//
		// 1) Enforces module dependencies by classpath to better control the test environment.
		// 2) Add any dependent modules into the tests that are not already on the classpath. For
		//    example, this class adds all processor modules, as we do not use classpath
		//    dependencies for processor modules usage.
		//
		Set<String> modulePatterns = getDependentModulePatterns();
		Predicate<Path> additionalPaths = path -> {
			String pathString = path.toString();
			return modulePatterns.stream().anyMatch(pattern -> pathString.contains(pattern));
		};

		Collection<ResourceFile> roots =
			ModuleUtilities.findModuleRootDirectories(applicationRootDirs);
		return ModuleUtilities.findModules(applicationRootDirs, roots,
			new ClasspathFilter(additionalPaths));
	}
Constructs a new Ghidra application layout object with the provided user settings
directory.
<p>
This layout is useful when running Ghidra tests.

@param userSettingsDir The custom user settings directory to use.
@throws FileNotFoundException if there was a problem getting a user directory.
@throws IOException if there was a problem getting the application properties.
Ghidra/Framework/Utility/src/main/java/ghidra/GhidraTestApplicationLayout.java