From 021384aac0579df20cbc2f5981c7a36652fec6cd Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 27 Jul 2021 15:30:45 +0200 Subject: [PATCH] [jOOQ/jOOQ#8205] Use JDK 9 Matcher.replaceAll(Function) instead of Matcher.replaceAll(String) where possible --- .../org/jooq/impl/DefaultRenderContext.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Tools.java | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index 9e2feda40d..ee54ea1d8c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -413,7 +413,7 @@ class DefaultRenderContext extends AbstractContext implements Ren @Override public final RenderContext sql(String s, boolean literal) { if (!literal) - s = NEWLINE.matcher(s).replaceAll("$0" + indentation()); + s = Tools.replaceAll(s, NEWLINE.matcher(s), r -> r.group() + indentation()); if (stringLiteral()) s = StringUtils.replace(s, "'", stringLiteralEscapedApos); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 07a239f783..bb93ccc6e2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -223,6 +223,7 @@ import java.util.function.Function; import java.util.function.IntFunction; import java.util.function.Predicate; import java.util.function.Supplier; +import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.IntStream; @@ -6382,4 +6383,29 @@ final class Tools { static final String stringLiteral(String string) { return "\"" + string.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n\" + \n\"") + "\""; } + + /** + * Access to the JDK 9 {@link Matcher#replaceAll(Function)} function. + */ + static final String replaceAll(String string, Matcher matcher, Function replacer) { + + if (true) + return matcher.replaceAll(replacer); + + + // Java 8 version + boolean find = matcher.find(); + if (find) { + StringBuffer sb = new StringBuffer(); + + do + matcher.appendReplacement(sb, replacer.apply(matcher)); + while (find = matcher.find()); + + matcher.appendTail(sb); + return sb.toString(); + } + + return string; + } }