public static Type getArrayType(int arrayOpcode) { switch (arrayOpcode) { case IALOAD: case IASTORE: return Type.getType("[I"); case BALOAD: case BASTORE: return Type.getType("[B"); case AALOAD: case AASTORE: return objectArrayType; case CALOAD: case CASTORE: return Type.getType("[C"); case FALOAD: case FASTORE: return Type.getType("[F"); case SALOAD: case SASTORE: return Type.getType("[S"); case LALOAD: case LASTORE: return Type.getType("[J"); case DALOAD: case DASTORE: return Type.getType("[D"); default: throw new RuntimeException("invalid array opcode"); } }
public void visitLdcInsn(Object cst) { if (cst instanceof Type) { String name = ((Type)cst).getInternalName(); if (name.equals(oldName)) { cst = Type.getType(newNameDesc); } } super.visitLdcInsn(cst); }
String annoName = Type.getType(desc).getClassName(); for (String name : annotationClasses) { if (annoName.equals(name)) {
@Override public void visitLocalVariable( final String name, final String desc, final String signature, final Label start, final Label end, final int index) { int newIndex = remap(index, Type.getType(desc)); mv.visitLocalVariable(name, desc, signature, start, end, newIndex); }
public AnnotationVisitor visitAnnotation(String annoDesc, boolean visible) { for (OnMethod om : applicableOnMethods) { String extAnnoName = Type.getType(annoDesc).getClassName(); String annoName = om.getMethod(); if (annoName.length() > 0 && annoName.charAt(0) == '@') { annoName = annoName.substring(1); if (annoName.length() == 0) { continue; } if (REGEX_SPECIFIER.matcher(annoName).matches()) { annoName = annoName.substring(1, annoName.length() - 1); try { if (extAnnoName.matches(annoName)) { mv = instrumentorFor(om, mv, lvs, tsIndex, access, name, desc); } } catch (PatternSyntaxException pse) { reportPatternSyntaxException(extAnnoName); } } else if (annoName.equals(extAnnoName)) { mv = instrumentorFor(om, mv, lvs, tsIndex, access, name, desc); } } } return mv.visitAnnotation(annoDesc, visible); } };
public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationVisitor av = super.visitAnnotation(desc, visible); String extName = Type.getType(desc).getClassName(); for (OnMethod om : onMethods) { String probeClazz = om.getClazz(); if (probeClazz.length() > 0 && probeClazz.charAt(0) == '@') { probeClazz = probeClazz.substring(1); if (probeClazz.length() == 0) { continue; } if (REGEX_SPECIFIER.matcher(probeClazz).matches()) { probeClazz = probeClazz.substring(1, probeClazz.length() - 1); try { if (extName.matches(probeClazz)) { applicableOnMethods.add(om); } } catch (PatternSyntaxException pse) { reportPatternSyntaxException(probeClazz); } } else if (probeClazz.equals(extName)) { applicableOnMethods.add(om); } } } return av; }
private int generateClinit(MethodVisitor mv) { Type clazz = Type.getType("L" + cname + ";"); // the client name (the BTrace script class name) mv.visitLdcInsn(runtime); // the name of the currently processed class mv.visitLdcInsn(clazz); // NOI18N // invocatio nof BTraceRuntime.retransform() method mv.visitMethodInsn(Opcodes.INVOKESTATIC, Type.getInternalName(BTraceRuntime.class), "retransform", "(Ljava/lang/String;Ljava/lang/Class;)V"); // NOI18N return clazz.getSize() + Type.getType(String.class).getSize(); } }
private void generateThreadLocalPut(FieldDescriptor fd) { if (isClassInitializer) { super.visitVarInsn(Type.getType(fd.desc).getOpcode(Opcodes.ISTORE), fd.var); fd.initialized = true; } else { String fieldName = BTRACE_FIELD_PREFIX + fd.name; box(fd.desc); super.visitFieldInsn(GETSTATIC, className, fieldName, JAVA_LANG_THREAD_LOCAL_DESC); visitInsn(SWAP); visitMethodInsn(INVOKEVIRTUAL, JAVA_LANG_THREAD_LOCAL, JAVA_LANG_THREAD_LOCAL_SET, JAVA_LANG_THREAD_LOCAL_SET_DESC); } }
private void generateThreadLocalGet(FieldDescriptor fd) { if (isClassInitializer) { if (fd.initialized) { super.visitVarInsn(Type.getType(fd.desc).getOpcode(Opcodes.ILOAD), fd.var); } else if (fd.value != null) { visitLdcInsn(fd.value); } else { defaultValue(fd.desc); } } else { String fieldName = BTRACE_FIELD_PREFIX + fd.name; super.visitFieldInsn(GETSTATIC, className, fieldName, JAVA_LANG_THREAD_LOCAL_DESC); visitMethodInsn(INVOKEVIRTUAL, JAVA_LANG_THREAD_LOCAL, JAVA_LANG_THREAD_LOCAL_GET, JAVA_LANG_THREAD_LOCAL_GET_DESC); unbox(fd.desc); } }
@Override public void visitEnd() { if (isExtension) { MethodVisitor mv = visitMethod(Opcodes.ACC_STATIC, CLINIT, "()V", null, null); mv.visitCode(); for(InitializerBlock ib : initBlocks) { ib.apply(mv); } mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(Type.getType(BTraceRuntimeBridge.class).getSize(), 0); mv.visitEnd(); } super.visitEnd(); } }
if (!(TypeUtils.isCompatible(actionArgTypes[om.getTargetMethodOrFieldParameter()], Type.getType(String.class)))) { System.err.println("Invalid @CalledMethod parameter. Expected " + Type.getType(String.class) + ", received " + actionArgTypes[om.getTargetMethodOrFieldParameter()]); return INVALID; System.err.println("Invalid @CalledInstance parameter. Expected " + Type.getType(Object.class) + ", received " + actionArgTypes[om.getTargetInstanceParameter()]); return INVALID; if (!(TypeUtils.isCompatible(actionArgTypes[om.getClassNameParameter()], Type.getType(String.class)))) { return INVALID; if (!(TypeUtils.isCompatible(actionArgTypes[om.getMethodParameter()], Type.getType(String.class)))) { return INVALID;
for (FieldDescriptor fd : threadLocalFields.values()) { fd.var = nextVar; nextVar += Type.getType(fd.desc).getSize();
@Override protected void onAfterPutField(int opcode, String owner, String name, String desc) { if (om.getTargetInstanceParameter() != -1 && isStaticAccess) { return; } if (where == Where.AFTER && matches(targetClassName, owner.replace('/', '.')) && matches(targetFieldName, name)) { Type fieldType = Type.getType(desc); addExtraTypeInfo(om.getSelfParameter(), Type.getObjectType(className)); ValidationResult vr = validateArguments(om, isStatic(), actionArgTypes, new Type[]{fieldType}); if (vr.isValid()) { lvs.freeze(); try { loadArguments( new LocalVarArgProvider(vr.getArgIdx(0), fieldType, fldValueIndex), new LocalVarArgProvider(om.getTargetInstanceParameter(), TypeUtils.objectType, calledInstanceIndex), new ConstantArgProvider(om.getTargetMethodOrFieldParameter(), targetFieldName), new ConstantArgProvider(om.getClassNameParameter(), className.replace("/", ".")), new ConstantArgProvider(om.getMethodParameter(), getName(om.isMethodFqn())), new LocalVarArgProvider(om.getSelfParameter(), Type.getObjectType(className), 0)); invokeBTraceAction(this, om); } finally { lvs.unfreeze(); } } } } };// </editor-fold>
case '[': case 'L': super.visitTypeInsn(CHECKCAST, Type.getType(desc).getInternalName()); break; case 'Z':
&& matches(targetFieldName, name)) { Type fldType = Type.getType(desc); addExtraTypeInfo(om.getSelfParameter(), Type.getObjectType(className)); if (where == Where.AFTER) {
&& matches(targetClassName, owner.replace('/', '.')) && matches(targetFieldName, name)) { Type fldType = Type.getType(desc);
&& matches(targetFieldName, name)) { Type fieldType = Type.getType(desc);