/**
   * Visits the class.
   *
   * @param access
   * @param name
   * @param signature
   * @param superName
   * @param interfaces
   */
  public void visit(
      final int version,
      final int access,
      final String name,
      final String signature,
      final String superName,
      final String[] interfaces) {
    ExpressionContext ctx = new ExpressionContext(PointcutType.WITHIN, m_classInfo, m_classInfo);
    if (!classFilter(m_classInfo, ctx, m_ctx.getDefinitions())) {
      m_declaringTypeName = name;
      m_mixinFields = new HashMap();

      // populate with fields already present for mixins from previous weaving
      for (int i = 0; i < m_classInfo.getFields().length; i++) {
        FieldInfo fieldInfo = m_classInfo.getFields()[i];
        if (fieldInfo.getName().startsWith(MIXIN_FIELD_NAME)) {
          m_mixinFields.put(fieldInfo.getType(), fieldInfo);
        }
      }

      // add fields and method for (not already there) mixins
      addMixinMembers();
    }
    super.visit(version, access, name, signature, superName, interfaces);
  }
 @Override
 public void visit(
     final int version,
     final int access,
     final String name,
     final String signature,
     final String superName,
     final String[] interfaces) {
   Set<String> interfacesSet = new LinkedHashSet<String>();
   if (interfaces != null) Collections.addAll(interfacesSet, interfaces);
   for (Class extraInterface : classList) {
     if (extraInterface.isInterface())
       interfacesSet.add(BytecodeHelper.getClassInternalName(extraInterface));
   }
   final boolean addGroovyObjectSupport = !GroovyObject.class.isAssignableFrom(superClass);
   if (addGroovyObjectSupport) interfacesSet.add("groovy/lang/GroovyObject");
   super.visit(
       V1_5,
       ACC_PUBLIC,
       proxyName,
       signature,
       BytecodeHelper.getClassInternalName(superClass),
       interfacesSet.toArray(new String[interfacesSet.size()]));
   addDelegateFields();
   if (addGroovyObjectSupport) {
     createGroovyObjectSupport();
   }
   for (Class clazz : classList) {
     visitClass(clazz);
   }
 }
 public void visit(
     final int version,
     final int access,
     final String name,
     final String signature,
     final String superName,
     final String[] interfaces) {
   this.cname = name;
   super.visit(version, access, name, signature, superName, interfaces);
 }
 @Override
 public void visit(
     int version,
     int access,
     String name,
     String signature,
     String superName,
     String[] interfaces) {
   className = name;
   super.visit(version, access, name, signature, superName, interfaces);
 }
 public void visit(
     int version,
     int access,
     String name,
     String signature,
     String superName,
     String[] interfaces) {
   super.visit(version, access, name, signature, superName, interfaces);
   myClassName = name;
   mySuperName = superName;
 }
  /** Creates a new clinit method and adds mixin instantiation if it does not exist. */
  public void visitEnd() {
    if (m_isAdvised && !m_hasClinit) {
      // add the <clinit> method
      MethodVisitor mv =
          cv.visitMethod(
              ACC_STATIC, CLINIT_METHOD_NAME, NO_PARAM_RETURN_VOID_SIGNATURE, null, null);
      for (Iterator i4 = m_mixinFields.values().iterator(); i4.hasNext(); ) {
        MixinFieldInfo fieldInfo = (MixinFieldInfo) i4.next();
        if (fieldInfo.isStatic) {
          initializeStaticMixinField(mv, fieldInfo);
        }
      }

      mv.visitInsn(RETURN);
      mv.visitMaxs(0, 0);
    }
    super.visitEnd();
  }
 @Override
 public void visitEnd() {
   super.visitEnd();
 }
 public void visitInnerClass(String name, String outerName, String innerName, int access) {
   super.visitInnerClass(name, outerName, innerName, access);
   if (myClassName.equals(name)) {
     myIsNotStaticInner = (access & Opcodes.ACC_STATIC) == 0;
   }
 }