[maven] IDEA-283167 Implement Maven dependency analyzer

MavenDependencyAnalyzerAction

GitOrigin-RevId: 4757095b1c086a7eeda5a7350f27197180edd6d9
This commit is contained in:
grigoriy.myasoedov
2022-01-12 15:37:03 +00:00
committed by intellij-monorepo-bot
parent 7cfbe0a000
commit 3cbf603509
3 changed files with 45 additions and 12 deletions
@@ -19,7 +19,7 @@ class MavenDependencyAnalyzerContributor(private val project: Project) : Depende
override fun getExternalProjects(): List<DependencyAnalyzerContributor.ExternalProject> {
return MavenProjectsManager.getInstance(project)
.projects
.map { DependencyAnalyzerContributor.ExternalProject(it.directory, it.displayName) }
.map { DependencyAnalyzerContributor.ExternalProject(it.path, it.displayName) }
}
override fun getDependencyScopes(externalProjectPath: String): List<DependencyAnalyzerContributor.Scope> {
@@ -33,7 +33,7 @@ class MavenDependencyAnalyzerContributor(private val project: Project) : Depende
override fun getDependencies(externalProjectPath: String): List<DependencyAnalyzerContributor.Dependency> {
return LocalFileSystem.getInstance().findFileByPath(externalProjectPath)
?.let { MavenProjectsManager.getInstance(project).findContainingProject(it) }
?.let { MavenProjectsManager.getInstance(project).findProject(it) }
?.let { createDependencyList(it) }
?: emptyList()
}
@@ -85,7 +85,8 @@ class MavenDependencyAnalyzerContributor(private val project: Project) : Depende
return status;
}
@Suppress("HardCodedStringLiteral")
private fun scope(id: String) =
DependencyAnalyzerContributor.Scope(id, StringUtil.toLowerCase(id), StringUtil.toTitleCase(id))
companion object {
@Suppress("HardCodedStringLiteral")
fun scope(id: String) = DependencyAnalyzerContributor.Scope(id, StringUtil.toLowerCase(id), StringUtil.toTitleCase(id))
}
}
@@ -2,15 +2,49 @@
package org.jetbrains.idea.maven.project.actions
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.PlatformCoreDataKeys
import com.intellij.openapi.externalSystem.dependency.analyzer.AbstractDependencyAnalyzerAction
import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyzerContributor
import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.ui.treeStructure.SimpleTree
import org.jetbrains.idea.maven.navigator.MavenProjectsStructure
import org.jetbrains.idea.maven.project.MavenDependencyAnalyzerContributor
import org.jetbrains.idea.maven.project.MavenProjectsManager
import org.jetbrains.idea.maven.utils.MavenUtil
class MavenDependencyAnalyzerAction : AbstractDependencyAnalyzerAction() {
override fun getSystemId(e: AnActionEvent): ProjectSystemId = MavenUtil.SYSTEM_ID
override fun getExternalProjectPath(e: AnActionEvent): String? = null
override fun getExternalProjectPath(e: AnActionEvent): String? {
val data = e.getData(PlatformCoreDataKeys.CONTEXT_COMPONENT)
if (data is SimpleTree && data.selectedNode is MavenProjectsStructure.ProjectNode) {
return (data.selectedNode as MavenProjectsStructure.ProjectNode).mavenProject.path
}
if (data is SimpleTree && data.selectedNode is MavenProjectsStructure.MavenSimpleNode) {
val selectedNode = data.selectedNode as MavenProjectsStructure.MavenSimpleNode
val projectNode = selectedNode.findParent(MavenProjectsStructure.ProjectNode::class.java)
if (projectNode != null) {
return projectNode.mavenProject.path
}
}
return e.project?.let { MavenProjectsManager.getInstance(it).projectsFiles.firstOrNull()?.path }
}
override fun getDependency(e: AnActionEvent): DependencyAnalyzerContributor.Dependency? = null
override fun getDependency(e: AnActionEvent): DependencyAnalyzerContributor.Dependency? {
val data = e.getData(PlatformCoreDataKeys.CONTEXT_COMPONENT)
if (data is SimpleTree && data.selectedNode is MavenProjectsStructure.DependencyNode) {
val selectedNode = data.selectedNode as MavenProjectsStructure.DependencyNode
return DependencyAnalyzerContributor.Dependency(
DependencyAnalyzerContributor.Dependency.Data.Artifact(
selectedNode.artifact.groupId,
selectedNode.artifact.artifactId,
selectedNode.artifact.version),
MavenDependencyAnalyzerContributor.scope(selectedNode.artifact.scope),
null,
listOf()
)
}
return null
}
}
@@ -16,7 +16,7 @@ import org.jetbrains.idea.maven.utils.MavenUtil
class MavenDependencyAnalyzerGoToAction : AnAction() {
override fun actionPerformed(e: AnActionEvent) {
val dependency = e.getData(DependencyAnalyzerView.DEPENDENCY) ?: return
val project = e.getData(DependencyAnalyzerView.PROJECT) ?: return
val project = e.project ?: return
val parent = dependency.parent ?: return
val artifactParent = parent.data as Dependency.Data.Artifact
val artifact = dependency.data as Dependency.Data.Artifact
@@ -31,14 +31,12 @@ class MavenDependencyAnalyzerGoToAction : AnAction() {
override fun update(e: AnActionEvent) {
val systemId = e.getData(DependencyAnalyzerView.EXTERNAL_SYSTEM_ID)
val dependency = e.getData(DependencyAnalyzerView.DEPENDENCY)
val project = e.getData(DependencyAnalyzerView.PROJECT)
e.presentation.isEnabledAndVisible =
systemId == MavenUtil.SYSTEM_ID &&
project != null &&
e.project != null &&
dependency?.data is Dependency.Data.Artifact &&
dependency.parent?.data is Dependency.Data.Artifact &&
getArtifactFile(project, dependency.parent?.data as Dependency.Data.Artifact) != null
getArtifactFile(e.project!!, dependency.parent?.data as Dependency.Data.Artifact) != null
}
private fun getArtifactFile(project: Project, artifactParent: Dependency.Data.Artifact): VirtualFile? {