mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
refactor: move ModuleGrouper's implementations to '.impl' module
This commit is contained in:
@@ -17,9 +17,7 @@ package com.intellij.openapi.module
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* Use this class to determine how modules show by organized in a tree. It supports the both ways of module grouping: the old one where
|
||||
@@ -64,59 +62,10 @@ abstract class ModuleGrouper {
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun instanceFor(project: Project, moduleModel: ModifiableModuleModel? = null): ModuleGrouper {
|
||||
val hasGroups = moduleModel?.hasModuleGroups() ?: ModuleManager.getInstance(project).hasModuleGroups()
|
||||
if (!isQualifiedModuleNamesEnabled(project) || hasGroups) {
|
||||
return ExplicitModuleGrouper(project, moduleModel)
|
||||
}
|
||||
return QualifiedNameGrouper(project, moduleModel)
|
||||
return ModuleManager.getInstance(project).getModuleGrouper(moduleModel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun isQualifiedModuleNamesEnabled(project: Project) = Registry.`is`("project.qualified.module.names") &&
|
||||
!ModuleManager.getInstance(project).hasModuleGroups()
|
||||
|
||||
private abstract class ModuleGrouperBase(protected val project: Project, protected val model: ModifiableModuleModel?) : ModuleGrouper() {
|
||||
override fun getAllModules(): Array<Module> = model?.modules ?: ModuleManager.getInstance(project).modules
|
||||
|
||||
protected fun getModuleName(module: Module) = model?.getNewName(module) ?: module.name
|
||||
|
||||
override fun getShortenedName(module: Module) = getShortenedNameByFullModuleName(getModuleName(module))
|
||||
}
|
||||
|
||||
private class QualifiedNameGrouper(project: Project, model: ModifiableModuleModel?) : ModuleGrouperBase(project, model) {
|
||||
override fun getGroupPath(module: Module): List<String> {
|
||||
return getGroupPathByModuleName(getModuleName(module))
|
||||
}
|
||||
|
||||
override fun getGroupPath(description: ModuleDescription) = getGroupPathByModuleName(description.name)
|
||||
|
||||
override fun getShortenedNameByFullModuleName(name: String) = StringUtil.getShortName(name)
|
||||
|
||||
override fun getGroupPathByModuleName(name: String) = name.split('.').dropLast(1)
|
||||
|
||||
override fun getModuleAsGroupPath(module: Module) = getModuleName(module).split('.')
|
||||
|
||||
override fun getModuleAsGroupPath(description: ModuleDescription) = description.name.split('.')
|
||||
}
|
||||
|
||||
private class ExplicitModuleGrouper(project: Project, model: ModifiableModuleModel?): ModuleGrouperBase(project, model) {
|
||||
override fun getGroupPath(module: Module): List<String> {
|
||||
val path = if (model != null) model.getModuleGroupPath(module) else ModuleManager.getInstance(project).getModuleGroupPath(module)
|
||||
return if (path != null) Arrays.asList(*path) else emptyList()
|
||||
}
|
||||
|
||||
override fun getGroupPath(description: ModuleDescription) = when (description) {
|
||||
is LoadedModuleDescription -> getGroupPath(description.module)
|
||||
is UnloadedModuleDescription -> description.groupPath
|
||||
else -> throw IllegalArgumentException(description.javaClass.name)
|
||||
}
|
||||
|
||||
override fun getShortenedNameByFullModuleName(name: String) = name
|
||||
|
||||
override fun getGroupPathByModuleName(name: String): List<String> = emptyList()
|
||||
|
||||
override fun getModuleAsGroupPath(module: Module) = null
|
||||
|
||||
override fun getModuleAsGroupPath(description: ModuleDescription) = null
|
||||
}
|
||||
|
||||
@@ -188,6 +188,9 @@ public abstract class ModuleManager extends SimpleModificationTracker {
|
||||
@Nullable
|
||||
public abstract UnloadedModuleDescription getUnloadedModuleDescription(@NotNull String moduleName);
|
||||
|
||||
@NotNull
|
||||
public abstract ModuleGrouper getModuleGrouper(@Nullable ModifiableModuleModel model);
|
||||
|
||||
/**
|
||||
* Specify list of modules which will be unloaded from the project.
|
||||
* @see UnloadedModuleDescription
|
||||
|
||||
@@ -15,11 +15,12 @@
|
||||
*/
|
||||
package com.intellij.openapi.module
|
||||
|
||||
import com.intellij.openapi.module.impl.createGrouper
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.util.messages.MessageBus
|
||||
import org.jetbrains.annotations.NotNull
|
||||
|
||||
class EmptyModuleManager(project: Project, messageBus: MessageBus) : ModuleManager() {
|
||||
class EmptyModuleManager(private val project: Project, messageBus: MessageBus) : ModuleManager() {
|
||||
override fun hasModuleGroups() = false
|
||||
|
||||
override fun newModule(filePath: String, moduleTypeId: String) = throw UnsupportedOperationException()
|
||||
@@ -52,6 +53,10 @@ class EmptyModuleManager(project: Project, messageBus: MessageBus) : ModuleManag
|
||||
override fun setUnloadedModules(unloadedModuleNames: MutableList<String>) {
|
||||
}
|
||||
|
||||
override fun getModuleGrouper(model: ModifiableModuleModel?): ModuleGrouper {
|
||||
return createGrouper(project, model)
|
||||
}
|
||||
|
||||
override fun getAllModuleDescriptions() = emptyList<ModuleDescription>()
|
||||
|
||||
override fun getUnloadedModuleDescriptions() = emptyList<UnloadedModuleDescription>()
|
||||
|
||||
@@ -1056,6 +1056,12 @@ public abstract class ModuleManagerImpl extends ModuleManager implements Disposa
|
||||
return myUnloadedModules.get(moduleName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public ModuleGrouper getModuleGrouper(@Nullable ModifiableModuleModel model) {
|
||||
return ModuleGroupersKt.createGrouper(myProject, model);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUnloadedModules(@NotNull List<String> unloadedModuleNames) {
|
||||
if (myUnloadedModules.keySet().equals(new HashSet<>(unloadedModuleNames))) {
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.openapi.module.impl
|
||||
|
||||
import com.intellij.openapi.module.*
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
internal fun createGrouper(project: Project, moduleModel: ModifiableModuleModel? = null): ModuleGrouper {
|
||||
val hasGroups = moduleModel?.hasModuleGroups() ?: ModuleManager.getInstance(project).hasModuleGroups()
|
||||
if (!isQualifiedModuleNamesEnabled(project) || hasGroups) {
|
||||
return ExplicitModuleGrouper(project, moduleModel)
|
||||
}
|
||||
return QualifiedNameGrouper(project, moduleModel)
|
||||
}
|
||||
|
||||
private abstract class ModuleGrouperBase(protected val project: Project, protected val model: ModifiableModuleModel?) : ModuleGrouper() {
|
||||
override fun getAllModules(): Array<Module> = model?.modules ?: ModuleManager.getInstance(project).modules
|
||||
|
||||
protected fun getModuleName(module: Module) = model?.getNewName(module) ?: module.name
|
||||
|
||||
override fun getShortenedName(module: Module) = getShortenedNameByFullModuleName(getModuleName(module))
|
||||
}
|
||||
|
||||
private class QualifiedNameGrouper(project: Project, model: ModifiableModuleModel?) : ModuleGrouperBase(project, model) {
|
||||
override fun getGroupPath(module: Module): List<String> {
|
||||
return getGroupPathByModuleName(getModuleName(module))
|
||||
}
|
||||
|
||||
override fun getGroupPath(description: ModuleDescription) = getGroupPathByModuleName(description.name)
|
||||
|
||||
override fun getShortenedNameByFullModuleName(name: String) = StringUtil.getShortName(name)
|
||||
|
||||
override fun getGroupPathByModuleName(name: String) = name.split('.').dropLast(1)
|
||||
|
||||
override fun getModuleAsGroupPath(module: Module) = getModuleName(module).split('.')
|
||||
|
||||
override fun getModuleAsGroupPath(description: ModuleDescription) = description.name.split('.')
|
||||
}
|
||||
|
||||
private class ExplicitModuleGrouper(project: Project, model: ModifiableModuleModel?): ModuleGrouperBase(project, model) {
|
||||
override fun getGroupPath(module: Module): List<String> {
|
||||
val path = if (model != null) model.getModuleGroupPath(module) else ModuleManager.getInstance(project).getModuleGroupPath(module)
|
||||
return if (path != null) Arrays.asList(*path) else emptyList()
|
||||
}
|
||||
|
||||
override fun getGroupPath(description: ModuleDescription) = when (description) {
|
||||
is LoadedModuleDescription -> getGroupPath(description.module)
|
||||
is UnloadedModuleDescription -> description.groupPath
|
||||
else -> throw IllegalArgumentException(description.javaClass.name)
|
||||
}
|
||||
|
||||
override fun getShortenedNameByFullModuleName(name: String) = name
|
||||
|
||||
override fun getGroupPathByModuleName(name: String): List<String> = emptyList()
|
||||
|
||||
override fun getModuleAsGroupPath(module: Module) = null
|
||||
|
||||
override fun getModuleAsGroupPath(description: ModuleDescription) = null
|
||||
}
|
||||
Reference in New Issue
Block a user