Skip to content

Commit 6a140f9

Browse files
authored
Merge pull request #2272 from digma-ai/fix-error-in-242
fix-error-in-242 Closes #2271
2 parents f797511 + 747ac95 commit 6a140f9

File tree

6 files changed

+42
-21
lines changed

6 files changed

+42
-21
lines changed

common-build-logic/src/main/kotlin/common/BuildProfile.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,8 +190,8 @@ object BuildProfiles {
190190

191191
isEAP = true,
192192
profile = Profile.p242,
193-
platformVersion = "242.19533-EAP-CANDIDATE-SNAPSHOT",
194-
riderVersion = "2024.2-EAP5-SNAPSHOT",
193+
platformVersion = "242.19890-EAP-CANDIDATE-SNAPSHOT",
194+
riderVersion = "2024.2-EAP6-SNAPSHOT",
195195
pycharmVersion = "242-EAP-SNAPSHOT",
196196
riderTargetFramework = "net8.0",
197197
riderResharperVersionConstant = "PROFILE_2023_2",

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/InstrumentationRunConfigurationExtension.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class InstrumentationRunConfigurationExtension : RunConfigurationExtension() {
4040
}
4141

4242
private fun getHandlerForConfiguration(configuration: RunConfiguration): RunConfigurationInstrumentationHandler? {
43-
return RunConfigurationHandlersHolder.runConfigurationHandlers.find { it.isApplicableFor(configuration) }
43+
return RunConfigurationHandlersHolder.getInstance().getRunConfigurationHandlers().find { it.isApplicableFor(configuration) }
4444
}
4545

4646
override fun <T : RunConfigurationBase<*>?> updateJavaParameters(
@@ -164,7 +164,7 @@ class InstrumentationRunConfigurationExtension : RunConfigurationExtension() {
164164

165165
//find a handler that wants to handle this configuration and also that should clean after start
166166
val configurationInstrumentationHandler =
167-
RunConfigurationHandlersHolder.runConfigurationHandlers.find {
167+
RunConfigurationHandlersHolder.getInstance().getRunConfigurationHandlers().find {
168168
it.isApplicableFor(configuration) && it.shouldCleanConfigurationAfterStart(configuration)
169169
}
170170

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/JavaToolOptionsDemoBuilder.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import org.digma.intellij.plugin.errorreporting.ErrorReporter
99
class JavaToolOptionsDemoBuilder {
1010

1111
fun isSupported(configuration: RunConfiguration): Boolean {
12-
return RunConfigurationHandlersHolder.runConfigurationHandlers.find { it.isApplicableFor(configuration) } != null
12+
return RunConfigurationHandlersHolder.getInstance().getRunConfigurationHandlers().find { it.isApplicableFor(configuration) } != null
1313
}
1414

1515

@@ -25,7 +25,7 @@ class JavaToolOptionsDemoBuilder {
2525
val template = factory.createTemplateConfiguration(configuration.project)
2626
val dummyConfig = factory.createConfiguration("dummy", template)
2727

28-
val handler = RunConfigurationHandlersHolder.runConfigurationHandlers.find { it.isApplicableFor(dummyConfig) }
28+
val handler = RunConfigurationHandlersHolder.getInstance().getRunConfigurationHandlers().find { it.isApplicableFor(dummyConfig) }
2929

3030
if (handler == null) {
3131
return null
Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
11
package org.digma.intellij.plugin.idea.execution
22

3+
import com.intellij.openapi.components.service
34
import org.digma.intellij.plugin.errorreporting.ErrorReporter
45
import org.digma.intellij.plugin.execution.RunConfigurationInstrumentationHandler
56
import java.util.ServiceLoader
67

7-
object RunConfigurationHandlersHolder {
8+
@Suppress("LightServiceMigrationCode")
9+
class RunConfigurationHandlersHolder {
10+
11+
private var runConfigurationHandlers: List<RunConfigurationInstrumentationHandler>? = null
12+
13+
companion object {
14+
fun getInstance(): RunConfigurationHandlersHolder {
15+
return service<RunConfigurationHandlersHolder>()
16+
}
17+
}
18+
819

920
//RunConfigurationInstrumentationHandler is a delegating facades to services that provide the real work.
1021
//the main reason is to hide gradle and maven classes from the plugin in case gradle or maven are disabled.
1122
//RunConfigurationInstrumentationHandler that don't need a service can do the work themselves.
12-
val runConfigurationHandlers: List<RunConfigurationInstrumentationHandler> = try {
13-
//ServiceLoader doesn't work in intellij as it is in any other java application.
14-
//see https://youtrack.jetbrains.com/issue/IDEA-241229
15-
//so changing the context class loader for loading is the workaround
16-
val currentClassLoader = Thread.currentThread().contextClassLoader
17-
Thread.currentThread().setContextClassLoader(this::class.java.classLoader)
18-
val handlers =
19-
ServiceLoader.load(RunConfigurationInstrumentationHandler::class.java).stream().map { it.get() }.toList()
20-
Thread.currentThread().setContextClassLoader(currentClassLoader)
21-
handlers
22-
} catch (e: Throwable) {
23-
ErrorReporter.getInstance().reportInternalFatalError("RunConfigurationHandlersHolder.init", e)
24-
listOf()
23+
fun getRunConfigurationHandlers(): List<RunConfigurationInstrumentationHandler> {
24+
if (runConfigurationHandlers == null) {
25+
26+
//ServiceLoader doesn't work in intellij as it is in any other java application.
27+
//see https://youtrack.jetbrains.com/issue/IDEA-241229
28+
//so changing the context class loader for loading is the workaround
29+
val currentClassLoader = Thread.currentThread().contextClassLoader
30+
31+
runConfigurationHandlers = try {
32+
Thread.currentThread().setContextClassLoader(this::class.java.classLoader)
33+
ServiceLoader.load(RunConfigurationInstrumentationHandler::class.java).stream().map { it.get() }.toList()
34+
} catch (e: Throwable) {
35+
ErrorReporter.getInstance().reportInternalFatalError("RunConfigurationHandlersHolder.init", e)
36+
emptyList()
37+
} finally {
38+
Thread.currentThread().setContextClassLoader(currentClassLoader)
39+
}
40+
}
41+
return runConfigurationHandlers ?: emptyList()
2542
}
43+
2644
}

jvm-common/src/main/kotlin/org/digma/intellij/plugin/idea/execution/RunConfigurationStartupActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class RunConfigurationStartupActivity : DigmaProjectActivity() {
5252

5353
val isTemp = isTempRunConfig(config, tempConfigurations)
5454

55-
val handler = RunConfigurationHandlersHolder.runConfigurationHandlers.find {
55+
val handler = RunConfigurationHandlersHolder.getInstance().getRunConfigurationHandlers().find {
5656
it.isApplicableFor(config)
5757
}
5858

src/main/resources/META-INF/org.digma.intellij-with-jvm.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@
4949
<projectService
5050
serviceImplementation="org.digma.intellij.plugin.idea.psi.discovery.endpoint.EndpointDiscoveryService"/>
5151

52+
<applicationService
53+
serviceImplementation="org.digma.intellij.plugin.idea.execution.RunConfigurationHandlersHolder"/>
54+
5255
</extensions>
5356

5457

0 commit comments

Comments
 (0)