#
# Licensed to Elasticsearch under one or more contributor
# license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright
# ownership. Elasticsearch licenses this file to you under
# the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

#
# Painless definition file. This defines the hierarchy of classes,
# what methods and fields they have, etc.
#

class Pattern -> java.util.regex.Pattern extends Object {
# Pattern compile(String)   Intentionally not included. We don't want dynamic patterns because they allow regexes to be generated per time
#                           the script is run which is super slow. LRegex generates code that calls this method but it skips these checks.
  Predicate asPredicate()
  int flags()
  Matcher matcher(CharSequence)
  String pattern()
  String quote(String)
  String[] split(CharSequence)
  String[] split(CharSequence,int)
  Stream splitAsStream(CharSequence)
}

class Matcher -> java.util.regex.Matcher extends Object {
  int end()
  int end(int)
  boolean find()
  boolean find(int)
  String group()
  String group(int)
  String namedGroup*(String)
  int groupCount()
  boolean hasAnchoringBounds()
  boolean hasTransparentBounds()
  boolean hitEnd()
  boolean lookingAt()
  boolean matches()
  Pattern pattern()
  String quoteReplacement(String)
  Matcher region(int,int)
  int regionEnd()
  int regionStart()
  String replaceAll(String)
  String replaceFirst(String)
  boolean requireEnd()
  Matcher reset()
  int start()
  int start(int)
  Matcher useAnchoringBounds(boolean)
  Matcher usePattern(Pattern)
  Matcher useTransparentBounds(boolean)
}
