Skip to content

Commit fdbe4ac

Browse files
authored
Merge pull request #2045 from digma-ai/enhance-instrumentation-flavor
Enhance instrumentation flavor for all configuration types
2 parents 7501dfd + 7146d42 commit fdbe4ac

File tree

54 files changed

+1411
-1298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1411
-1298
lines changed

gradle-support/src/main/kotlin/org/digma/intellij/plugin/idea/gradle/execution/GradleModuleResolver.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package org.digma.intellij.plugin.idea.gradle.execution
22

3-
import com.intellij.execution.configurations.RunConfigurationBase
3+
import com.intellij.execution.configurations.RunConfiguration
44
import com.intellij.execution.configurations.SimpleProgramParameters
55
import com.intellij.util.keyFMap.KeyFMap
66
import org.digma.intellij.plugin.idea.execution.ModuleResolver
77
import org.jetbrains.plugins.gradle.service.execution.GradleRunConfiguration
88
import org.jetbrains.plugins.gradle.service.task.GradleTaskManager
99

10-
class GradleModuleResolver(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters) : ModuleResolver(configuration, params) {
10+
class GradleModuleResolver(configuration: RunConfiguration, params: SimpleProgramParameters) : ModuleResolver(configuration, params) {
1111

1212
override fun findMainClassName(): String? {
1313

Lines changed: 11 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.digma.intellij.plugin.idea.gradle.execution
22

3-
import com.intellij.execution.configurations.RunConfigurationBase
3+
import com.intellij.execution.configurations.RunConfiguration
44
import com.intellij.execution.configurations.RunnerSettings
55
import com.intellij.execution.configurations.SimpleProgramParameters
66
import org.digma.intellij.plugin.buildsystem.BuildSystem
@@ -20,94 +20,40 @@ import org.jetbrains.plugins.gradle.service.execution.GradleRunConfiguration
2020
@Suppress("LightServiceMigrationCode")
2121
class GradleRunConfigurationService : BaseJvmRunConfigurationInstrumentationService() {
2222

23-
override fun isApplicableFor(configuration: RunConfigurationBase<*>): Boolean {
24-
return isApplicable(configuration, null)
25-
}
26-
27-
override fun isApplicableFor(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): Boolean {
28-
return isApplicable(configuration, params)
29-
}
30-
31-
private fun isApplicable(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters?): Boolean {
32-
if (configuration is GradleRunConfiguration) {
33-
34-
val taskNames = configuration.settings.taskNames
35-
36-
val isMainMethod = taskNames.any {
37-
it.contains(".main")
38-
}
39-
val hasBootRun = taskNames.any {
40-
it.contains(":bootRun") || it.equals("bootRun")
41-
}
42-
43-
//support for the run task of the java application plugin. https://docs.gradle.org/current/userguide/application_plugin.html
44-
val hasRun = taskNames.any {
45-
it.contains(":run") || it.equals("run")
46-
}
47-
48-
if (isMainMethod || hasBootRun || hasRun || isTest(configuration, params)) {
49-
return true
50-
}
51-
}
52-
53-
return false
54-
}
55-
56-
57-
override fun isTest(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters?): Boolean {
58-
return if (configuration is GradleRunConfiguration) {
59-
val taskNames = configuration.settings.taskNames
60-
taskNames.any {
61-
it.equals(":test") ||
62-
it.endsWith(":test") ||
63-
it.equals("test") ||
64-
it.equals(":bootTestRun") ||
65-
it.endsWith(":bootTestRun") ||
66-
it.equals("bootTestRun")
67-
}
68-
} else {
69-
false
70-
}
23+
override fun isApplicableFor(configuration: RunConfiguration): Boolean {
24+
return configuration is GradleRunConfiguration
7125
}
7226

7327

74-
override fun getConfigurationType(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): RunConfigurationType {
28+
override fun getConfigurationType(configuration: RunConfiguration): RunConfigurationType {
7529
return if (configuration is GradleRunConfiguration) {
76-
if (isTest(configuration, params)) {
77-
RunConfigurationType.GradleTest
78-
} else {
79-
RunConfigurationType.GradleRun
80-
}
30+
RunConfigurationType.Gradle
8131
} else {
8232
RunConfigurationType.Unknown
8333
}
8434
}
8535

86-
override fun isHandlingType(configuration: RunConfigurationBase<*>): Boolean {
87-
return configuration is GradleRunConfiguration
88-
}
89-
90-
override fun getTaskNames(configuration: RunConfigurationBase<*>): Set<String> {
36+
override fun getTaskNames(configuration: RunConfiguration): Set<String> {
9137
if (configuration is GradleRunConfiguration) {
9238
return configuration.settings.taskNames.toSet()
9339
}
9440
return setOf()
9541
}
9642

97-
override fun getBuildSystem(configuration: RunConfigurationBase<*>): BuildSystem {
43+
override fun getBuildSystem(configuration: RunConfiguration): BuildSystem {
9844
if (configuration is GradleRunConfiguration) {
9945
return BuildSystem.GRADLE
10046
}
10147
return BuildSystem.INTELLIJ
10248
}
10349

104-
override fun shouldCleanConfigurationAfterStart(configuration: RunConfigurationBase<*>): Boolean {
50+
override fun shouldCleanConfigurationAfterStart(configuration: RunConfiguration): Boolean {
10551
return true
10652
}
10753

10854

10955
override fun getModuleResolver(
110-
configuration: RunConfigurationBase<*>,
56+
configuration: RunConfiguration,
11157
params: SimpleProgramParameters,
11258
runnerSettings: RunnerSettings?
11359
): ModuleResolver {
@@ -116,14 +62,14 @@ class GradleRunConfigurationService : BaseJvmRunConfigurationInstrumentationServ
11662

11763

11864
override fun getJavaToolOptionsMerger(
119-
configuration: RunConfigurationBase<*>,
65+
configuration: RunConfiguration,
12066
params: SimpleProgramParameters,
12167
parametersExtractor: ParametersExtractor
12268
): JavaToolOptionsMerger {
12369
return ExternalSystemJavaToolOptionsMerger(configuration, params, parametersExtractor)
12470
}
12571

126-
override fun getConfigurationCleaner(configuration: RunConfigurationBase<*>): ConfigurationCleaner {
72+
override fun getConfigurationCleaner(configuration: RunConfiguration): ConfigurationCleaner {
12773
return ExternalSystemConfigurationCleaner(configuration)
12874
}
12975
}
Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.digma.intellij.plugin.execution
22

3-
import com.intellij.execution.configurations.RunConfigurationBase
3+
import com.intellij.execution.configurations.RunConfiguration
44
import com.intellij.execution.configurations.RunnerSettings
55
import com.intellij.execution.configurations.SimpleProgramParameters
66
import org.digma.intellij.plugin.buildsystem.BuildSystem
@@ -12,43 +12,35 @@ import org.digma.intellij.plugin.buildsystem.BuildSystem
1212
interface RunConfigurationInstrumentationHandler {
1313

1414
/**
15-
* used to sort handlers. we need it to find a handler that can help with extracting details from configuration.
16-
* in which case order matters, gradle for example is first, then maven etc.
15+
* this is the method used to attach an instrumentation handler to configuration
1716
*/
18-
fun getOrder(): Int
17+
fun isApplicableFor(configuration: RunConfiguration): Boolean
1918

2019
/**
21-
* this method should not be used to find an instrumentation handler, it should only be used in combination
22-
* with more conditions. the reason is that there is no params and finding a module is not guaranteed.
23-
* some instrumentation must have knowledge of the module, for example Quarkus+JavaTest
20+
* updates the configuration with instrumentation parameters.
21+
* returns the java tool options for reporting, or null, or error message.
2422
*/
25-
fun isApplicableFor(configuration: RunConfigurationBase<*>): Boolean
23+
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String?
2624

2725
/**
28-
* this is the method used to attach an instrumentation handler to configuration. it has all the objects necessary to resolve
29-
* parameters and the module
26+
* returns a description for logging
3027
*/
31-
fun isApplicableFor(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): Boolean
32-
33-
fun updateParameters(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters, runnerSettings: RunnerSettings?)
34-
fun getConfigurationDescription(configuration: RunConfigurationBase<*>): String
35-
fun getConfigurationType(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): RunConfigurationType
36-
fun shouldCleanConfigurationAfterStart(configuration: RunConfigurationBase<*>): Boolean
37-
fun cleanConfigurationAfterStart(configuration: RunConfigurationBase<*>)
28+
fun getConfigurationDescription(configuration: RunConfiguration, params: SimpleProgramParameters): String
3829

3930
/**
40-
* this method should only be used in combination with order, or to find any instrumentation handler that
41-
* can handle the type. used to find a configuration handler that can help
42-
* extract details from the configuration for reporting.
43-
* do not use for attaching instrumentation handler to configuration.
31+
* returns a configuration type. this is an internal type that we use for logging only
4432
*/
45-
fun isHandlingType(configuration: RunConfigurationBase<*>): Boolean
33+
fun getConfigurationType(configuration: RunConfiguration): RunConfigurationType
34+
35+
fun shouldCleanConfigurationAfterStart(configuration: RunConfiguration): Boolean
36+
37+
fun cleanConfigurationAfterStart(configuration: RunConfiguration)
4638

4739
/**
4840
* this method is relevant only for gradle and maven, others will return empty set.
4941
*/
50-
fun getTaskNames(configuration: RunConfigurationBase<*>): Set<String>
42+
fun getTaskNames(configuration: RunConfiguration): Set<String>
5143

52-
fun getBuildSystem(configuration: RunConfigurationBase<*>): BuildSystem
44+
fun getBuildSystem(configuration: RunConfiguration): BuildSystem
5345

5446
}
Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,42 @@
11
package org.digma.intellij.plugin.execution
22

3-
import com.intellij.execution.configurations.RunConfigurationBase
3+
import com.intellij.execution.configurations.RunConfiguration
44
import com.intellij.execution.configurations.RunnerSettings
55
import com.intellij.execution.configurations.SimpleProgramParameters
66
import org.digma.intellij.plugin.buildsystem.BuildSystem
77

8+
const val DIGMA_INSTRUMENTATION_ERROR = "DIGMA_INSTRUMENTATION_ERROR"
9+
810
interface RunConfigurationInstrumentationService {
911

1012
/**
11-
* not an accurate method because there is no params to resolve the module or environment variables.
12-
* should be used in combination with other conditions or when matching is not supposed to be accurate.
13-
* do not use to attach an instrumentation handler to configuration, use fot other needs when
14-
* the matching doesn't need to be accurate, like for reporting unhandled configuration.
13+
* this method decides if this service handles the configuration
14+
*/
15+
fun isApplicableFor(configuration: RunConfiguration): Boolean
16+
17+
/**
18+
* updates the configuration with instrumentation parameters.
19+
* returns the java tool options for reporting, or null if not handled.
20+
* the configuration may not be updated because we don't support everything. the service may decide not to instrument.
21+
* may return a string starting with DIGMA_INSTRUMENTATION_ERROR for reporting in case of error.
1522
*/
16-
fun isApplicableFor(configuration: RunConfigurationBase<*>): Boolean
23+
fun updateParameters(configuration: RunConfiguration, params: SimpleProgramParameters, runnerSettings: RunnerSettings?): String?
1724

1825
/**
19-
* this is the method to check for attaching a service to a configuration.
26+
* returns a description for logging
2027
*/
21-
fun isApplicableFor(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): Boolean
28+
fun getConfigurationDescription(configuration: RunConfiguration, params: SimpleProgramParameters): String
29+
30+
fun getConfigurationType(configuration: RunConfiguration): RunConfigurationType
2231

23-
fun updateParameters(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters, runnerSettings: RunnerSettings?)
24-
fun getConfigurationDescription(configuration: RunConfigurationBase<*>): String
25-
fun getConfigurationType(configuration: RunConfigurationBase<*>, params: SimpleProgramParameters): RunConfigurationType
26-
fun shouldCleanConfigurationAfterStart(configuration: RunConfigurationBase<*>): Boolean
27-
fun cleanConfigurationAfterStart(configuration: RunConfigurationBase<*>)
32+
fun shouldCleanConfigurationAfterStart(configuration: RunConfiguration): Boolean
33+
fun cleanConfigurationAfterStart(configuration: RunConfiguration)
2834

2935
/**
30-
* should be used to check if a specific service can handle this configuration type.
31-
* should not be used to check is a service can instrument a configuration because there is
32-
* no params that are used to resolve the module, some services must resolve a module to match.
36+
* this method is relevant only for gradle and maven, others will return empty set.
3337
*/
34-
fun isHandlingType(configuration: RunConfigurationBase<*>): Boolean
35-
fun getTaskNames(configuration: RunConfigurationBase<*>): Set<String>
36-
fun getBuildSystem(configuration: RunConfigurationBase<*>): BuildSystem
38+
fun getTaskNames(configuration: RunConfiguration): Set<String>
39+
40+
fun getBuildSystem(configuration: RunConfiguration): BuildSystem
3741

3842
}
Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package org.digma.intellij.plugin.execution
22

3+
4+
/**
5+
* this type is only used for logging and reporting. we don't rely on this type for any decision.
6+
*/
37
enum class RunConfigurationType {
4-
JavaRun,
8+
Java,
59
JavaTest,
6-
KotlinRun,
7-
KotlinTest,
8-
GradleRun,
9-
GradleTest,
10-
MavenRun,
11-
MavenTest,
10+
Kotlin,
11+
Gradle,
12+
Maven,
1213
Jar,
13-
TomcatForIdeaUltimate,
14-
EeAppSeverAtIdeaUltimate,
15-
OpenLiberty,
16-
Quarkus,
14+
JavaSever,
1715
Unknown;
1816
}

0 commit comments

Comments
 (0)