protected void scanDirectoryForHybrisModules()

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);
    }