override fun updateStep()

in src/com/intellij/idea/plugin/hybris/project/wizard/SelectHybrisModulesToImportStep.kt [60:118]


    override fun updateStep() {
        context.setCoreStepModuleList()

        super.updateStep()

        selectionMode = ModuleDescriptorImportStatus.MANDATORY

        for (index in 0 until fileChooser.elementCount) {
            val yModuleDescriptor = fileChooser.getElementAt(index)
            if (yModuleDescriptor.isPreselected()) {
                fileChooser.setElementMarked(yModuleDescriptor, true)
                yModuleDescriptor.importStatus = ModuleDescriptorImportStatus.MANDATORY
            }
        }

        selectionMode = ModuleDescriptorImportStatus.UNUSED

        val duplicateModules: MutableSet<String> = HashSet()
        val uniqueModules: MutableSet<String> = HashSet()

        context.list
            ?.forEach {
                if (uniqueModules.contains(it.name)) {
                    duplicateModules.add(it.name)
                } else {
                    uniqueModules.add(it.name)
                }
            }

        // TODO: improve sorting
        fileChooser.sort { o1: ModuleDescriptor, o2: ModuleDescriptor ->
            val o1dup = duplicateModules.contains(o1.name)
            val o2dup = duplicateModules.contains(o2.name)
            if (o1dup xor o2dup) {
                return@sort if (o1dup) -1 else 1
            }
            val o1custom = isCustomDescriptor(o1)
            val o2custom = isCustomDescriptor(o2)
            if (o1custom xor o2custom) {
                return@sort if (o1custom) -1 else 1
            }

            // de-boost mandatory Platform extensions
            val o1ext = isPlatformExtDescriptor(o1)
            val o2ext = isPlatformExtDescriptor(o2)
            if (o1ext xor o2ext) {
                return@sort if (o2ext) -1 else 1
            }
            val o1selected = isMandatoryOrPreselected(o1)
            val o2selected = isMandatoryOrPreselected(o2)
            if (o1selected xor o2selected) {
                return@sort if (o1selected) -1 else 1
            }
            o1.compareTo(o2)
        }
        //scroll to top
        (fileChooser.component as? JBTable)
            ?.changeSelection(0, 0, false, false)
    }