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; + } }