#
# 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 java.util.regex.Pattern {
# 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 org.opensearch.painless.api.Augmentation matcher(int, CharSequence) @inject_constant[1="regex_limit_factor"]
  String pattern()
  String quote(String)
  String[] org.opensearch.painless.api.Augmentation split(int, CharSequence) @inject_constant[1="regex_limit_factor"]
  String[] org.opensearch.painless.api.Augmentation split(int, CharSequence,int) @inject_constant[1="regex_limit_factor"]
  Stream org.opensearch.painless.api.Augmentation splitAsStream(int, CharSequence) @inject_constant[1="regex_limit_factor"]
}

class java.util.regex.Matcher {
  int end()
  int end(int)
  boolean find()
  boolean find(int)
  String group()
  String group(int)
  String org.opensearch.painless.api.Augmentation 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()
  # Note: Do not allowlist Matcher.reset(String), it subverts regex limiting
  int start()
  int start(int)
  Matcher useAnchoringBounds(boolean)
  Matcher usePattern(Pattern)
  Matcher useTransparentBounds(boolean)
}
