refactor: move ModuleGrouper's implementations to '.impl' module

This commit is contained in:
nik
2018-02-07 19:41:51 +01:00
parent 57e8c38989
commit a5d7483039
5 changed files with 79 additions and 53 deletions
@@ -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
}