@Override
    public void visitEnd() {
      final boolean haveCustomCreateComponents = Utils.getCustomCreateComponentCount(myRootContainer) > 0 &&
                                                 !myIgnoreCustomCreation;
      if (haveCustomCreateComponents && !myHaveCreateComponentsMethod) {
        myErrors.add(new FormErrorInfo(null, "Form contains components with Custom Create option but no createUIComponents() method"));
      }

      Method method = Method.getMethod("void " + SETUP_METHOD_NAME + " ()");
      GeneratorAdapter generator = new GeneratorAdapter(Opcodes.ACC_PRIVATE | Opcodes.ACC_SYNTHETIC, method, null, null, cv);
      if (haveCustomCreateComponents && myHaveCreateComponentsMethod) {
        generator.visitVarInsn(Opcodes.ALOAD, 0);
        int opcode = myCreateComponentsAccess == Opcodes.ACC_PRIVATE ? Opcodes.INVOKESPECIAL : Opcodes.INVOKEVIRTUAL;
        generator.visitMethodInsn(opcode, myClassName, CREATE_COMPONENTS_METHOD_NAME, "()V", false);
      }
      buildSetupMethod(generator);

      final String rootBinding = myRootContainer.getComponent(0).getBinding();
      if (rootBinding != null && myFieldDescMap.containsKey(rootBinding)) {
        buildGetRootComponenMethod();
      }

      if (myGetFontMethod != null) {
        FontPropertyCodeGenerator
          .buildGetFontMethod(new GeneratorAdapter(Opcodes.ACC_PRIVATE | Opcodes.ACC_SYNTHETIC, myGetFontMethod, null, null, cv));
      }

      for (PropertyCodeGenerator propertyCodeGenerator : myPropertyCodeGenerators.values()) {
        propertyCodeGenerator.generateClassEnd(this);
      }

      super.visitEnd();
    }
@Override
    public void visitEnd()