@Override
  public boolean generateCustomSetValue(final LwComponent lwComponent,
                                        final InstrumentationClassFinder.PseudoClass componentClass,
                                        final LwIntrospectedProperty property,
                                        final GeneratorAdapter generator,
                                        GetFontMethodProvider fontMethodProvider,
                                        final int componentLocal,
                                        final String formClassName) throws IOException, ClassNotFoundException {
    StringDescriptor propertyValue = (StringDescriptor)lwComponent.getPropertyValue(property);
    String key = propertyValue.getKey();

    if (key != null) {
      propertyValue.setFormClass(formClassName);
    }

    if (!"text".equals(property.getName())) {
      return false;
    }

    InstrumentationClassFinder.PseudoClass abstractButtonClass = componentClass.getFinder().loadClass(AbstractButton.class.getName());
    InstrumentationClassFinder.PseudoClass jLabelClass = componentClass.getFinder().loadClass(JLabel.class.getName());
    if (!(abstractButtonClass.isAssignableFrom(componentClass) || jLabelClass.isAssignableFrom(componentClass))) {
      return false;
    }

    if (key == null) {
      String value = propertyValue.getValue();
      SupportCode.TextWithMnemonic textWithMnemonic = value == null ? null : SupportCode.parseText(value);
      if (textWithMnemonic == null || textWithMnemonic.myMnemonicIndex < 0) {
        return false;
      }

      generator.loadLocal(componentLocal);
      generator.push(textWithMnemonic.myText);
      generator.invokeVirtual(Type.getType(componentClass.getDescriptor()),
                              new Method(property.getWriteMethodName(), Type.VOID_TYPE, new Type[]{stringType}));

      String setMnemonicMethodName;
      if (abstractButtonClass.isAssignableFrom(componentClass)) {
        setMnemonicMethodName = "setMnemonic";
      }
      else {
        setMnemonicMethodName = "setDisplayedMnemonic";
      }

      generator.loadLocal(componentLocal);
      generator.push(textWithMnemonic.getMnemonicChar());
      generator.invokeVirtual(Type.getType(componentClass.getDescriptor()),
                              new Method(setMnemonicMethodName, Type.VOID_TYPE, new Type[]{Type.CHAR_TYPE}));

      if (myHaveSetDisplayedMnemonicIndex) {
        generator.loadLocal(componentLocal);
        generator.push(textWithMnemonic.myMnemonicIndex);
        generator.invokeVirtual(Type.getType(componentClass.getDescriptor()),
                                new Method("setDisplayedMnemonicIndex", Type.VOID_TYPE, new Type[]{Type.INT_TYPE}));
      }
    }
    else {
      Type formClass = Type.getType("L" + formClassName + ";");

      generator.loadThis();
      generator.loadLocal(componentLocal);

      generateGetBundleString(propertyValue, generator);

      Method method;
      if (abstractButtonClass.isAssignableFrom(componentClass)) {
        myClassesRequiringLoadButtonText.add(formClassName);
        method = myLoadButtonTextMethod;
      }
      else {
        myClassesRequiringLoadLabelText.add(formClassName);
        method = myLoadLabelTextMethod;
      }
      generator.invokeVirtual(formClass, method);
    }
    return true;
  }
@Override
  public boolean generateCustomSetValue(final LwComponent lwComponent,
                                        final InstrumentationClassFinder.PseudoClass componentClass,
                                        final LwIntrospectedProperty property,
                                        final GeneratorAdapter generator,
                                        GetFontMethodProvider fontMethodProvider,
                                        final int componentLocal,
                                        final String formClassName)