1
0
mirror of https://github.com/chylex/Rider-VCS-Group-By-Project.git synced 2025-09-15 23:32:12 +02:00

Compare commits

..

8 Commits

8 changed files with 76 additions and 22 deletions

8
.gitignore vendored
View File

@@ -1,9 +1,5 @@
/.idea/dictionaries
/.idea/inspectionProfiles
/.idea/jarRepositories.xml
/.idea/misc.xml
/.idea/*.iml
/.idea/.name
/.idea/*
!/.idea/runConfigurations
/.gradle/
/build/

2
.idea/compiler.xml generated
View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
<bytecodeTargetLevel target="17" />
</component>
</project>

3
.idea/gradle.xml generated
View File

@@ -4,9 +4,6 @@
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="delegatedBuild" value="true" />
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>

View File

@@ -1,26 +1,31 @@
@file:Suppress("ConvertLambdaToReference")
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.6.10"
id("org.jetbrains.intellij") version "1.6.0"
kotlin("jvm") version "1.8.0"
id("org.jetbrains.intellij") version "1.15.0"
}
group = "com.chylex.intellij.rider.vcsgroupbyproject"
version = "1.0.0"
version = "1.0.3"
repositories {
mavenCentral()
}
kotlin {
jvmToolchain(17)
}
intellij {
type.set("RD")
version.set("2022.1")
version.set("2023.2-SNAPSHOT")
updateSinceUntilBuild.set(false)
}
tasks.patchPluginXml {
sinceBuild.set("211")
untilBuild.set("222") // 222 requires a rebuild
sinceBuild.set("232")
}
tasks.buildSearchableOptions {
@@ -28,8 +33,7 @@ tasks.buildSearchableOptions {
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "11"
kotlinOptions.freeCompilerArgs = listOf(
"-Xjvm-default=enable"
"-Xjvm-default=all"
)
}

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -8,6 +8,7 @@ import com.intellij.openapi.vcs.changes.ui.ChangesBrowserNodeRenderer
import com.jetbrains.rider.model.RdCustomLocation
import com.jetbrains.rider.model.RdProjectModelItemDescriptor
import java.io.File
import java.io.Serial
class ChangesBrowserProjectNode(private val descriptor: RdProjectModelItemDescriptor) : ChangesBrowserNode<RdProjectModelItemDescriptor>(descriptor) {
private val type = getType(descriptor)
@@ -30,6 +31,7 @@ class ChangesBrowserProjectNode(private val descriptor: RdProjectModelItemDescri
}
companion object {
@Serial
private const val serialVersionUID = 2641007635909904963L
private fun getType(descriptor: RdProjectModelItemDescriptor): FileType? {

View File

@@ -8,14 +8,20 @@ import com.intellij.openapi.vcs.changes.ui.ChangesBrowserNode
import com.intellij.openapi.vcs.changes.ui.ChangesGroupingPolicyFactory
import com.intellij.openapi.vcs.changes.ui.StaticFilePath
import com.intellij.openapi.vcs.changes.ui.TreeModelBuilder
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.platform.backend.workspace.WorkspaceModel
import com.intellij.vcsUtil.VcsUtil
import com.jetbrains.rider.model.RdCustomLocation
import com.jetbrains.rider.model.RdProjectDescriptor
import com.jetbrains.rider.model.RdProjectModelItemDescriptor
import com.jetbrains.rider.model.RdUnloadProjectDescriptor
import com.jetbrains.rider.projectView.workspace.ProjectModelEntity
import com.jetbrains.rider.projectView.workspace.containingEntity
import com.jetbrains.rider.projectView.workspace.containingProjectEntity
import com.jetbrains.rider.projectView.workspace.getProjectModelEntities
import com.jetbrains.rider.projectView.workspace.isProject
import com.jetbrains.rider.projectView.workspace.isProjectFile
import com.jetbrains.rider.projectView.workspace.isProjectFolder
import com.jetbrains.rider.projectView.workspace.isUnloadedProject
import java.io.File
import javax.swing.tree.DefaultTreeModel
@@ -28,7 +34,7 @@ class ProjectChangesGroupingPolicy(private val project: Project, private val mod
return nextPolicyParent
}
val descriptor = file.containingEntity(project)?.let(ProjectModelEntity::containingProjectEntity)?.descriptor
val descriptor = getSingleProjectEntity(file, project)?.descriptor
if (descriptor !is RdProjectDescriptor && descriptor !is RdUnloadProjectDescriptor) {
return nextPolicyParent
}
@@ -58,10 +64,44 @@ class ProjectChangesGroupingPolicy(private val project: Project, private val mod
}
private companion object {
private val NODE_CACHE = NotNullLazyKey.create<MutableMap<RdProjectModelItemDescriptor?, ChangesBrowserNode<*>>, ChangesBrowserNode<*>>("ChangesTree.ProjectCache") {
private val NODE_CACHE = NotNullLazyKey.createLazyKey<MutableMap<RdProjectModelItemDescriptor?, ChangesBrowserNode<*>>, ChangesBrowserNode<*>>("ChangesTree.ProjectCache") {
mutableMapOf()
}
private fun getSingleProjectEntity(file: VirtualFile, project: Project): ProjectModelEntity? {
val workspaceModel = WorkspaceModel.getInstance(project)
val entities = walkFileParentsUntilResultIsNotEmpty(file) { workspaceModel.getProjectModelEntities(it, project) }
if (entities == null) {
return null
}
return entities
.filter(::isProjectOrProjectFile)
.map(ProjectModelEntity::containingProjectEntity)
.toSet()
.singleOrNull()
}
private inline fun <T> walkFileParentsUntilResultIsNotEmpty(leafFile: VirtualFile, getValue: (VirtualFile) -> List<T>?): List<T>? {
var file: VirtualFile? = leafFile
while (file != null) {
val value = getValue(file)
if (value.isNullOrEmpty()) {
file = file.parent
}
else {
return value
}
}
return null
}
private fun isProjectOrProjectFile(entity: ProjectModelEntity): Boolean {
return entity.isProjectFile() || entity.isProjectFolder() || entity.isProject() || entity.isUnloadedProject()
}
private fun getFolder(descriptor: RdProjectModelItemDescriptor): FilePath? {
val location = descriptor.location
if (location !is RdCustomLocation) {

View File

@@ -11,6 +11,21 @@
Click the 'Group By' icon in the panel's toolbar and select 'Project' to group files by project, or both 'Project' and 'Directory' to first group by project and then by directory.
]]></description>
<change-notes><![CDATA[
<b>Version 1.0.3</b>
<ul>
<li>Updated for Rider 2023.2 EAP.</li>
</ul>
<b>Version 1.0.2</b>
<ul>
<li>Updated for Rider 2022.2.</li>
</ul>
<b>Version 1.0.1</b>
<ul>
<li>Fixed grouping files belonging to multiple projects under a random project.</li>
</ul>
]]></change-notes>
<depends>com.intellij.modules.rider</depends>
<extensions defaultExtensionNs="com.intellij">