@Override public void visitFieldInsn(final int opcode, final String owner, final String name, final String desc) { String fieldSignature = SignatureHelper.getFieldSignature(name, desc); TypeCache.CachedType targetType = visitorHelper.resolveType(SignatureHelper.getObjectType(owner), containingType); FieldDescriptor fieldDescriptor = visitorHelper.getFieldDescriptor(targetType, fieldSignature); switch (opcode) { case Opcodes.GETFIELD: case Opcodes.GETSTATIC: visitorHelper.addReads(methodDescriptor, lineNumber, fieldDescriptor); break; case Opcodes.PUTFIELD: case Opcodes.PUTSTATIC: visitorHelper.addWrites(methodDescriptor, lineNumber, fieldDescriptor); break; } }
@Override public void visitEnum(final String name, final String desc, final String value) { EnumValueDescriptor valueDescriptor = createValue(EnumValueDescriptor.class, name); TypeCache.CachedType cachedTypeDescriptor = visitorHelper.resolveType(SignatureHelper.getType(desc), containingType); FieldDescriptor fieldDescriptor = visitorHelper.getFieldDescriptor(cachedTypeDescriptor, SignatureHelper.getFieldSignature(value, desc)); valueDescriptor.setType(visitorHelper.resolveType(Enum.class.getName(), containingType).getTypeDescriptor()); valueDescriptor.setValue(fieldDescriptor); addValue(name, valueDescriptor); }
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { if (visitorHelper.getClassModelConfiguration().isMethodDeclaresVariable() && !THIS.equals(name)) { final VariableDescriptor variableDescriptor = visitorHelper.getVariableDescriptor(name, SignatureHelper.getFieldSignature(name, desc)); if (signature == null) { TypeDescriptor type = visitorHelper.resolveType(SignatureHelper.getType((desc)), containingType).getTypeDescriptor(); variableDescriptor.setType(type); } else { new SignatureReader(signature).accept(new AbstractTypeSignatureVisitor(containingType, visitorHelper) { @Override public SignatureVisitor visitArrayType() { return dependentTypeSignatureVisitor; } @Override public SignatureVisitor visitTypeArgument(char wildcard) { return dependentTypeSignatureVisitor; } @Override public void visitEnd(TypeDescriptor resolvedTypeDescriptor) { variableDescriptor.setType(resolvedTypeDescriptor); } }); } methodDescriptor.getVariables().add(variableDescriptor); } }
@Override public FieldVisitor visitField(final int access, final String name, final String desc, final String signature, final Object value) { final FieldDescriptor fieldDescriptor = visitorHelper.getFieldDescriptor(cachedType, SignatureHelper.getFieldSignature(name, desc)); fieldDescriptor.setName(name); fieldDescriptor.setVolatile(hasFlag(access, Opcodes.ACC_VOLATILE));