class TextProperty extends StringProperty implements DocumentListener, PropertyChangeListener,
                                                                  com.intellij.openapi.editor.event.DocumentListener {

  @NotNull
  @Override
  public String get() {
    if (myComponent instanceof JTextComponent) {
      return ((JTextComponent)myComponent).getText();
    }
    else if (myComponent instanceof AbstractButton) {
      return ((AbstractButton)myComponent).getText();
    }
    else if (myComponent instanceof JLabel) {
      return ((JLabel)myComponent).getText();
    }
    else if (myComponent instanceof LabelWithEditButton) {
      return ((LabelWithEditButton)myComponent).getText();
    }
    else if (myComponent instanceof EditorComboBox) {
      return ((EditorComboBox)myComponent).getText();
    }
    else if (myComponent instanceof EditorTextField) {
      return ((EditorTextField)myComponent).getText();
    }
    else {
      throw new IllegalStateException("Unexpected text component type: " + myComponent.getClass().getSimpleName());
    }
  }

  public  TextProperty(@NotNull JTextComponent textComponent);
  public  TextProperty(@NotNull AbstractButton button);
  public  TextProperty(@NotNull JLabel label);
  public  TextProperty(@NotNull LabelWithEditButton editLabel);
  public  TextProperty(@NotNull EditorComboBox editorComboBox);
  public  TextProperty(@NotNull EditorTextField editorTextField);

}