Skip to content

Commit 293a68e

Browse files
authored
Merge branch 'master' into andrea.marziali/jetty-websocket
2 parents cc3d6a6 + 5edd9fd commit 293a68e

File tree

106 files changed

+1613
-712
lines changed

Some content is hidden

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

106 files changed

+1613
-712
lines changed

buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/AdviceGeneratorImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static com.github.javaparser.ast.Modifier.Keyword.PUBLIC;
44
import static datadog.trace.plugin.csi.impl.CallSiteFactory.typeResolver;
5+
import static datadog.trace.plugin.csi.util.CallSiteConstants.ADVICE_TYPE_CLASS;
56
import static datadog.trace.plugin.csi.util.CallSiteConstants.AUTO_SERVICE_FQDN;
67
import static datadog.trace.plugin.csi.util.CallSiteConstants.CALL_SITES_CLASS;
78
import static datadog.trace.plugin.csi.util.CallSiteConstants.CALL_SITES_FQCN;
@@ -185,20 +186,24 @@ private void addAdviceLambda(
185186
final MethodType pointCut = spec.getPointcut();
186187
final BlockStmt adviceBody = new BlockStmt();
187188
final Expression advice;
189+
final String type;
188190
if (spec.isInvokeDynamic()) {
189191
advice = invokeDynamicAdviceSignature(adviceBody);
190192
} else {
191193
advice = invokeAdviceSignature(adviceBody);
192194
}
193195
if (spec instanceof BeforeSpecification) {
196+
type = "BEFORE";
194197
writeStackOperations(spec, adviceBody);
195198
writeAdviceMethodCall(spec, adviceBody);
196199
writeOriginalMethodCall(spec, adviceBody);
197200
} else if (spec instanceof AfterSpecification) {
201+
type = "AFTER";
198202
writeStackOperations(spec, adviceBody);
199203
writeOriginalMethodCall(spec, adviceBody);
200204
writeAdviceMethodCall(spec, adviceBody);
201205
} else {
206+
type = "AROUND";
202207
writeAdviceMethodCall(spec, adviceBody);
203208
}
204209
body.addStatement(
@@ -207,6 +212,10 @@ private void addAdviceLambda(
207212
.setName("addAdvice")
208213
.setArguments(
209214
new NodeList<>(
215+
new FieldAccessExpr()
216+
.setScope(
217+
new TypeExpr(new ClassOrInterfaceType().setName(ADVICE_TYPE_CLASS)))
218+
.setName(type),
210219
new StringLiteralExpr(pointCut.getOwner().getInternalName()),
211220
new StringLiteralExpr(pointCut.getMethodName()),
212221
new StringLiteralExpr(pointCut.getMethodType().getDescriptor()),

buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/impl/ext/IastExtension.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,19 +364,19 @@ private static LambdaExpr findAdviceLambda(
364364
final MethodType pointcut = spec.getPointcut();
365365
for (final MethodCallExpr add : addAdvices) {
366366
final NodeList<Expression> arguments = add.getArguments();
367-
final String owner = arguments.get(0).asStringLiteralExpr().asString();
367+
final String owner = arguments.get(1).asStringLiteralExpr().asString();
368368
if (!owner.equals(pointcut.getOwner().getInternalName())) {
369369
continue;
370370
}
371-
final String method = arguments.get(1).asStringLiteralExpr().asString();
371+
final String method = arguments.get(2).asStringLiteralExpr().asString();
372372
if (!method.equals(pointcut.getMethodName())) {
373373
continue;
374374
}
375-
final String description = arguments.get(2).asStringLiteralExpr().asString();
375+
final String description = arguments.get(3).asStringLiteralExpr().asString();
376376
if (!description.equals(pointcut.getMethodType().getDescriptor())) {
377377
continue;
378378
}
379-
return arguments.get(3).asLambdaExpr();
379+
return arguments.get(4).asLambdaExpr();
380380
}
381381
throw new IllegalArgumentException("Cannot find lambda expression for pointcut " + pointcut);
382382
}

buildSrc/call-site-instrumentation-plugin/src/main/java/datadog/trace/plugin/csi/util/CallSiteConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ private CallSiteConstants() {}
3030

3131
public static final String HAS_ENABLED_PROPERTY_CLASS = CALL_SITES_CLASS + ".HasEnabledProperty";
3232

33+
public static final String ADVICE_TYPE_CLASS = "AdviceType";
34+
3335
public static final String STACK_DUP_MODE_CLASS = "StackDupMode";
3436

3537
public static final String METHOD_HANDLER_CLASS = "MethodHandler";

buildSrc/call-site-instrumentation-plugin/src/test/groovy/datadog/trace/plugin/csi/impl/AdviceGeneratorTest.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ final class AdviceGeneratorTest extends BaseCsiPluginTest {
4444
interfaces(CallSites)
4545
helpers(BeforeAdvice)
4646
advices(0) {
47+
type("BEFORE")
4748
pointcut('java/security/MessageDigest', 'getInstance', '(Ljava/lang/String;)Ljava/security/MessageDigest;')
4849
statements(
4950
'handler.dupParameters(descriptor, StackDupMode.COPY);',
@@ -76,6 +77,7 @@ final class AdviceGeneratorTest extends BaseCsiPluginTest {
7677
interfaces(CallSites)
7778
helpers(AroundAdvice)
7879
advices(0) {
80+
type("AROUND")
7981
pointcut('java/lang/String', 'replaceAll', '(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;')
8082
statements(
8183
'handler.advice("datadog/trace/plugin/csi/impl/AdviceGeneratorTest$AroundAdvice", "around", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");'
@@ -106,6 +108,7 @@ final class AdviceGeneratorTest extends BaseCsiPluginTest {
106108
interfaces(CallSites)
107109
helpers(AfterAdvice)
108110
advices(0) {
111+
type("AFTER")
109112
pointcut('java/lang/String', 'concat', '(Ljava/lang/String;)Ljava/lang/String;')
110113
statements(
111114
'handler.dupInvoke(owner, descriptor, StackDupMode.COPY);',

buildSrc/call-site-instrumentation-plugin/src/test/groovy/datadog/trace/plugin/csi/impl/assertion/AdviceAssert.groovy

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
package datadog.trace.plugin.csi.impl.assertion
22

33
class AdviceAssert {
4+
protected String type
45
protected String owner
56
protected String method
67
protected String descriptor
78
protected Collection<String> statements
89

10+
void type(String type) {
11+
assert type == this.type
12+
}
13+
914
void pointcut(String owner, String method, String descriptor) {
1015
assert owner == this.owner
1116
assert method == this.method

buildSrc/call-site-instrumentation-plugin/src/test/groovy/datadog/trace/plugin/csi/impl/assertion/AssertBuilder.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ class AssertBuilder<C extends CallSiteAssert> {
8383
return getMethodCalls(acceptMethod).findAll {
8484
it.nameAsString == 'addAdvice'
8585
}.collect {
86-
def (owner, method, descriptor) = it.arguments.subList(0, 3)*.asStringLiteralExpr()*.asString()
87-
final handlerLambda = it.arguments[3].asLambdaExpr()
86+
final adviceType = it.arguments.get(0).asFieldAccessExpr().getName()
87+
def (owner, method, descriptor) = it.arguments.subList(1, 4)*.asStringLiteralExpr()*.asString()
88+
final handlerLambda = it.arguments[4].asLambdaExpr()
8889
final advice = handlerLambda.body.asBlockStmt().statements*.toString()
8990
return new AdviceAssert([
91+
type : adviceType,
9092
owner : owner,
9193
method : method,
9294
descriptor: descriptor,

buildSrc/call-site-instrumentation-plugin/src/test/groovy/datadog/trace/plugin/csi/impl/ext/IastExtensionTest.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ class IastExtensionTest extends BaseCsiPluginTest {
217217
return getMethodCalls(acceptMethod).findAll {
218218
it.nameAsString == 'addAdvice'
219219
}.collect {
220-
def (owner, method, descriptor) = it.arguments.subList(0, 3)*.asStringLiteralExpr()*.asString()
221-
final handlerLambda = it.arguments[3].asLambdaExpr()
220+
def (owner, method, descriptor) = it.arguments.subList(1, 4)*.asStringLiteralExpr()*.asString()
221+
final handlerLambda = it.arguments[4].asLambdaExpr()
222222
final statements = handlerLambda.body.asBlockStmt().statements
223223
final instrumentedStmt = statements.get(0).asIfStmt()
224224
final executedStmt = statements.get(1).asIfStmt()

components/context/src/main/java/datadog/context/Context.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public interface Context {
4242
* @return the initial local context that all contexts extend.
4343
*/
4444
static Context root() {
45-
return manager().root();
45+
return EmptyContext.INSTANCE;
4646
}
4747

4848
/**

components/context/src/main/java/datadog/context/ContextManager.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,10 @@
22

33
/** Manages context across execution units. */
44
public interface ContextManager {
5-
/**
6-
* Returns the root context.
7-
*
8-
* @return the initial local context that all contexts extend.
9-
*/
10-
Context root();
11-
125
/**
136
* Returns the context attached to the current execution unit.
147
*
15-
* @return the attached context; {@link #root()} if there is none.
8+
* @return the attached context; {@link Context#root()} if there is none.
169
*/
1710
Context current();
1811

@@ -28,7 +21,7 @@ public interface ContextManager {
2821
* Swaps the given context with the one attached to current execution unit.
2922
*
3023
* @param context the context to swap.
31-
* @return the previously attached context; {@link #root()} if there was none.
24+
* @return the previously attached context; {@link Context#root()} if there was none.
3225
*/
3326
Context swap(Context context);
3427

components/context/src/main/java/datadog/context/ThreadLocalContextManager.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ final class ThreadLocalContextManager implements ContextManager {
55
private static final ThreadLocal<Context[]> CURRENT_HOLDER =
66
ThreadLocal.withInitial(() -> new Context[] {EmptyContext.INSTANCE});
77

8-
@Override
9-
public Context root() {
10-
return EmptyContext.INSTANCE;
11-
}
12-
138
@Override
149
public Context current() {
1510
return CURRENT_HOLDER.get()[0];

0 commit comments

Comments
 (0)