Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix PluginExceptions and SlowOperations #520

Merged
merged 2 commits into from
Jun 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.actions

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -11,10 +12,12 @@ object ArendNormalizeToggleAction : ToggleAction() {
templatePresentation.icon = ArendIcons.SHOW_NORMALIZED
}

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent) =
e.project?.run { service<ArendProjectSettings>().data.popupNormalize } ?: false

override fun setSelected(e: AnActionEvent, state: Boolean) {
e.project?.run { service<ArendProjectSettings>().data.popupNormalize = state }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,7 @@ import com.intellij.ide.hierarchy.TypeHierarchyBrowserBase
import com.intellij.ide.util.treeView.AlphaComparator
import com.intellij.ide.util.treeView.NodeDescriptor
import com.intellij.ide.util.treeView.SourceComparator
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.actionSystem.*
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runWriteAction
import com.intellij.openapi.components.service
Expand Down Expand Up @@ -149,6 +146,8 @@ class ArendClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHie

inner class ArendShowImplFieldsAction : ToggleAction("Show Implemented Fields", "", ArendIcons.SHOW_FIELDS_IMPL) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent) = myProject.service<ArendProjectSettings>().data.showImplFields

override fun setSelected(e: AnActionEvent, state: Boolean) {
Expand All @@ -159,6 +158,8 @@ class ArendClassHierarchyBrowser(project: Project, method: PsiElement) : TypeHie

inner class ArendShowNonImplFieldsAction : ToggleAction("Show Non-Implemented Fields", "", ArendIcons.SHOW_NON_IMPLEMENTED) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent) = myProject.service<ArendProjectSettings>().data.showNonImplFields

override fun setSelected(e: AnActionEvent, state: Boolean) {
Expand Down
13 changes: 12 additions & 1 deletion src/main/kotlin/org/arend/navigation/Utils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package org.arend.navigation

import com.intellij.ide.projectView.PresentationData
import com.intellij.navigation.ItemPresentation
import com.intellij.openapi.application.ApplicationManager
import com.intellij.psi.PsiElement
import org.arend.psi.ArendFile
import org.arend.psi.ext.ArendCompositeElement
import org.arend.psi.ext.PsiReferable
import javax.swing.Icon

fun getPresentation(psi: ArendCompositeElement): ItemPresentation {
val location = run {
Expand All @@ -14,7 +16,16 @@ fun getPresentation(psi: ArendCompositeElement): ItemPresentation {
}

val name = presentableName(psi)
return PresentationData(name, location, psi.getIcon(0), null)
var icon: Icon? = null
ApplicationManager.getApplication().run {
executeOnPooledThread {
runReadAction {
icon = psi.getIcon(0)
}
}.get()
}

return PresentationData(name, location, icon, null)
}

fun getPresentationForStructure(psi: ArendCompositeElement): ItemPresentation =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.search.proof

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.LangDataKeys
Expand All @@ -8,6 +9,8 @@ import org.arend.ArendIcons
import org.arend.ArendLanguage

class ArendProofSearchAction : AnAction(ArendIcons.AREND) {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun update(e: AnActionEvent) {
e.presentation.isEnabledAndVisible = e.getData(LangDataKeys.LANGUAGE) == ArendLanguage.INSTANCE
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/org/arend/search/proof/GearActionGroup.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,9 @@ private abstract class ProofSearchToggleSettingsAction(
val settingsProperty: KMutableProperty1<ArendProjectSettingsState, Boolean>,
actionText: @Nls String
) : ToggleAction(actionText) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
settingsProperty.invoke(project.service<ArendProjectSettings>().data)

Expand Down
14 changes: 13 additions & 1 deletion src/main/kotlin/org/arend/search/proof/ProofSearchUtils.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.search.proof

import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.components.service
import com.intellij.openapi.project.DumbService
Expand Down Expand Up @@ -258,7 +259,18 @@ class ProofSearchUISettings(private val project: Project) {
}

fun getCompleteModuleLocation(def: ReferableBase<*>): String? {
val file = def.location?.toString() ?: return null
var file: String? = null
ApplicationManager.getApplication().run {
executeOnPooledThread {
runReadAction {
file = def.location?.toString()
}
}.get()
}
if (file == null) {
return null
}

val module = def.parentsOfType<ArendGroup>(false).toList().reversed().drop(1).map { it.name }
return (listOf(file) + module).joinToString(".")
}
4 changes: 4 additions & 0 deletions src/main/kotlin/org/arend/search/proof/ShowHelpAction.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.arend.search.proof

import com.intellij.icons.AllIcons
import com.intellij.ide.BrowserUtil
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.project.DumbAwareAction
import org.arend.util.ArendBundle
Expand All @@ -10,6 +11,9 @@ class ShowHelpAction(private val ui: ProofSearchUI) : DumbAwareAction(
ArendBundle.getLazyMessage("arend.proof.search.show.help"),
ArendBundle.getLazyMessage("arend.proof.search.show.help.description"), AllIcons.General.ContextHelp
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun actionPerformed(e: AnActionEvent) {
ui.close()
BrowserUtil.browse("https://arend-lang.github.io/documentation/proof-search")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.arend.search.proof
import com.intellij.find.findUsages.PsiElement2UsageTargetAdapter
import com.intellij.icons.AllIcons
import com.intellij.ide.IdeBundle
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.progress.ProgressIndicator
Expand All @@ -22,6 +23,9 @@ class ShowInFindWindowAction(private val ui: ProofSearchUI, private val project:
IdeBundle.messagePointer("show.in.find.window.button.name"),
IdeBundle.messagePointer("show.in.find.window.button.description"), AllIcons.General.Pin_tab
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun actionPerformed(e: AnActionEvent) {
ui.close()
val searchText: String = ui.editorSearchField.text
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.toolWindow.errors

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -10,6 +11,8 @@ import org.arend.settings.ArendProjectSettings
class ArendMessagesFilterAction(private val project: Project, private val type: MessageType, private val group: ArendMessagesFilterActionGroup)
: ToggleAction("Show ${type.toText()}s", null, null), DumbAware {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

val isSelected: Boolean
get() {
val filterSet = project.service<ArendProjectSettings>().messagesFilterSet
Expand All @@ -32,4 +35,4 @@ class ArendMessagesFilterAction(private val project: Project, private val type:
group.setSelected(type, state)
project.service<ArendMessagesService>().update()
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.toolWindow.errors

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -11,6 +12,9 @@ class ArendPinErrorAction : ToggleAction(
ArendBundle.message("arend.pin.error.action.description"),
ArendIcons.PIN
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
e.project?.service<ArendMessagesService>()?.isErrorTextPinned ?: false

Expand All @@ -25,4 +29,4 @@ class ArendPinErrorAction : ToggleAction(
companion object {
const val ID = "Arend.PinError"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.toolWindow.errors

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -11,6 +12,9 @@ class ArendPinGoalAction : ToggleAction(
ArendBundle.message("arend.pin.goal.action.description"),
ArendIcons.PIN
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
e.project?.service<ArendMessagesService>()?.isGoalTextPinned ?: false

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.toolWindow.errors

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -15,6 +16,8 @@ class ArendPrintOptionsFilterAction(
private val callback: Runnable?
) : ToggleAction(flagToString(flag), null, null), DumbAware {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean = isSelected

private val isSelected: Boolean
Expand Down Expand Up @@ -70,4 +73,4 @@ enum class PrintOptionKind(val kindName: String) {
POPUP_PRINT_OPTIONS("Pop-up"),
REPL_PRINT_OPTIONS("REPL"),
ERROR_PRINT_OPTIONS("Error")
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.arend.toolWindow.errors

import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -11,10 +12,12 @@ class ArendShowErrorsPanelAction : ToggleAction(
ArendBundle.message("arend.show.errors.panel.action.description"),
AllIcons.Actions.PreviewDetails
) {
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
e.project?.service<ArendMessagesService>()?.isShowErrorsPanel?.get() ?: true

override fun setSelected(e: AnActionEvent, state: Boolean) {
e.project?.service<ArendMessagesService>()?.isShowErrorsPanel?.set(state)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.arend.toolWindow.errors

import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -12,6 +13,9 @@ class ArendShowGoalsInErrorsPanelAction : ToggleAction(
ArendBundle.message("arend.show.goals.in.errors.panel.action.description"),
ICON
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
e.project?.service<ArendMessagesService>()?.isShowGoalsInErrorsPanel?.get() ?: true

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.arend.toolWindow.errors

import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.ToggleAction
import com.intellij.openapi.components.service
Expand All @@ -11,10 +12,13 @@ class ArendShowImplicitGoalsAction : ToggleAction(
ArendBundle.message("arend.show.implicit.goals.action.description"),
ArendIcons.IMPLICIT_GOAL
) {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean =
e.project?.service<ArendMessagesService>()?.isShowImplicitGoals?.get() ?: false

override fun setSelected(e: AnActionEvent, state: Boolean) {
e.project?.service<ArendMessagesService>()?.isShowImplicitGoals?.set(state)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.arend.toolWindow.errors.tree

import com.intellij.icons.AllIcons
import com.intellij.openapi.actionSystem.ActionUpdateThread
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DefaultActionGroup
import com.intellij.openapi.actionSystem.ToggleAction
Expand Down Expand Up @@ -86,6 +87,9 @@ class ArendErrorTreeAutoScrollFromSource(private val project: Project, private v
}

private inner class MyAction(private val type: MessageType) : ToggleAction("Autoscroll from ${type.toText()}s", null, null), DumbAware {

override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

override fun isSelected(e: AnActionEvent): Boolean {
val settings = project.service<ArendProjectSettings>()
return settings.autoScrollFromSource.contains(type) && settings.messagesFilterSet.contains(type) &&
Expand Down Expand Up @@ -127,4 +131,4 @@ class ArendErrorTreeAutoScrollFromSource(private val project: Project, private v
}
}
}
}
}
Loading