# SPDX-License-Identifier: SSPL-1.0
#
# The Lucenia project is source-available software: you can
# redistribute it and/or modify it under the terms of the
# Server Side Public License, version 1, as published by
# MongoDB, Inc.
#
# As per the terms of the Server Side Public License, if you
# make the functionality of this program or a modified version
# available over a network, you must make the source code
# available for download.
#
# The full text of the Server Side Public License, version 1,
# can be found at:
# https://www.mongodb.com/licensing/server-side-public-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 io.lucenia.painless.api.Augmentation matcher(int, CharSequence) @inject_constant[1="regex_limit_factor"]
  String pattern()
  String quote(String)
  String[] io.lucenia.painless.api.Augmentation split(int, CharSequence) @inject_constant[1="regex_limit_factor"]
  String[] io.lucenia.painless.api.Augmentation split(int, CharSequence,int) @inject_constant[1="regex_limit_factor"]
  Stream io.lucenia.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 io.lucenia.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)
}
