11package org.digma.intellij.plugin.idea.navigation
22
3- import com.intellij.lang.java.JavaLanguage
43import com.intellij.openapi.Disposable
54import com.intellij.openapi.components.Service
65import com.intellij.openapi.diagnostic.Logger
@@ -31,7 +30,6 @@ import org.digma.intellij.plugin.errorreporting.ErrorReporter
3130import org.digma.intellij.plugin.idea.psi.isJvmSupportedFile
3231import org.digma.intellij.plugin.log.Log
3332import org.digma.intellij.plugin.psi.PsiUtils
34- import org.jetbrains.kotlin.idea.KotlinLanguage
3533import java.util.LinkedList
3634import java.util.Queue
3735import java.util.concurrent.ConcurrentLinkedQueue
@@ -186,19 +184,23 @@ class NavigationDiscoveryChangeService(private val project: Project, private val
186184 private inner class NavigationDiscoveryPsiTreeChangeListener : PsiTreeAnyChangeAbstractAdapter () {
187185 override fun onChange (file : PsiFile ? ) {
188186
189- if (! isProjectValid(project)) {
190- return
191- }
187+ try {
188+ if (! isProjectValid(project)) {
189+ return
190+ }
192191
193- // this method should be very fast, it runs on EDT.
194- // selecting relevant files should be done while processing in background.
195- file?.let {
196- // very quick selection of java and kotlin files only.
197- // when the files are processed there is another check isJvmSupportedFile, but instead of collecting
198- // all files and checking later we check here first because there may be many files that are not relevant
199- if (isJavaOrKotlinFile(it)) {
200- addChangedFile(it.virtualFile)
192+ // this method should be very fast, it runs on EDT.
193+ // selecting relevant files should be done while processing in background.
194+ file?.let {
195+ // very quick selection of java and kotlin files only.
196+ // when the files are processed there is another check isJvmSupportedFile, but instead of collecting
197+ // all files and checking later we check here first because there may be many files that are not relevant
198+ if (isJavaOrKotlinFile(it)) {
199+ addChangedFile(it.virtualFile)
200+ }
201201 }
202+ } catch (e: Throwable ) {
203+ ErrorReporter .getInstance().reportError(" NavigationDiscoveryChangeService.NavigationDiscoveryPsiTreeChangeListener.onChange" , e)
202204 }
203205 }
204206 }
@@ -222,16 +224,28 @@ class NavigationDiscoveryChangeService(private val project: Project, private val
222224 private inner class NavigationDiscoveryAsyncFileChangeListener : AsyncFileListener {
223225 override fun prepareChange (events : List <VFileEvent >): AsyncFileListener .ChangeApplier ? {
224226
225- if (! isProjectValid(project)) {
226- return null
227- }
227+ try {
228+ if (! isProjectValid(project)) {
229+ return null
230+ }
231+
232+ return object : AsyncFileListener .ChangeApplier {
233+ override fun afterVfsChange () {
234+ // this method should be very fast, it runs with write action.
235+ // selecting relevant files should be done while processing in background.
236+ try {
237+ addBulkEvents(events)
238+ } catch (e: Throwable ) {
239+ ErrorReporter .getInstance()
240+ .reportError(" NavigationDiscoveryChangeService.NavigationDiscoveryAsyncFileChangeListener.afterVfsChange" , e)
241+ }
228242
229- return object : AsyncFileListener .ChangeApplier {
230- override fun afterVfsChange () {
231- // this method should be very fast, it runs with write action.
232- // selecting relevant files should be done while processing in background.
233- addBulkEvents(events)
243+ }
234244 }
245+ } catch (e: Throwable ) {
246+ ErrorReporter .getInstance()
247+ .reportError(" NavigationDiscoveryChangeService.NavigationDiscoveryAsyncFileChangeListener.prepareChange" , e)
248+ return null
235249 }
236250 }
237251 }
0 commit comments