Skip to content

Commit ba02a0c

Browse files
committed
feature: Update action classes to use localized messages and adjust plugin ID to follow naming conventions
1 parent 8b1c553 commit ba02a0c

5 files changed

Lines changed: 77 additions & 13 deletions

File tree

src/main/kotlin/org/skgroup/codeauditassistant/ui/component/IssueProblemsTab.kt

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,26 @@ import com.intellij.openapi.vfs.VirtualFile
1111
import com.intellij.ui.components.JBPanel
1212
import com.intellij.ui.components.JBScrollPane
1313
import com.intellij.ui.table.JBTable
14+
import com.intellij.ui.treeStructure.Tree
1415
import org.skgroup.codeauditassistant.i18n.CAMessage
1516
import org.skgroup.codeauditassistant.ui.renderer.FirstColumnRenderer
1617
import org.skgroup.codeauditassistant.ui.renderer.HighlightRenderer
18+
import org.skgroup.codeauditassistant.ui.renderer.SinkTreeCellRenderer
1719
import org.skgroup.codeauditassistant.utils.SinkUtil.collectProjectIssues
1820
import java.awt.BorderLayout
21+
import java.awt.Dimension
1922
import java.awt.event.MouseAdapter
2023
import java.awt.event.MouseEvent
24+
import java.util.*
2125
import javax.swing.JButton
26+
import javax.swing.JScrollPane
27+
import javax.swing.event.TreeSelectionEvent
28+
import javax.swing.event.TreeSelectionListener
2229
import javax.swing.table.DefaultTableModel
2330
import javax.swing.table.TableRowSorter
24-
import javax.swing.JTree
2531
import javax.swing.tree.DefaultMutableTreeNode
2632
import javax.swing.tree.DefaultTreeModel
2733
import javax.swing.tree.TreePath
28-
import javax.swing.JScrollPane
29-
import java.util.TreeMap
30-
import javax.swing.event.TreeSelectionEvent
31-
import javax.swing.event.TreeSelectionListener
32-
import java.io.Serializable
3334

3435
class IssueProblemsTab(private val project: Project) : ProblemsViewTab {
3536

@@ -57,7 +58,12 @@ class IssueProblemsTab(private val project: Project) : ProblemsViewTab {
5758

5859
private val rootNode = DefaultMutableTreeNode(CAMessage.message("sink.tree.root"))
5960
private val treeModel = DefaultTreeModel(rootNode)
60-
private val tree = JTree(treeModel)
61+
private val sinkTree = Tree(treeModel).apply {
62+
cellRenderer = SinkTreeCellRenderer()
63+
preferredSize = Dimension(200, preferredSize.height)
64+
isRootVisible = true
65+
showsRootHandles = true
66+
}
6167

6268
private val allIssues = mutableListOf<Array<out Any>>()
6369

@@ -85,9 +91,7 @@ class IssueProblemsTab(private val project: Project) : ProblemsViewTab {
8591
})
8692
}
8793

88-
tree.isRootVisible = false
89-
tree.showsRootHandles = true
90-
tree.addTreeSelectionListener(object : TreeSelectionListener {
94+
sinkTree.addTreeSelectionListener(object : TreeSelectionListener {
9195
override fun valueChanged(e: TreeSelectionEvent) {
9296
val path = e.path
9397
filterTableByTreeSelection(path)
@@ -149,7 +153,7 @@ class IssueProblemsTab(private val project: Project) : ProblemsViewTab {
149153
}
150154

151155
val splitPanel = JBPanel<JBPanel<*>>(BorderLayout())
152-
splitPanel.add(JScrollPane(tree), BorderLayout.WEST)
156+
splitPanel.add(JScrollPane(sinkTree), BorderLayout.WEST)
153157
splitPanel.add(JBScrollPane(table), BorderLayout.CENTER)
154158

155159
panel.add(splitPanel, BorderLayout.CENTER)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.skgroup.codeauditassistant.ui.renderer
2+
3+
/**
4+
* 类描述:SinkTreeCellRenderer 类用于 SinkTree的渲染。
5+
*
6+
* @author springkill
7+
* @version 1.0
8+
* @since 2025/4/7
9+
*/
10+
import com.intellij.icons.AllIcons
11+
import com.intellij.ui.ColoredTreeCellRenderer
12+
import com.intellij.ui.SimpleTextAttributes
13+
import org.skgroup.codeauditassistant.utils.IconUtil
14+
import javax.swing.JTree
15+
import javax.swing.tree.DefaultMutableTreeNode
16+
17+
class SinkTreeCellRenderer : ColoredTreeCellRenderer() {
18+
override fun customizeCellRenderer(
19+
tree: JTree,
20+
value: Any?,
21+
selected: Boolean,
22+
expanded: Boolean,
23+
leaf: Boolean,
24+
row: Int,
25+
hasFocus: Boolean
26+
) {
27+
val node = value as? DefaultMutableTreeNode ?: return
28+
val userObject = node.userObject.toString()
29+
30+
// 根据节点层级设置图标
31+
when {
32+
node.parent == null -> {
33+
icon = IconUtil.sinkIcon
34+
append(userObject, SimpleTextAttributes.REGULAR_BOLD_ATTRIBUTES)
35+
}
36+
37+
node.parent == tree.model.root -> {
38+
icon = AllIcons.Nodes.Folder
39+
append(userObject.substringBefore(" ("))
40+
}
41+
42+
leaf -> {
43+
icon = AllIcons.General.Warning
44+
append(userObject.substringBefore(" ("))
45+
}
46+
}
47+
}
48+
}

src/main/kotlin/org/skgroup/codeauditassistant/utils/IconUtil.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,7 @@ object IconUtil {
2525
val callIcon = loadIcon("/icons/call-white.svg")
2626
val newIcon = loadIcon("/icons/new-white.svg")
2727
val declarationIcon = loadIcon("/icons/declare-white.svg")
28+
29+
val sinkIcon = loadIcon("/icons/vuln.svg")
30+
2831
}

src/main/resources/icons/vuln.svg

Lines changed: 9 additions & 0 deletions
Loading

src/main/resources/messages/CodeAuditAssistant_zh_CN.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ config.error.general=认证失败:{0}
3434
# Tabs
3535
tab.decompiler=反编译器
3636
tab.code.analysis=代码分析
37-
tab.sink.finder=汇点查找器
37+
tab.sink.finder=Sink查找器
3838

3939
# Errors
4040
error.not.authenticated=未认证
@@ -100,4 +100,4 @@ sink.table.column.call.mode=调用方式
100100
sink.button.init=初始化Sink
101101
sink.progress.finding=正在查找sink方法
102102
sink.tab.id=问题标签页
103-
sink.tree.root=问题分类
103+
sink.tree.root=Sink点分类

0 commit comments

Comments
 (0)