13
13
14
14
import io .opentelemetry .javaagent .extension .instrumentation .InstrumentationModule ;
15
15
import io .opentelemetry .javaagent .extension .instrumentation .TypeInstrumentation ;
16
+ import io .opentelemetry .javaagent .extension .instrumentation .internal .ExperimentalInstrumentationModule ;
16
17
import io .opentelemetry .javaagent .tooling .HelperInjector ;
17
18
import io .opentelemetry .javaagent .tooling .TransformSafeLogger ;
18
19
import io .opentelemetry .javaagent .tooling .Utils ;
19
20
import io .opentelemetry .javaagent .tooling .bytebuddy .LoggingFailSafeMatcher ;
20
21
import io .opentelemetry .javaagent .tooling .config .AgentConfig ;
21
22
import io .opentelemetry .javaagent .tooling .field .VirtualFieldImplementationInstaller ;
22
23
import io .opentelemetry .javaagent .tooling .field .VirtualFieldImplementationInstallerFactory ;
24
+ import io .opentelemetry .javaagent .tooling .instrumentation .indy .ClassInjectorImpl ;
23
25
import io .opentelemetry .javaagent .tooling .instrumentation .indy .IndyModuleRegistry ;
24
26
import io .opentelemetry .javaagent .tooling .instrumentation .indy .IndyTypeTransformerImpl ;
25
27
import io .opentelemetry .javaagent .tooling .instrumentation .indy .PatchByteCodeVersionTransformer ;
@@ -78,8 +80,25 @@ private AgentBuilder installIndyModule(
78
80
79
81
IndyModuleRegistry .registerIndyModule (instrumentationModule );
80
82
83
+ HelperResourceBuilderImpl helperResourceBuilder = new HelperResourceBuilderImpl ();
84
+ instrumentationModule .registerHelperResources (helperResourceBuilder );
85
+
86
+ ClassInjectorImpl injectedClassesCollector = new ClassInjectorImpl (instrumentationModule );
87
+ if (instrumentationModule instanceof ExperimentalInstrumentationModule ) {
88
+ ((ExperimentalInstrumentationModule ) instrumentationModule )
89
+ .injectClasses (injectedClassesCollector );
90
+ }
91
+
92
+ AgentBuilder .Transformer helperInjector =
93
+ new HelperInjector (
94
+ instrumentationModule .instrumentationName (),
95
+ injectedClassesCollector .getClassesToInject (),
96
+ helperResourceBuilder .getResources (),
97
+ instrumentationModule .getClass ().getClassLoader (),
98
+ instrumentation );
99
+
81
100
// TODO (Jonas): Adapt MuzzleMatcher to use the same type lookup strategy as the
82
- // InstrumentationModuleClassLoader
101
+ // InstrumentationModuleClassLoader (see IndyModuleTypePool)
83
102
// MuzzleMatcher muzzleMatcher = new MuzzleMatcher(logger, instrumentationModule, config);
84
103
VirtualFieldImplementationInstaller contextProvider =
85
104
virtualFieldInstallerFactory .create (instrumentationModule );
@@ -88,7 +107,8 @@ private AgentBuilder installIndyModule(
88
107
for (TypeInstrumentation typeInstrumentation : instrumentationModule .typeInstrumentations ()) {
89
108
AgentBuilder .Identified .Extendable extendableAgentBuilder =
90
109
setTypeMatcher (agentBuilder , instrumentationModule , typeInstrumentation )
91
- .transform (new PatchByteCodeVersionTransformer ());
110
+ .transform (new PatchByteCodeVersionTransformer ())
111
+ .transform (helperInjector );
92
112
93
113
// TODO (Jonas): we are not calling
94
114
// contextProvider.rewriteVirtualFieldsCalls(extendableAgentBuilder) anymore
0 commit comments