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

#ifndef __gnu_xml_xpath_FunctionCall__
#define __gnu_xml_xpath_FunctionCall__

#pragma interface

#include <gnu/xml/xpath/Expr.h>
extern "Java"
{
  namespace gnu
  {
    namespace xml
    {
      namespace xpath
      {
          class Expr;
          class FunctionCall;
      }
    }
  }
  namespace javax
  {
    namespace xml
    {
      namespace namespace$
      {
          class QName;
      }
      namespace xpath
      {
          class XPathFunctionResolver;
      }
    }
  }
  namespace org
  {
    namespace w3c
    {
      namespace dom
      {
          class Node;
      }
    }
  }
}

class gnu::xml::xpath::FunctionCall : public ::gnu::xml::xpath::Expr
{

public:
  FunctionCall(::javax::xml::xpath::XPathFunctionResolver *, ::java::lang::String *);
  FunctionCall(::javax::xml::xpath::XPathFunctionResolver *, ::java::lang::String *, ::java::util::List *);
  ::java::lang::Object * evaluate(::org::w3c::dom::Node *, jint, jint);
  ::gnu::xml::xpath::Expr * clone(::java::lang::Object *);
  jboolean references(::javax::xml::namespace$::QName *);
  ::java::lang::String * toString();
public: // actually package-private
  ::javax::xml::xpath::XPathFunctionResolver * __attribute__((aligned(__alignof__( ::gnu::xml::xpath::Expr)))) resolver;
  ::java::lang::String * name;
  ::java::util::List * args;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_xml_xpath_FunctionCall__
