From: Maaartin Grajcar Date: Tue, 7 Apr 2015 18:24:19 +0000 (+0200) Subject: Make IQTable.inheritColumns works for an arbitrary depth. X-Git-Tag: v1.6.0~17^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c2b20d57a0c20fb457dc3d11ee7febdb1f3e14f8;p=iciql.git Make IQTable.inheritColumns works for an arbitrary depth. --- diff --git a/src/main/java/com/iciql/Iciql.java b/src/main/java/com/iciql/Iciql.java index b303372..302b34d 100644 --- a/src/main/java/com/iciql/Iciql.java +++ b/src/main/java/com/iciql/Iciql.java @@ -474,8 +474,8 @@ public interface Iciql { /** * The inherit columns allows this model class to inherit columns from - * its super class. Any IQTable annotation present on the super class is - * ignored. Default: false. + * its super class. IQTable and IQView annotations present on the super + * class or above are honored. Default: false. */ boolean inheritColumns() default false; @@ -549,8 +549,8 @@ public interface Iciql { /** * The inherit columns allows this model class to inherit columns from - * its super class. Any IQTable annotation present on the super class is - * ignored. Default: false. + * its super class. IQTable and IQView annotations present on the super + * class or above are honored. Default: false. */ boolean inheritColumns() default false; diff --git a/src/main/java/com/iciql/TableDefinition.java b/src/main/java/com/iciql/TableDefinition.java index e4fff87..e07cee6 100644 --- a/src/main/java/com/iciql/TableDefinition.java +++ b/src/main/java/com/iciql/TableDefinition.java @@ -439,28 +439,7 @@ public class TableDefinition { inheritColumns = viewAnnotation.inheritColumns(); } - List classFields = Utils.newArrayList(); - classFields.addAll(Arrays.asList(clazz.getDeclaredFields())); - if (inheritColumns) { - Class superClass = clazz.getSuperclass(); - classFields.addAll(Arrays.asList(superClass.getDeclaredFields())); - - if (superClass.isAnnotationPresent(IQView.class)) { - IQView superView = superClass.getAnnotation(IQView.class); - if (superView.inheritColumns()) { - // inherit columns from super.super.class - Class superSuperClass = superClass.getSuperclass(); - classFields.addAll(Arrays.asList(superSuperClass.getDeclaredFields())); - } - } else if (superClass.isAnnotationPresent(IQTable.class)) { - IQTable superTable = superClass.getAnnotation(IQTable.class); - if (superTable.inheritColumns()) { - // inherit columns from super.super.class - Class superSuperClass = superClass.getSuperclass(); - classFields.addAll(Arrays.asList(superSuperClass.getDeclaredFields())); - } - } - } + List classFields = classFields(inheritColumns); Set uniqueFields = new LinkedHashSet(); T defaultObject = Db.instance(clazz); @@ -606,6 +585,27 @@ public class TableDefinition { } } + private List classFields(boolean inheritColumns) { + List classFields = Utils.newArrayList(); + classFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + Class superClass = clazz; + while (inheritColumns) { + superClass = superClass.getSuperclass(); + classFields.addAll(Arrays.asList(superClass.getDeclaredFields())); + + if (superClass.isAnnotationPresent(IQView.class)) { + IQView superView = superClass.getAnnotation(IQView.class); + inheritColumns = superView.inheritColumns(); + } else if (superClass.isAnnotationPresent(IQTable.class)) { + IQTable superTable = superClass.getAnnotation(IQTable.class); + inheritColumns = superTable.inheritColumns(); + } else { + inheritColumns = false; + } + } + return classFields; + } + void checkMultipleBooleans() { if (multiplePrimitiveBools) { throw new IciqlException(