# File lib/gherkin/native/java.rb, line 11
  def native_impl(lib)
    require "#{lib}.jar"

    class << self
      def javaify(arg)
        if Array === arg
          arg.map{|a| javaify(a)}
        else
          case(arg)
          when Regexp
            java.util.regex.Pattern.compile(arg.source)
          else
            arg
          end
        end
      end

      def new(*args)
        begin
          java_class.new(*javaify(args))
        rescue ArgumentError => e
          e.message << "\n#{java_class.name}"
          raise e
        rescue NameError => e
          e.message << "\n args: #{args.inspect}" 
          raise e
        end
      end

      def ===(object)
        super || object.java_kind_of?(java_class)
      end

      def java_class
        names = self.name.split('::')
        package = Java
        names[0..-2].each do |module_name|
          package = package.__send__(module_name.downcase)
        end

        package.__send__(names[-1])
      end
    end
  end