
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_swing_JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink__
#define __javax_swing_JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink__

#pragma interface

#include <javax/accessibility/AccessibleHyperlink.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class JEditorPane$JEditorPaneAccessibleHypertextSupport;
        class JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink;
      namespace text
      {
          class Element;
      }
    }
  }
}

class javax::swing::JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink : public ::javax::accessibility::AccessibleHyperlink
{

public:
  JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink(::javax::swing::JEditorPane$JEditorPaneAccessibleHypertextSupport *, ::javax::swing::text::Element *);
  virtual jboolean isValid();
  virtual jint getAccessibleActionCount();
  virtual jboolean doAccessibleAction(jint);
  virtual ::java::lang::String * getAccessibleActionDescription(jint);
  virtual ::java::lang::Object * getAccessibleActionObject(jint);
  virtual ::java::lang::Object * getAccessibleActionAnchor(jint);
  virtual jint getStartIndex();
  virtual jint getEndIndex();
public: // actually package-private
  ::javax::swing::text::Element * __attribute__((aligned(__alignof__( ::javax::accessibility::AccessibleHyperlink)))) element;
  ::javax::swing::JEditorPane$JEditorPaneAccessibleHypertextSupport * this$1;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_JEditorPane$JEditorPaneAccessibleHypertextSupport$HTMLLink__
