mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-238791: rearrange nodes
GitOrigin-RevId: 00534e2c70577a2b74de01de7ecb500abad2e600
This commit is contained in:
committed by
intellij-monorepo-bot
parent
0218cec2c9
commit
fd94a2e0ff
+29
-11
@@ -1,22 +1,40 @@
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.analysis.problemsView.toolWindow
|
||||
|
||||
internal class FileProblems {
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
|
||||
internal class FileProblems(val file: VirtualFile) {
|
||||
private val problems = mutableSetOf<Problem>()
|
||||
private val nodes = mutableMapOf<Problem, ProblemNode>()
|
||||
private var fileNode: FileNode? = null
|
||||
|
||||
fun getNodes(parent: FileNode): Collection<ProblemNode> {
|
||||
problems.forEach { problem ->
|
||||
var node = nodes[problem]
|
||||
if (node == null || parent !== node.parentDescriptor) {
|
||||
node = ProblemNode(parent, problem)
|
||||
nodes[problem] = node
|
||||
}
|
||||
}
|
||||
return nodes.values
|
||||
fun getFileNode(parent: Node): FileNode {
|
||||
val oldNode = fileNode
|
||||
if (oldNode?.parentDescriptor === parent) return oldNode
|
||||
val newNode = FileNode(parent, file)
|
||||
fileNode = newNode
|
||||
nodes.clear()
|
||||
return newNode
|
||||
}
|
||||
|
||||
fun findNode(problem: Problem) = nodes[problem]
|
||||
private fun getProblemNode(parent: FileNode, problem: Problem): ProblemNode {
|
||||
val oldNode = nodes[problem]
|
||||
if (oldNode?.parentDescriptor === parent) return oldNode
|
||||
val newNode = ProblemNode(parent, problem)
|
||||
nodes[problem] = newNode
|
||||
return newNode
|
||||
}
|
||||
|
||||
fun getProblemNodes(): Collection<ProblemNode> {
|
||||
if (problems.isEmpty()) return emptyList()
|
||||
val parent = fileNode ?: return emptyList()
|
||||
return problems.map { getProblemNode(parent, it) }
|
||||
}
|
||||
|
||||
fun findProblemNode(problem: Problem): ProblemNode? {
|
||||
val parent = fileNode ?: return null
|
||||
return getProblemNode(parent, problem)
|
||||
}
|
||||
|
||||
fun add(problem: Problem) = problems.add(problem)
|
||||
|
||||
|
||||
+8
-9
@@ -13,24 +13,23 @@ import com.intellij.ui.tree.LeafState
|
||||
internal class HighlightingFileRoot(panel: ProblemsViewPanel, val file: VirtualFile)
|
||||
: Root(panel), LeafState.Supplier, MarkupModelListener, Disposable {
|
||||
|
||||
private val myProblems = FileProblems()
|
||||
private val myFileNode = FileNode(this, file)
|
||||
private val problems = FileProblems(file)
|
||||
|
||||
init {
|
||||
refreshChildren()
|
||||
}
|
||||
|
||||
override fun getChildren(): Collection<Node> {
|
||||
return listOf(myFileNode)
|
||||
return synchronized(problems) { listOf(problems.getFileNode(this)) }
|
||||
}
|
||||
|
||||
override fun getChildren(file: VirtualFile): Collection<Node> {
|
||||
return synchronized(myProblems) { myProblems.getNodes(myFileNode).toList() }
|
||||
return synchronized(problems) { problems.getProblemNodes() }
|
||||
}
|
||||
|
||||
fun findProblemNode(info: HighlightInfo?): ProblemNode? {
|
||||
val problem = getProblem(info) ?: return null
|
||||
return synchronized(myProblems) { myProblems.findNode(problem) }
|
||||
return synchronized(problems) { problems.findProblemNode(problem) }
|
||||
}
|
||||
|
||||
private fun refreshChildren() {
|
||||
@@ -45,13 +44,13 @@ internal class HighlightingFileRoot(panel: ProblemsViewPanel, val file: VirtualF
|
||||
|
||||
override fun afterAdded(highlighter: RangeHighlighterEx) {
|
||||
val problem = getProblem(highlighter) ?: return
|
||||
synchronized(myProblems) { myProblems.add(problem) }
|
||||
synchronized(problems) { problems.add(problem) }
|
||||
structureChanged()
|
||||
}
|
||||
|
||||
override fun beforeRemoved(highlighter: RangeHighlighterEx) {
|
||||
val problem = getProblem(highlighter) ?: return
|
||||
synchronized(myProblems) { myProblems.remove(problem) }
|
||||
synchronized(problems) { problems.remove(problem) }
|
||||
structureChanged()
|
||||
}
|
||||
|
||||
@@ -72,7 +71,7 @@ internal class HighlightingFileRoot(panel: ProblemsViewPanel, val file: VirtualF
|
||||
return if (info?.description == null) null else HighlightingProblem(info)
|
||||
}
|
||||
|
||||
override fun getProblemsCount() = synchronized(myProblems) { myProblems.count() }
|
||||
override fun getProblemsCount() = synchronized(problems) { problems.count() }
|
||||
|
||||
override fun getProblemsCount(file: VirtualFile, severity: Severity) = synchronized(myProblems) { myProblems.count(severity) }
|
||||
override fun getProblemsCount(file: VirtualFile, severity: Severity) = synchronized(problems) { problems.count(severity) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user