mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-14 09:12:22 +07:00
ability to provide a hyperlink link by generated source filter
GitOrigin-RevId: 5ffa10ac1772d7d36feb053779092c24cc420f2f
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bb0a02eda6
commit
3bd32f51f1
@@ -5,8 +5,10 @@ import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.NlsContexts
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
abstract class GeneratedSourcesFilter {
|
||||
companion object {
|
||||
@@ -37,4 +39,19 @@ abstract class GeneratedSourcesFilter {
|
||||
* @return a text to be shown in the editor notification panel or `null` for the default text
|
||||
*/
|
||||
open fun getNotificationText(file: VirtualFile, project: Project): @NlsContexts.LinkLabel String? = null
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@ApiStatus.Internal
|
||||
open fun getNotification(file: VirtualFile, project: Project): @NlsContexts.LinkLabel GeneratedSourceFilterNotification? {
|
||||
return GeneratedSourceFilterNotification(text = getNotificationText(file, project) ?: return null, actions = emptyList())
|
||||
}
|
||||
}
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@ApiStatus.Internal
|
||||
data class GeneratedSourceFilterNotification(@NlsSafe val text: String, val actions: List<GeneratedSourceFilterHyperLinkAction>)
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@ApiStatus.Internal
|
||||
data class GeneratedSourceFilterHyperLinkAction(@NlsSafe val text: String, val link: String)
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.intellij.lang.LangBundle
|
||||
import com.intellij.openapi.fileEditor.FileEditor
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.GeneratedSourceFilterNotification
|
||||
import com.intellij.openapi.roots.GeneratedSourcesFilter
|
||||
import com.intellij.openapi.util.NlsContexts
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.ui.EditorNotificationPanel
|
||||
import com.intellij.ui.EditorNotificationProvider
|
||||
@@ -16,32 +16,37 @@ import javax.swing.JComponent
|
||||
internal class GeneratedFileEditingNotificationProvider : EditorNotificationProvider, DumbAware {
|
||||
override fun collectNotificationData(
|
||||
project: Project,
|
||||
file: VirtualFile
|
||||
file: VirtualFile,
|
||||
): Function<in FileEditor, out JComponent?>? {
|
||||
if (!GeneratedSourceFileChangeTracker.getInstance(project).isEditedGeneratedFile(file)) {
|
||||
return null
|
||||
}
|
||||
|
||||
val notificationText = getText(file, project)
|
||||
val notification = getNotification(file, project)
|
||||
return Function { fileEditor ->
|
||||
val panel = EditorNotificationPanel(fileEditor, EditorNotificationPanel.Status.Warning)
|
||||
panel.text = notificationText
|
||||
panel.text = notification.text
|
||||
for (action in notification.actions) {
|
||||
panel.createActionLabel(action.text) {
|
||||
BrowserUtil.browse(action.link)
|
||||
}
|
||||
}
|
||||
panel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun getText(file: VirtualFile, project: Project): @NlsContexts.LinkLabel String {
|
||||
if (project.isDisposed || !file.isValid) return LangBundle.message("link.label.generated.source.files")
|
||||
for (filter in GeneratedSourcesFilter.EP_NAME.extensionList) {
|
||||
if (!filter.isGeneratedSource(file, project)) {
|
||||
continue
|
||||
}
|
||||
private fun getNotification(file: VirtualFile, project: Project): GeneratedSourceFilterNotification {
|
||||
if (!project.isDisposed && file.isValid) {
|
||||
for (filter in GeneratedSourcesFilter.EP_NAME.extensionList) {
|
||||
if (!filter.isGeneratedSource(file, project)) {
|
||||
continue
|
||||
}
|
||||
|
||||
val text = filter.getNotificationText(file, project)
|
||||
if (text != null) {
|
||||
return text
|
||||
filter.getNotification(file, project)?.let {
|
||||
return it
|
||||
}
|
||||
}
|
||||
}
|
||||
return LangBundle.message("link.label.generated.source.files")
|
||||
return GeneratedSourceFilterNotification(text = LangBundle.message("link.label.generated.source.files"), actions = emptyList())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user