@@ -4,7 +4,7 @@ import com.intellij.buildsystem.model.unified.UnifiedCoordinates
44import com.intellij.buildsystem.model.unified.UnifiedDependency
55import com.intellij.externalSystem.DependencyModifierService
66import com.intellij.openapi.application.EDT
7- import com.intellij.openapi.application.smartReadAction
7+ import com.intellij.openapi.application.readAction
88import com.intellij.openapi.application.writeAction
99import com.intellij.openapi.components.service
1010import com.intellij.openapi.diagnostic.Logger
@@ -15,6 +15,7 @@ import com.intellij.openapi.project.Project
1515import com.intellij.psi.JavaPsiFacade
1616import com.intellij.psi.search.GlobalSearchScope
1717import com.intellij.util.concurrency.annotations.RequiresReadLock
18+ import com.intellij.util.concurrency.annotations.RequiresWriteLock
1819import kotlinx.coroutines.Dispatchers
1920import kotlinx.coroutines.ensureActive
2021import kotlinx.coroutines.withContext
@@ -49,7 +50,7 @@ abstract class AbstractJvmInstrumentationProvider(protected val project: Project
4950 val uMethod = languageService.findUMethodByMethodCodeObjectId(methodId)
5051 coroutineContext.ensureActive()
5152 return uMethod?.let { method ->
52- smartReadAction(project) {
53+ readAction {
5354 val containingModule = method.sourcePsi?.let { ModuleUtilCore .findModuleForPsiElement(it) }
5455 containingModule?.let { module ->
5556 if (! hasNecessaryDependencies(project, module)) {
@@ -80,9 +81,13 @@ abstract class AbstractJvmInstrumentationProvider(protected val project: Project
8081
8182 withContext(Dispatchers .EDT ) {
8283 @Suppress(" UnstableApiUsage" )
83- writeAction {
84+ val added = writeAction {
8485 addDependencyToOtelLib(uMethod, methodId)
85- ProjectRefreshAction .Manager .refreshProject(project)
86+ }
87+ if (added){
88+ withContext(Dispatchers .Default ) {
89+ ProjectRefreshAction .Manager .refreshProject(project)
90+ }
8691 }
8792 }
8893 }
@@ -94,42 +99,43 @@ abstract class AbstractJvmInstrumentationProvider(protected val project: Project
9499 return
95100 }
96101
97- withContext(Dispatchers .EDT ) {
102+ val instrumented = withContext(Dispatchers .EDT ) {
98103 instrumentMethod(observabilityInfo)
99- ProjectRefreshAction .Manager .refreshProject(project)
104+ }
105+ if (instrumented){
106+ withContext(Dispatchers .Default ) {
107+ ProjectRefreshAction .Manager .refreshProject(project)
108+ }
100109 }
101110 }
102111
103112
104113 @Suppress(" UnstableApiUsage" )
105- private fun addDependencyToOtelLib (uMethod : UMethod , methodId : String ) {
106- val module = getModuleOfMethodId(uMethod)
114+ @RequiresWriteLock
115+ private fun addDependencyToOtelLib (uMethod : UMethod , methodId : String ):Boolean {
116+ val module = uMethod.sourcePsi?.let {
117+ ModuleUtilCore .findModuleForPsiElement(it)
118+ }
107119 if (module == null ) {
108120 Log .warn(logger, " Failed to add dependencies OTEL lib since could not lookup module by methodId='{}'" , methodId)
109- return
121+ return false
110122 }
111123
112124 if (isSpringBootAndMicrometer(project, module)) {
113- addDepsForSpringBootAndMicrometer(module)
125+ return addDepsForSpringBootAndMicrometer(module)
114126 } else {
115127 val moduleBuildSystem = project.service<JvmBuildSystemHelperService >().determineBuildSystem(module)
116128 val dependencyLib = mapBuildSystem2Dependency[moduleBuildSystem]
117- val dependencyModifierService = DependencyModifierService .getInstance(project)
118129 if (dependencyLib != null ) {
119- dependencyModifierService.addDependency(module, dependencyLib)
130+ DependencyModifierService .getInstance(project).addDependency(module, dependencyLib)
131+ return true
120132 }
133+ return false
121134 }
122135 }
123136
124137
125- private fun getModuleOfMethodId (uMethod : UMethod ): Module ? {
126- return uMethod.sourcePsi?.let {
127- ModuleUtilCore .findModuleForPsiElement(it)
128- }
129- }
130-
131-
132- private fun addDepsForSpringBootAndMicrometer (module : Module ) {
138+ private fun addDepsForSpringBootAndMicrometer (module : Module ): Boolean {
133139 val modulesDepsService = ModulesDepsService .getInstance(project)
134140 val moduleExt = modulesDepsService.getModuleExt(module.name)
135141 if (moduleExt == null ) {
@@ -138,11 +144,12 @@ abstract class AbstractJvmInstrumentationProvider(protected val project: Project
138144 " Failed add dependencies of Spring Boot Micrometer since could not lookup module ext by module name='{}'" ,
139145 module.name
140146 )
141- return
147+ return false
142148 }
143149 val project = module.project
144150 val springBootMicrometerConfigureDepsService = SpringBootMicrometerConfigureDepsService .getInstance(project)
145151 springBootMicrometerConfigureDepsService.addMissingDependenciesForSpringBootObservability(moduleExt)
152+ return true
146153 }
147154
148155
0 commit comments