in src/com/intellij/idea/plugin/hybris/project/descriptors/DefaultHybrisProjectDescriptor.java [386:461]
protected void scanDirectoryForHybrisModules(
@NotNull final File rootDirectory,
@Nullable final TaskProgressProcessor<File> progressListenerProcessor,
@Nullable final TaskProgressProcessor<List<File>> errorsProcessor
) throws InterruptedException, IOException {
this.foundModules.clear();
final var settings = ApplicationSettingsComponent.getInstance().getState();
final Map<DIRECTORY_TYPE, Set<File>> moduleRootMap = newModuleRootMap();
final var excludedFromScanning = getExcludedFromScanningDirectories();
LOG.info("Scanning for modules");
findModuleRoots(moduleRootMap, excludedFromScanning, false, rootDirectory, progressListenerProcessor);
if (externalExtensionsDirectory != null && !FileUtils.isFileUnder(externalExtensionsDirectory, rootDirectory)) {
LOG.info("Scanning for external modules");
findModuleRoots(moduleRootMap, excludedFromScanning, false, externalExtensionsDirectory, progressListenerProcessor);
}
if (hybrisDistributionDirectory != null && !FileUtils.isFileUnder(hybrisDistributionDirectory, rootDirectory)) {
LOG.info("Scanning for hybris modules out of the project");
findModuleRoots(moduleRootMap, excludedFromScanning, false, hybrisDistributionDirectory, progressListenerProcessor);
}
final var moduleRootDirectories = processDirectoriesByTypePriority(
moduleRootMap,
excludedFromScanning,
isScanThroughExternalModule(),
progressListenerProcessor
);
final var moduleDescriptors = new ArrayList<ModuleDescriptor>();
final var pathsFailedToImport = new ArrayList<File>();
addRootModule(rootDirectory, moduleDescriptors, pathsFailedToImport, settings.getGroupModules());
for (final var moduleRootDirectory : moduleRootDirectories) {
try {
final var moduleDescriptor = ModuleDescriptorFactory.INSTANCE.createDescriptor(moduleRootDirectory, this);
moduleDescriptors.add(moduleDescriptor);
if (moduleDescriptor instanceof final YModuleDescriptor yModuleDescriptor) {
moduleDescriptors.addAll(yModuleDescriptor.getSubModules());
}
} catch (HybrisConfigurationException e) {
LOG.error("Can not import a module using path: " + pathsFailedToImport, e);
pathsFailedToImport.add(moduleRootDirectory);
}
}
if (moduleDescriptors.stream().noneMatch(PlatformModuleDescriptor.class::isInstance)) {
ApplicationManager.getApplication().invokeLater(() -> Messages.showErrorDialog(
message("hybris.project.import.scan.platform.not.found"),
message("hybris.project.error")
));
throw new InterruptedException("Unable to find Platform module.");
}
if (null != errorsProcessor) {
if (errorsProcessor.shouldContinue(pathsFailedToImport)) {
throw new InterruptedException("Modules scanning has been interrupted.");
}
}
Collections.sort(moduleDescriptors);
buildDependencies(moduleDescriptors);
final var addons = processAddons(moduleDescriptors);
removeNotInstalledAddons(moduleDescriptors, addons);
removeHmcSubModules(moduleDescriptors);
foundModules.addAll(moduleDescriptors);
}