Skip to content

Commit edd441a

Browse files
authored
Merge pull request #26 from SpringKill-team/feature/register
feature: Change SinkFinder windows to Problem window as a tab #5 #12
2 parents 48cff36 + a640bfc commit edd441a

4 files changed

Lines changed: 43 additions & 30 deletions

File tree

src/main/kotlin/org/skgroup/securityinspector/ui/SecurityInspectorToolWindowFactory.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.intellij.openapi.project.Project
44
import com.intellij.openapi.wm.ToolWindow
55
import com.intellij.openapi.wm.ToolWindowFactory
66
import com.intellij.ui.content.ContentFactory
7+
import org.skgroup.securityinspector.ui.component.CallGraphUIComponents
78

89
class SecurityInspectorToolWindowFactory : ToolWindowFactory {
910

@@ -17,5 +18,7 @@ class SecurityInspectorToolWindowFactory : ToolWindowFactory {
1718

1819
// 把 Content 添加到 ToolWindow
1920
toolWindow.contentManager.addContent(content)
21+
22+
CallGraphUIComponents(project).addIssueProblemsTabToProblemsView()
2023
}
2124
}

src/main/kotlin/org/skgroup/securityinspector/ui/component/CallGraphUIComponents.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package org.skgroup.securityinspector.ui.component
22

3+
import com.intellij.analysis.problemsView.toolWindow.ProblemsView
34
import com.intellij.openapi.fileEditor.OpenFileDescriptor
45
import com.intellij.openapi.project.Project
56
import com.intellij.openapi.ui.ComboBox
7+
import com.intellij.openapi.wm.ToolWindowManager
68
import com.intellij.ui.Gray
79
import com.intellij.ui.JBSplitter
810
import com.intellij.ui.components.*
11+
import com.intellij.ui.content.ContentFactory
912
import com.intellij.ui.treeStructure.Tree
1013
import org.skgroup.securityinspector.analysis.ast.nodes.MethodNode
1114
import org.skgroup.securityinspector.enums.AnalysisScope
@@ -297,4 +300,21 @@ class CallGraphUIComponents(val project: Project) {
297300
}
298301
}
299302

303+
fun addIssueProblemsTabToProblemsView() {
304+
305+
val toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ProblemsView.ID) ?: return
306+
val contentManager = toolWindow.contentManager
307+
308+
val issueTab = IssueProblemsTab(project)
309+
val content = ContentFactory.getInstance().createContent(issueTab.getComponent(), "Sink Finder", false)
310+
311+
contentManager.addContent(content)
312+
313+
if (!toolWindow.isVisible) {
314+
toolWindow.show()
315+
}
316+
317+
contentManager.setSelectedContent(content)
318+
}
319+
300320
}

src/main/kotlin/org/skgroup/securityinspector/ui/IssueViewWindow.kt renamed to src/main/kotlin/org/skgroup/securityinspector/ui/component/IssueProblemsTab.kt

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
1-
package org.skgroup.securityinspector.ui
1+
package org.skgroup.securityinspector.ui.component
22

3+
import com.intellij.analysis.problemsView.toolWindow.ProblemsViewTab
34
import com.intellij.openapi.application.ApplicationManager
45
import com.intellij.openapi.fileEditor.OpenFileDescriptor
56
import com.intellij.openapi.progress.ProgressIndicator
67
import com.intellij.openapi.progress.ProgressManager
78
import com.intellij.openapi.progress.Task
89
import com.intellij.openapi.project.Project
910
import com.intellij.openapi.vfs.VirtualFile
10-
import com.intellij.openapi.wm.ToolWindow
11-
import com.intellij.openapi.wm.ToolWindowFactory
1211
import com.intellij.ui.components.JBPanel
1312
import com.intellij.ui.components.JBScrollPane
14-
import com.intellij.ui.content.ContentFactory
1513
import com.intellij.ui.table.JBTable
16-
import org.skgroup.securityinspector.ui.component.FirstColumnRenderer
17-
import org.skgroup.securityinspector.ui.component.HighlightRenderer
1814
import org.skgroup.securityinspector.utils.GraphUtils.collectProjectIssues
1915
import java.awt.BorderLayout
2016
import java.awt.event.MouseAdapter
@@ -23,28 +19,21 @@ import javax.swing.JButton
2319
import javax.swing.table.DefaultTableModel
2420
import javax.swing.table.TableRowSorter
2521

26-
/**
27-
* 类描述:IssueViewWindow 类用于创建SinkFinder。
28-
*
29-
* @author springkill
30-
* @version 1.0
31-
*/
32-
class IssueViewWindow : ToolWindowFactory {
22+
class IssueProblemsTab(project: Project) : ProblemsViewTab {
3323

34-
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
35-
val panel = JBPanel<JBPanel<*>>(BorderLayout())
36-
val tableModel =
37-
DefaultTableModel(arrayOf("File", "Line", "SinkClass", "SinkMethod", "Type", "SubType", "CallMode"), 0)
38-
val refreshButton = JButton("Init Sink")
39-
val table = object : JBTable(tableModel) {
40-
override fun isCellEditable(row: Int, column: Int): Boolean {
41-
return false
42-
}
43-
}
24+
private val panel = JBPanel<JBPanel<*>>(BorderLayout())
4425

45-
val sorter = TableRowSorter(tableModel)
46-
table.rowSorter = sorter
26+
private val tableModel =
27+
DefaultTableModel(arrayOf("File", "Line", "SinkClass", "SinkMethod", "Type", "SubType", "CallMode"), 0)
28+
private val refreshButton = JButton("Init Sink")
29+
private val table = object : JBTable(tableModel) {
30+
override fun isCellEditable(row: Int, column: Int): Boolean = false
31+
}
4732

33+
private val sorter = TableRowSorter(tableModel)
34+
35+
init {
36+
table.rowSorter = sorter
4837
table.apply {
4938
columnModel.getColumn(0).cellRenderer = FirstColumnRenderer()
5039
columnModel.getColumn(4).cellRenderer = HighlightRenderer()
@@ -96,10 +85,13 @@ class IssueViewWindow : ToolWindowFactory {
9685

9786
panel.add(JBScrollPane(table), BorderLayout.CENTER)
9887
panel.add(refreshButton, BorderLayout.SOUTH)
88+
}
89+
90+
fun getComponent() = panel
9991

100-
val contentFactory = ContentFactory.getInstance()
101-
val content = contentFactory.createContent(panel, "", false)
102-
toolWindow.contentManager.addContent(content)
92+
override fun getName(count: Int): String {
93+
return "Sink Finder"
10394
}
10495

96+
override fun getTabId() = "Issue Problems Tab"
10597
}

src/main/resources/META-INF/plugin.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@
4343
anchor="left"
4444
icon="/icons/pluginIcon.svg"
4545
/>
46-
<toolWindow id="Sink Finder" anchor="bottom"
47-
factoryClass="org.skgroup.securityinspector.ui.IssueViewWindow"/>
4846

4947
<!--<localInspection
5048
language="JAVA" groupPath="Security"

0 commit comments

Comments
 (0)