Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 24 additions & 12 deletions .github/workflows/ScalaCI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,48 +13,60 @@ jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: 'sbt'
cache: sbt
- uses: sbt/setup-sbt@v1
- uses: coursier/cache-action@v6
- name: Build
run: sbt compile

lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: 'sbt'
cache: sbt
- uses: sbt/setup-sbt@v1
- uses: coursier/cache-action@v6
- name: Check Style
run: sbt check

test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup JDK
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: 'sbt'
cache: sbt
- uses: sbt/setup-sbt@v1
- uses: coursier/cache-action@v6
- name: Test
run: sbt test

verification:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: 'sbt'
cache: sbt
- uses: sbt/setup-sbt@v1
- uses: coursier/cache-action@v6
- name: Check Binary Compatibility
run: sbt runPluginVerifier

Expand Down
4 changes: 2 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ lazy val ktVersion = "1.9.10"

// https://youtrack.jetbrains.com/articles/IDEA-A-2100661679/IntelliJ-IDEA-2023.3-Latest-Builds
// NOTE: Latest-Builds 233
lazy val intellijVersion = "242.21829.142"
lazy val pluginVersion = s"0.5.0-$intellijVersion"
lazy val intellijVersion = "243.24978.46"
lazy val pluginVersion = s"0.6.0-$intellijVersion"

ThisBuild / version := pluginVersion

Expand Down
14 changes: 0 additions & 14 deletions src/main/kotlin/bitlap/sbt/analyzer/jbexternal/DataProvider.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ import bitlap.sbt.analyzer.jbexternal.util.getDisplayText
import com.intellij.icons.AllIcons
import com.intellij.openapi.Disposable
import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.actionSystem.DataSink
import com.intellij.openapi.actionSystem.PlatformCoreDataKeys
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.application.runInEdt
import com.intellij.openapi.module.Module
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectNotificationAware.Companion.isNotificationVisibleProperty
import com.intellij.openapi.externalSystem.autoimport.ProjectRefreshAction
import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyzerDependency
import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyzerExtension
import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyzerProject
Expand Down Expand Up @@ -53,7 +53,7 @@ import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyze
*/
class DependencyAnalyzerViewImpl(
private val project: Project, private val systemId: ProjectSystemId, private val parentDisposable: Disposable
) : DependencyAnalyzerView , DataProvider {
) : DependencyAnalyzerView {

private val iconsProvider = ExternalSystemIconProvider.getExtension(systemId)
private val contributor =
Expand Down Expand Up @@ -142,22 +142,19 @@ class DependencyAnalyzerViewImpl(
return externalProjects.find(predicate)
}

override fun getAnalyzerData(dataId: String): Any? {
return when (dataId) {
DependencyAnalyzerView.VIEW.name -> this
CommonDataKeys.PROJECT.name -> project
ExternalSystemDataKeys.EXTERNAL_SYSTEM_ID.name -> systemId
PlatformCoreDataKeys.MODULE.name -> externalProject?.module
else -> null
}
}

private fun updateViewModel() {
executeLoadingTaskOnEdt {
updateExternalProjectsModel()
}
}

override fun uiDataSnapshot(sink: DataSink) {
sink[DependencyAnalyzerView.VIEW] = this
sink[CommonDataKeys.PROJECT] = project
sink[ExternalSystemDataKeys.EXTERNAL_SYSTEM_ID] = systemId
sink[PlatformCoreDataKeys.MODULE] = externalProject?.module
}

private fun Iterable<Dependency>.filterDependencies(): List<Dependency> {
val dependencyDataFilter = dependencyDataFilter
val dependencyScopeFilter = dependencyScopeFilter.filter { it.isSelected }.map { it.scope }
Expand Down Expand Up @@ -347,19 +344,27 @@ class DependencyAnalyzerViewImpl(
}.asActionButton(ACTION_PLACE).bindEnabled(!dependencyLoadingProperty)
val reloadNotificationProperty = isNotificationVisibleProperty(project, systemId)
val projectReloadSeparator = separator().bindVisible(reloadNotificationProperty)
val projectReloadAction = action { ProjectRefreshAction.Manager.refreshProject(project) }.apply {
val projectReloadAction = action { ProjectUtil.refreshProject(project) }.apply {
templatePresentation.icon = AllIcons.Actions.BuildLoadChanges
}.asActionButton(ACTION_PLACE).bindVisible(reloadNotificationProperty)

val dependencyTitle = label(ExternalSystemBundle.message("external.system.dependency.analyzer.resolved.title"))
val dependencyList = DependencyList(
dependencyListModel, showDependencyGroupIdProperty, showDependencySizeProperty, this
).bindEmptyText(dependencyEmptyTextProperty).bindDependency(dependencyProperty)
.bindEnabled(!dependencyLoadingProperty)
val dependencyTree = DependencyTree(
dependencyTreeModel, showDependencyGroupIdProperty, showDependencySizeProperty, this
).bindEmptyText(dependencyEmptyTextProperty).bindDependency(dependencyProperty)
.bindEnabled(!dependencyLoadingProperty)
val dependencyList =
object : DependencyList(dependencyListModel, showDependencyGroupIdProperty, showDependencySizeProperty) {
override fun uiDataSnapshot(sink: DataSink) {
super.uiDataSnapshot(sink)
DataSink.uiDataSnapshot(sink, this@DependencyAnalyzerViewImpl)
}
}.bindEmptyText(dependencyEmptyTextProperty).bindDependency(dependencyProperty)
.bindEnabled(!dependencyLoadingProperty)
val dependencyTree =
object : DependencyTree(dependencyTreeModel, showDependencyGroupIdProperty, showDependencySizeProperty) {
override fun uiDataSnapshot(sink: DataSink) {
super.uiDataSnapshot(sink)
DataSink.uiDataSnapshot(sink, this@DependencyAnalyzerViewImpl)
}
}.bindEmptyText(dependencyEmptyTextProperty).bindDependency(dependencyProperty)
.bindEnabled(!dependencyLoadingProperty)
val dependencyPanel = cardPanel<Boolean> {
ScrollPaneFactory.createScrollPane(if (it) dependencyTree else dependencyList, true)
}.bind(showDependencyTreeProperty)
Expand All @@ -378,9 +383,13 @@ class DependencyAnalyzerViewImpl(
.bindEnabled(showDependencyTreeProperty and !dependencyLoadingProperty)

val usagesTitle = label(usagesTitleProperty)
val usagesTree = UsagesTree(
usagesTreeModel, showDependencyGroupIdProperty, showDependencySizeProperty, this
).apply { emptyText.text = "" }.bindEnabled(!dependencyLoadingProperty)
val usagesTree =
object : UsagesTree(usagesTreeModel, showDependencyGroupIdProperty, showDependencySizeProperty) {
override fun uiDataSnapshot(sink: DataSink) {
super.uiDataSnapshot(sink)
DataSink.uiDataSnapshot(sink, this@DependencyAnalyzerViewImpl)
}
}.apply { emptyText.text = "" }.bindEnabled(!dependencyLoadingProperty)
val expandUsagesTreeButton =
expandTreeAction(usagesTree).asActionButton(ACTION_PLACE).bindEnabled(!dependencyLoadingProperty)
val collapseUsagesTreeButton =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ import javax.swing.tree.DefaultMutableTreeNode
import javax.swing.tree.TreeModel

import bitlap.sbt.analyzer.jbexternal.SbtDAArtifact
import bitlap.sbt.analyzer.jbexternal.DataProvider

import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.DataSink
import com.intellij.openapi.actionSystem.UiDataProvider
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.externalSystem.dependency.analyzer.DependencyAnalyzerView
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle
Expand Down Expand Up @@ -86,8 +87,8 @@ private fun SimpleColoredComponent.customizeCellRenderer(
}

internal abstract class AbstractDependencyList(
model: ListModel<DependencyGroup>, private val dataProvider: DataProvider
) : JBList<DependencyGroup>(model), DataProvider {
model: ListModel<DependencyGroup>
) : JBList<DependencyGroup>(model), UiDataProvider {

private val dependencyProperty = AtomicProperty<Dependency?>(null)
private val dependencyGroupProperty = AtomicProperty<DependencyGroup?>(null)
Expand All @@ -96,12 +97,9 @@ internal abstract class AbstractDependencyList(
dependencyProperty.bind(property)
}

override fun getAnalyzerData(dataId: String): Any? {
return when (dataId) {
DependencyAnalyzerView.DEPENDENCY.name -> dependencyProperty.get()
DependencyAnalyzerView.DEPENDENCIES.name -> dependencyGroupProperty.get()
else -> dataProvider.getAnalyzerData(dataId)
}
override fun uiDataSnapshot(sink: DataSink) {
sink[DependencyAnalyzerView.DEPENDENCY] = dependencyProperty.get()
sink[DependencyAnalyzerView.DEPENDENCIES] = dependencyGroupProperty.get()?.variances
}

init {
Expand All @@ -113,8 +111,8 @@ internal abstract class AbstractDependencyList(
}

internal abstract class AbstractDependencyTree(
model: TreeModel, private val dataProvider: DataProvider
) : SimpleTree(model), DataProvider {
model: TreeModel
) : SimpleTree(model), UiDataProvider {

private val dependencyProperty = AtomicProperty<Dependency?>(null)
private val dependencyGroupProperty = AtomicProperty<DependencyGroup?>(null)
Expand All @@ -123,12 +121,9 @@ internal abstract class AbstractDependencyTree(
dependencyProperty.bind(property)
}

override fun getAnalyzerData(dataId: String): Any? {
return when (dataId) {
DependencyAnalyzerView.DEPENDENCY.name -> dependencyProperty.get()
DependencyAnalyzerView.DEPENDENCIES.name -> dependencyGroupProperty.get()
else -> dataProvider.getAnalyzerData(dataId)
}
override fun uiDataSnapshot(sink: DataSink) {
sink[DependencyAnalyzerView.DEPENDENCY] = dependencyProperty.get()
sink[DependencyAnalyzerView.DEPENDENCIES] = dependencyGroupProperty.get()?.variances
}

init {
Expand All @@ -140,12 +135,11 @@ internal abstract class AbstractDependencyTree(
}
}

internal class DependencyList(
internal open class DependencyList(
model: ListModel<DependencyGroup>,
showGroupIdProperty: ObservableProperty<Boolean>,
showSizeProperty: ObservableProperty<Boolean>,
dataProvider: DataProvider
) : AbstractDependencyList(model, dataProvider) {
) : AbstractDependencyList(model) {
init {
ListUiUtil.Selection.installSelectionOnRightClick(this)
PopupHandler.installPopupMenu(
Expand All @@ -155,12 +149,11 @@ internal class DependencyList(
}
}

internal class DependencyTree(
internal open class DependencyTree(
model: TreeModel,
showGroupIdProperty: ObservableProperty<Boolean>,
showSizeProperty: ObservableProperty<Boolean>,
dataProvider: DataProvider
) : AbstractDependencyTree(model, dataProvider) {
) : AbstractDependencyTree(model) {
init {
PopupHandler.installPopupMenu(
this, "ExternalSystem.DependencyAnalyzer.DependencyTreeGroup", DependencyAnalyzerView.ACTION_PLACE
Expand All @@ -169,12 +162,11 @@ internal class DependencyTree(
}
}

internal class UsagesTree(
internal open class UsagesTree(
model: TreeModel,
showGroupIdProperty: ObservableProperty<Boolean>,
showSizeProperty: ObservableProperty<Boolean>,
dataProvider: DataProvider
) : AbstractDependencyTree(model, dataProvider) {
) : AbstractDependencyTree(model) {
init {
PopupHandler.installPopupMenu(
this, "ExternalSystem.DependencyAnalyzer.UsagesTreeGroup", DependencyAnalyzerView.ACTION_PLACE
Expand Down
18 changes: 18 additions & 0 deletions src/main/kotlin/bitlap/sbt/analyzer/jbexternal/util/ProjectUtil.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package bitlap.sbt.analyzer.jbexternal.util

import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectNotificationAware
import com.intellij.openapi.externalSystem.autoimport.ExternalSystemProjectTracker
import com.intellij.openapi.externalSystem.service.project.trusted.ExternalSystemTrustedProjectDialog
import com.intellij.openapi.project.Project

@Suppress("DEPRECATION")
object ProjectUtil {
fun refreshProject(project: Project) {
val projectNotificationAware = ExternalSystemProjectNotificationAware.getInstance(project)
val systemIds = projectNotificationAware.getSystemIds()
if (ExternalSystemTrustedProjectDialog.confirmLoadingUntrustedProject(project, systemIds)) {
val projectTracker = ExternalSystemProjectTracker.getInstance(project)
projectTracker.scheduleProjectRefresh()
}
}
}
10 changes: 8 additions & 2 deletions src/main/resources/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
<idea-plugin>
<id>org.bitlap.sbtDependencyAnalyzer</id>
<name>Sbt Dependency Analyzer</name>
<version>0.5.0-242.21829.142</version>
<version>0.6.0-243.24978.46</version>
<vendor url="https://github.com/bitlap/intellij-sbt-dependency-analyzer" email="dreamylost@outlook.com">Bitlap
</vendor>
<!-- please see https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html for description -->
<!-- old version support, see branch idea231.x -->
<idea-version since-build="242.0"/>
<idea-version since-build="243.0"/>

<depends>com.intellij.modules.platform</depends>
<depends>com.intellij.modules.lang</depends>
Expand Down Expand Up @@ -136,6 +136,12 @@

<![CDATA[

<h1>0.6.0-243.24978.46</h1>
<ul>
<li>Upgrade Dependency.</li>
</ul>
<!-- @@ -->

<h1>0.5.0-242.21829.142</h1>
<ul>
<li>Improve code and API compatibility.</li>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ analyzer.notification.addSdap.text=The "{0}" has been added or updated, \
and it has also been ignored by the ".git/info/exclude" file in the git environment, \
please wait a moment, go to see more.
analyzer.notification.setting.changed.title=Sbt Dependency Analyzer settings have been changed
analyzer.notification.reimport.title=Sbt Dependency Analyzer is refreshing the project
analyzer.notification.updated.failure.title=Failed to load!
analyzer.notification.updated.failure.text=Open in browser↗
analyzer.notification.updated.title={0} plugin updated to v{1}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ analyzer.notification.addSdap.text=已添加或更新文件 “{0}”,\
并且在git环境中也已经被“.git/info/exclude”文件忽略了,\
请稍等片刻,前往查看更多
analyzer.notification.setting.changed.title=Sbt Dependency Analyzer 配置已被更改
analyzer.notification.reimport.title=Sbt Dependency Analyzer 正在刷新项目
analyzer.notification.updated.failure.title=加载失败!
analyzer.notification.updated.failure.text=在浏览器中打开↗
analyzer.notification.updated.title={0} 插件已更新为 v{1}
Expand Down
Loading
Loading