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 15d197686a..9a0770ce93 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -5620,7 +5620,9 @@ public class JavaGenerator extends AbstractGenerator { out.println("return false"); out.println("}"); - if (isArrayType(getJavaType(column.getType(resolver(out)), out))) + if (isObjectArrayType(getJavaType(column.getType(resolver(out)), out))) + out.println("else if (!%s.deepEquals(this.%s, o.%s))", Arrays.class, columnMember, columnMember); + else if (isArrayType(getJavaType(column.getType(resolver(out)), out))) out.println("else if (!%s.equals(this.%s, o.%s))", Arrays.class, columnMember, columnMember); else out.println("else if (this.%s != o.%s)", columnMember, columnMember); @@ -5651,7 +5653,9 @@ public class JavaGenerator extends AbstractGenerator { out.println("return false;"); out.println("}"); - if (isArrayType(getJavaType(column.getType(resolver(out)), out))) + if (isObjectArrayType(getJavaType(column.getType(resolver(out)), out))) + out.println("else if (!%s.deepEquals(this.%s, other.%s))", Arrays.class, columnMember, columnMember); + else if (isArrayType(getJavaType(column.getType(resolver(out)), out))) out.println("else if (!%s.equals(this.%s, other.%s))", Arrays.class, columnMember, columnMember); else out.println("else if (!this.%s.equals(other.%s))", columnMember, columnMember); @@ -5690,7 +5694,9 @@ public class JavaGenerator extends AbstractGenerator { for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO); - if (isArrayType(getJavaType(column.getType(resolver(out)), out))) + if (isObjectArrayType(getJavaType(column.getType(resolver(out)), out))) + out.println("result = prime * result + (if (this.%s === null) 0 else %s.deepHashCode(this.%s))", columnMember, Arrays.class, columnMember); + else if (isArrayType(getJavaType(column.getType(resolver(out)), out))) out.println("result = prime * result + (if (this.%s === null) 0 else %s.hashCode(this.%s))", columnMember, Arrays.class, columnMember); else out.println("result = prime * result + (if (this.%s === null) 0 else this.%s.hashCode())", columnMember, columnMember); @@ -5708,7 +5714,9 @@ public class JavaGenerator extends AbstractGenerator { for (TypedElementDefinition column : getTypedElements(tableOrUDT)) { final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO); - if (isArrayType(getJavaType(column.getType(resolver(out)), out))) + if (isObjectArrayType(getJavaType(column.getType(resolver(out)), out))) + out.println("result = prime * result + ((this.%s == null) ? 0 : %s.deepHashCode(this.%s));", columnMember, Arrays.class, columnMember); + else if (isArrayType(getJavaType(column.getType(resolver(out)), out))) out.println("result = prime * result + ((this.%s == null) ? 0 : %s.hashCode(this.%s));", columnMember, Arrays.class, columnMember); else out.println("result = prime * result + ((this.%s == null) ? 0 : this.%s.hashCode());", columnMember, columnMember); @@ -9283,6 +9291,15 @@ public class JavaGenerator extends AbstractGenerator { return new Resolver(out, mode); } + protected boolean isObjectArrayType(String javaType) { + if (scala) + return javaType.startsWith("scala.Array"); + else if (kotlin) + return javaType.startsWith("kotlin.Array"); + else + return javaType.endsWith("[]") && !javaType.equals("byte[]"); + } + protected boolean isArrayType(String javaType) { if (scala) return javaType.startsWith("scala.Array"); @@ -9293,10 +9310,15 @@ public class JavaGenerator extends AbstractGenerator { } protected String getArrayBaseType(String javaType) { - return javaType + String result = javaType .replace("[]", "") .replaceAll("^scala.Array\\[(.*?)\\]$", "$1") .replaceAll("^kotlin.Array<(.*?)\\??>$", "$1"); + + if (result.equals(javaType)) + return result; + else + return getArrayBaseType(result); } protected String getJavaType(DataTypeDefinition type, JavaWriter out) { diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java index 04c21fba23..09a286c5c7 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java @@ -323,7 +323,7 @@ public class JavaWriter extends GeneratorWriter { return result; } - private static final Pattern KOTLIN_ARRAY_PATTERN = Pattern.compile("kotlin.Array<([^?>]*)\\?>"); + private static final Pattern KOTLIN_ARRAY_PATTERN = Pattern.compile("kotlin.Array<(.*)\\?>"); private String patchKotlinClasses(String c) { // [#10768] TODO: Is this the right place to patch these classes? diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java index 75b923c334..9c11b9b5fe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java @@ -163,7 +163,7 @@ abstract class AbstractStore extends AbstractFormattable { // Other primitive types are not expected else if (!thisValue.getClass().getComponentType().isPrimitive() && !thatValue.getClass().getComponentType().isPrimitive()) { - if (!Arrays.equals((Object[]) thisValue, (Object[]) thatValue)) + if (!Arrays.deepEquals((Object[]) thisValue, (Object[]) thatValue)) return false; }