Skip to content

Commit 6ee65b8

Browse files
authored
Merge pull request #172 from skirge/feat-filetype
allows to click on Sarif file in project tree
2 parents e1dbca2 + 14b864c commit 6ee65b8

File tree

4 files changed

+76
-6
lines changed

4 files changed

+76
-6
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.github.adrienpessu.sarifviewer
2+
3+
import com.github.adrienpessu.sarifviewer.toolWindow.SarifViewerWindowFactory
4+
import com.intellij.json.JsonFileType
5+
import com.intellij.openapi.fileTypes.INativeFileType
6+
import com.intellij.openapi.project.Project
7+
import com.intellij.openapi.vfs.VirtualFile
8+
import com.intellij.openapi.wm.ToolWindowManager
9+
import com.intellij.ui.IconManager
10+
import com.intellij.ui.components.JBPanel
11+
import javax.swing.Icon
12+
13+
object SarifFileType : JsonFileType(), INativeFileType {
14+
override fun getName() = "SARIF"
15+
override fun getDescription() = "SARIF file"
16+
override fun getDefaultExtension() = "sarif"
17+
override fun getIcon(): Icon = load("com.github.adrienpessu.sarifviewer/sarif.svg", -2129886975, 0);
18+
19+
20+
override fun openFileInAssociatedApplication(project: Project?, file: VirtualFile): Boolean {
21+
if (project == null) return false
22+
23+
val toolWindow = ToolWindowManager
24+
.getInstance(project)
25+
.getToolWindow("Sarif viewer")
26+
27+
28+
toolWindow?.contentManager?.selectedContent?.component
29+
?.let { component ->
30+
if (component is SarifViewerWindowFactory.MyToolWindow) {
31+
component.openFile(project,file.toNioPath().toFile())
32+
}
33+
}
34+
35+
toolWindow?.show() // opens and focuses the tool window
36+
return true
37+
}
38+
39+
private fun load(path: String, cacheKey: Int, flags: Int): Icon {
40+
return IconManager.getInstance()
41+
.loadRasterizedIcon(path, SarifFileType.javaClass.getClassLoader(), cacheKey, flags)
42+
}
43+
44+
override fun useNativeIcon(): Boolean = false
45+
46+
}

src/main/kotlin/com/github/adrienpessu/sarifviewer/toolWindow/SarifViewerWindowFactory.kt

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.intellij.openapi.project.DumbService
2828
import com.intellij.openapi.project.Project
2929
import com.intellij.openapi.ui.ComboBox
3030
import com.intellij.openapi.vfs.VirtualFileManager
31+
import com.intellij.openapi.ui.SimpleToolWindowPanel
3132
import com.intellij.openapi.wm.ToolWindow
3233
import com.intellij.openapi.wm.ToolWindowFactory
3334
import com.intellij.ui.ScrollPaneFactory
@@ -77,7 +78,7 @@ class SarifViewerWindowFactory : ToolWindowFactory {
7778

7879
override fun shouldBeAvailable(project: Project) = true
7980

80-
class MyToolWindow(toolWindow: ToolWindow) {
81+
class MyToolWindow(toolWindow: ToolWindow) : SimpleToolWindowPanel(false, true) {
8182

8283
init {
8384
val actionManager = ActionManager.getInstance()
@@ -89,8 +90,8 @@ class SarifViewerWindowFactory : ToolWindowFactory {
8990
val actions = ArrayList<AnAction>()
9091
actions.add(openLocalFileAction)
9192
actions.add(refreshAction)
92-
9393
toolWindow.setTitleActions(actions)
94+
//configureToolbar()
9495
}
9596

9697
internal var github: GitHubInstance? = null
@@ -118,7 +119,18 @@ class SarifViewerWindowFactory : ToolWindowFactory {
118119
private var cacheSarif: SarifSchema210? = null
119120
private var currentLeaf: Leaf? = null
120121

121-
fun getContent() = JBPanel<JBPanel<*>>().apply {
122+
public fun openFile(project : Project, file : File) {
123+
val extractSarifFromFile = extractSarifFromFile(file)
124+
treeBuilding(extractSarifFromFile)
125+
localMode = true
126+
}
127+
128+
override fun getContent(): JComponent? {
129+
configureToolbar()
130+
return this.component
131+
}
132+
133+
private fun configureToolbar() {
122134

123135
manageTreeIcons()
124136
buildSkeleton()
@@ -158,7 +170,7 @@ class SarifViewerWindowFactory : ToolWindowFactory {
158170
})
159171
}
160172

161-
private fun JBPanel<JBPanel<*>>.loadDataAndUI(
173+
private fun loadDataAndUI(
162174
repository: GitRepository,
163175
selectedCombo: BranchItemComboBox? = null
164176
) {
@@ -260,7 +272,7 @@ class SarifViewerWindowFactory : ToolWindowFactory {
260272
thisLogger().info(message)
261273
}
262274

263-
private fun JBPanel<JBPanel<*>>.buildSkeleton() {
275+
private fun buildSkeleton() {
264276
steps.layout = BoxLayout(steps, BoxLayout.Y_AXIS)
265277
tableSteps.size = Dimension(steps.width, steps.height)
266278
steps.add(tableSteps)

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
<depends>com.intellij.modules.platform</depends>
88
<depends>Git4Idea</depends>
9+
<depends>com.intellij.modules.json</depends>
910

1011
<resource-bundle>messages.MyBundle</resource-bundle>
1112

@@ -32,7 +33,10 @@
3233
<notificationGroup id="SARIF viewer"
3334
displayType="BALLOON"/>
3435
<codeVisionProvider language="kotlin" implementationClass="com.github.adrienpessu.sarifviewer.toolWindow.SarifCodeVisionProvider"/>
35-
36+
<fileType
37+
name="SARIF"
38+
implementationClass="com.github.adrienpessu.sarifviewer.SarifFileType"
39+
extensions="sarif" fieldName="INSTANCE" language="JSON"/>
3640
</extensions>
3741

3842

Lines changed: 8 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)