|
47 | 47 | */ |
48 | 48 | final public class BTraceConfigurator extends MethodVisitor { |
49 | 49 | private OnMethod om = null; |
| 50 | + private OnProbe op = null; |
50 | 51 |
|
51 | 52 | private boolean sampled = false; |
52 | 53 |
|
@@ -162,7 +163,7 @@ public void visitEnd() { |
162 | 163 | } |
163 | 164 | }; |
164 | 165 | } else if (desc.equals(ONPROBE_DESC)) { |
165 | | - final OnProbe op = new OnProbe(); |
| 166 | + op = new OnProbe(); |
166 | 167 | onProbes.add(op); |
167 | 168 | op.setTargetName(methodName); |
168 | 169 | op.setTargetDescriptor(methodDesc); |
@@ -234,64 +235,52 @@ public AnnotationVisitor visitParameterAnnotation(int parameter, final String de |
234 | 235 | AnnotationVisitor av = super.visitParameterAnnotation(parameter, desc, visible); |
235 | 236 |
|
236 | 237 | if (om != null) { |
237 | | - if (desc.equals(BTRACE_SELF_DESC)) { |
238 | | - om.setSelfParameter(parameter); |
239 | | - } else if (desc.equals(Verifier.BTRACE_PROBECLASSNAME_DESC)) { |
240 | | - om.setClassNameParameter(parameter); |
241 | | - } else if (desc.equals(Verifier.BTRACE_PROBEMETHODNAME_DESC)) { |
242 | | - om.setMethodParameter(parameter); |
243 | | - av = new AnnotationVisitor(Opcodes.ASM5, av) { |
244 | | - @Override |
245 | | - public void visit(String name, Object val) { |
246 | | - if (name.equals("fqn")) { |
247 | | - om.setMethodFqn((Boolean)val); |
248 | | - } |
249 | | - super.visit(name, val); |
250 | | - } |
| 238 | + av = setSpecialParameters(om, desc, parameter, av); |
| 239 | + } else if (op != null) { |
| 240 | + av = setSpecialParameters(op, desc, parameter, av); |
| 241 | + } |
251 | 242 |
|
252 | | - }; |
253 | | - } else if (desc.equals(BTRACE_RETURN_DESC)) { |
254 | | - if (loc.getValue() == Kind.RETURN || |
255 | | - (loc.getValue() == Kind.CALL && loc.getWhere() == Where.AFTER) || |
256 | | - (loc.getValue() == Kind.ARRAY_GET && loc.getWhere() == Where.AFTER) || |
257 | | - (loc.getValue() == Kind.FIELD_GET && loc.getWhere() == Where.AFTER) || |
258 | | - (loc.getValue() == Kind.NEW && loc.getWhere() == Where.AFTER) || |
259 | | - (loc.getValue() == Kind.NEWARRAY && loc.getWhere() == Where.AFTER)) { |
260 | | - om.setReturnParameter(parameter); |
| 243 | + return av; |
| 244 | + } |
| 245 | + |
| 246 | + private AnnotationVisitor setSpecialParameters(final SpecialParameterHolder ph, final String desc, int parameter, AnnotationVisitor av) { |
| 247 | + // for OnProbe the 'loc' variable will be null; we will need to verfiy the placement later on |
| 248 | + if (desc.equals(BTRACE_SELF_DESC)) { |
| 249 | + ph.setSelfParameter(parameter); |
| 250 | + } else if (desc.equals(Verifier.BTRACE_PROBECLASSNAME_DESC)) { |
| 251 | + ph.setClassNameParameter(parameter); |
| 252 | + } else if (desc.equals(Verifier.BTRACE_PROBEMETHODNAME_DESC)) { |
| 253 | + ph.setMethodParameter(parameter); |
| 254 | + av = new AnnotationVisitor(Opcodes.ASM5, av) { |
| 255 | + @Override |
| 256 | + public void visit(String name, Object val) { |
| 257 | + if (name.equals("fqn")) { |
| 258 | + ph.setMethodFqn((Boolean)val); |
| 259 | + } |
| 260 | + super.visit(name, val); |
261 | 261 | } |
262 | | - } else if (desc.equals(BTRACE_TARGETMETHOD_DESC)) { |
263 | | - if (loc.getValue() == Kind.CALL || |
264 | | - loc.getValue() == Kind.FIELD_GET || |
265 | | - loc.getValue() == Kind.FIELD_SET) { |
266 | | - om.setTargetMethodOrFieldParameter(parameter); |
267 | 262 |
|
268 | | - av = new AnnotationVisitor(Opcodes.ASM5, av) { |
269 | | - @Override |
270 | | - public void visit(String name, Object val) { |
271 | | - if (name.equals("fqn")) { |
272 | | - om.setTargetMethodOrFieldFqn((Boolean)val); |
273 | | - } |
274 | | - super.visit(name, val); |
275 | | - } |
| 263 | + }; |
| 264 | + } else if (desc.equals(BTRACE_RETURN_DESC)) { |
| 265 | + ph.setReturnParameter(parameter); |
| 266 | + } else if (desc.equals(BTRACE_TARGETMETHOD_DESC)) { |
| 267 | + ph.setTargetMethodOrFieldParameter(parameter); |
276 | 268 |
|
277 | | - }; |
278 | | - } |
279 | | - } else if (desc.equals(BTRACE_TARGETINSTANCE_DESC)) { |
280 | | - if (loc.getValue() == Kind.CALL || |
281 | | - loc.getValue() == Kind.FIELD_GET || |
282 | | - loc.getValue() == Kind.FIELD_SET) { |
283 | | - om.setTargetInstanceParameter(parameter); |
284 | | - } |
285 | | - } else if (desc.equals(BTRACE_DURATION_DESC)) { |
286 | | - if ((loc.getValue() == Kind.RETURN || |
287 | | - loc.getValue() == Kind.ERROR) || |
288 | | - (loc.getValue() == Kind.CALL && |
289 | | - loc.getWhere() == Where.AFTER)) { |
290 | | - om.setDurationParameter(parameter); |
| 269 | + av = new AnnotationVisitor(Opcodes.ASM5, av) { |
| 270 | + @Override |
| 271 | + public void visit(String name, Object val) { |
| 272 | + if (name.equals("fqn")) { |
| 273 | + ph.setTargetMethodOrFieldFqn((Boolean)val); |
| 274 | + } |
| 275 | + super.visit(name, val); |
291 | 276 | } |
292 | | - } |
293 | | - } |
294 | 277 |
|
| 278 | + }; |
| 279 | + } else if (desc.equals(BTRACE_TARGETINSTANCE_DESC)) { |
| 280 | + ph.setTargetInstanceParameter(parameter); |
| 281 | + } else if (desc.equals(BTRACE_DURATION_DESC)) { |
| 282 | + ph.setDurationParameter(parameter); |
| 283 | + } |
295 | 284 | return av; |
296 | 285 | } |
297 | 286 |
|
|
0 commit comments