Skip to content

Commit 52ccb69

Browse files
authored
Merge pull request #115 from ekvedaras/read-action-fix
Attempt to fix UI freeze
2 parents 4f8b482 + 67e93b1 commit 52ccb69

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
## [Unreleased]
66

7+
### Fixed
8+
9+
- Use non-blocking read action. Should hopefully fix UI freeze. #114
10+
711
## [4.0.2]
812

913
### Fixed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
pluginGroup = dev.ekvedaras.laravelquery
55
pluginName = Laravel Query
66
# SemVer format -> https://semver.org
7-
pluginVersion=4.0.2
7+
pluginVersion=4.0.3
88

99
# See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html
1010
# for insight into build numbers and IntelliJ Platform versions.

src/main/kotlin/dev/ekvedaras/laravelquery/models/DbReferenceExpression.kt

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,21 @@ import com.intellij.database.model.DasIndex
66
import com.intellij.database.model.DasNamespace
77
import com.intellij.database.model.DasTable
88
import com.intellij.database.model.DasTableKey
9+
import com.intellij.openapi.Disposable
910
import com.intellij.openapi.application.ApplicationManager
11+
import com.intellij.openapi.application.ReadAction
1012
import com.intellij.openapi.project.DumbService
1113
import com.intellij.openapi.project.Project
14+
import com.intellij.openapi.util.Disposer
1215
import com.intellij.openapi.util.TextRange
1316
import com.intellij.psi.PsiElement
17+
import com.intellij.psi.PsiManager
18+
import com.intellij.psi.PsiTreeChangeAdapter
19+
import com.intellij.psi.PsiTreeChangeEvent
1420
import dev.ekvedaras.laravelquery.utils.DbReferenceResolver
1521
import dev.ekvedaras.laravelquery.utils.PsiUtils.Companion.unquoteAndCleanup
1622
import dev.ekvedaras.laravelquery.utils.TableAndAliasCollector
23+
import kotlin.math.exp
1724
import org.apache.commons.lang.StringUtils.substringBefore
1825

1926
class DbReferenceExpression(val expression: PsiElement, val type: Type) {
@@ -55,11 +62,17 @@ class DbReferenceExpression(val expression: PsiElement, val type: Type) {
5562
ranges.add(TextRange.from(if (ranges.isNotEmpty()) ranges.last().endOffset + 1 else 1, part.length))
5663
}
5764

58-
if (!DumbService.isDumb(project) && ApplicationManager.getApplication().isReadAccessAllowed) {
59-
ApplicationManager.getApplication().runReadAction {
65+
if (!DumbService.isDumb(project)) {
66+
val expressionDisposable = Disposer.newDisposable()
67+
PsiManager.getInstance(project).addPsiTreeChangeListener(object : PsiTreeChangeAdapter() {
68+
override fun childrenChanged(event: PsiTreeChangeEvent) {
69+
expressionDisposable.dispose()
70+
}
71+
}, expressionDisposable)
72+
ReadAction.nonBlocking<Unit> {
6073
TableAndAliasCollector(this).collect()
6174
DbReferenceResolver(this).resolve()
62-
}
75+
}.inSmartMode(project).expireWith(expressionDisposable).executeSynchronously()
6376
}
6477
}
6578
}

0 commit comments

Comments
 (0)