code: private Icon getIcon(AbstractButton b, Icon specificIcon, Icon defaultIcon, int state) {
          Icon icon = specificIcon;
  
          if (icon == null) {
              if (defaultIcon instanceof UIResource) {
                  icon = getSynthIcon(b, state);
                  if (icon == null) {
                      icon = defaultIcon;
                  }
              } else {
                  icon = defaultIcon;
              }
          }
  
          return icon;
      }
docs: This method will return the icon that should be used for a button. We
  only want to use the synth icon defined by the style if the specific icon
  has not been defined for the button state and the backup icon is a
  UIResource (we set it, not the developer).
  
  @param  b            button
  @param  specificIcon icon returned from the button for the specific state
  @param  defaultIcon  fallback icon
  @param  state        the synth state of the button
  
  @return the icon.