Skip to content

Commit 1c04716

Browse files
committed
navigation discovery
1 parent 0d891d4 commit 1c04716

File tree

2 files changed

+29
-22
lines changed

2 files changed

+29
-22
lines changed

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/frameworks/QuarkusConfigureDepsService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class QuarkusConfigureDepsService(private val project: Project) : Disposable {
162162
}
163163

164164
Backgroundable.executeOnPooledThread {
165-
ProjectRefreshAction.refreshProject(project)
165+
ProjectRefreshAction.Manager.refreshProject(project)
166166
}
167167
}
168168

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/psi/AbstractJvmInstrumentationProvider.kt

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.intellij.buildsystem.model.unified.UnifiedCoordinates
44
import com.intellij.buildsystem.model.unified.UnifiedDependency
55
import com.intellij.externalSystem.DependencyModifierService
66
import com.intellij.openapi.application.EDT
7-
import com.intellij.openapi.application.smartReadAction
7+
import com.intellij.openapi.application.readAction
88
import com.intellij.openapi.application.writeAction
99
import com.intellij.openapi.components.service
1010
import com.intellij.openapi.diagnostic.Logger
@@ -15,6 +15,7 @@ import com.intellij.openapi.project.Project
1515
import com.intellij.psi.JavaPsiFacade
1616
import com.intellij.psi.search.GlobalSearchScope
1717
import com.intellij.util.concurrency.annotations.RequiresReadLock
18+
import com.intellij.util.concurrency.annotations.RequiresWriteLock
1819
import kotlinx.coroutines.Dispatchers
1920
import kotlinx.coroutines.ensureActive
2021
import 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

Comments
 (0)