From 5380ed5ec16662db86653320924e46301e6fb6fe Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 30 Mar 2020 14:37:11 +0200 Subject: [PATCH] [jOOQ/jOOQ#10007] "constant string too long" in generated code when view source code exceeds 64KB --- .../java/org/jooq/codegen/JavaGenerator.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java index 7b942b86ef..e431dc9556 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -4686,10 +4686,25 @@ public class JavaGenerator extends AbstractGenerator { return null; // [#3450] Escape also the escape sequence, among other things that break Java strings. - return comment.replace("\\", "\\\\") - .replace("\"", "\\\"") - .replace("\n", "\\n") - .replace("\r", "\\r"); + String result = comment.replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "\\r"); + + // [#10007] Very long strings cannot be handled by the javac compiler. + int max = 16384; + if (result.length() <= max) + return result; + + StringBuilder sb = new StringBuilder("\" + new String(\""); + for (int i = 0; i < result.length(); i += max) { + if (i > 0) + sb.append("\") + new String(\""); + + sb.append(result.substring(i, Math.min(i + max, result.length()))); + } + + return sb.append("\") + \"").toString(); } /**