diff --git a/jOOQ-tools/src/org/jooq/xtend/Generators.xtend b/jOOQ-tools/src/org/jooq/xtend/Generators.xtend
index ee59aea539..38ad2f7e6f 100644
--- a/jOOQ-tools/src/org/jooq/xtend/Generators.xtend
+++ b/jOOQ-tools/src/org/jooq/xtend/Generators.xtend
@@ -356,4 +356,46 @@ abstract class Generators {
def degreeOr(int degree, String or) {
return if (degree == 0) or else degree
}
+
+ /**
+ * The generic type of a class, e.g. "" or <T1, T2, T3>
+ */
+ def type(int degree) {
+ type(degree, "")
+ }
+
+ /**
+ * The generic type of a class, e.g. "" or <T1, T2, T3>
+ */
+ def type(int degree, String spacer) {
+ '''«IF degree > 0»<«TN(degree)»>«spacer»«ENDIF»'''
+ }
+
+ /**
+ * The generic type suffix of a class, e.g. N or 3<T1, T2, T3>
+ */
+ def typeSuffix(int degree) {
+ '''«typeSuffixRaw(degree)»«type(degree)»'''
+ }
+
+ /**
+ * The "raw" generic type suffix of a class, e.g. N or 3
+ */
+ def typeSuffixRaw(int degree) {
+ '''«degreeOrN(degree)»'''
+ }
+
+ /**
+ * The generic type suffix of a record, e.g. "" or 3<T1, T2, T3>
+ */
+ def recTypeSuffix(int degree) {
+ '''«recTypeSuffixRaw(degree)»«type(degree)»'''
+ }
+
+ /**
+ * The "raw" generic type suffix of a record, e.g. "" or 3
+ */
+ def recTypeSuffixRaw(int degree) {
+ '''«degreeOr(degree)»'''
+ }
}
\ No newline at end of file
diff --git a/jOOQ-tools/src/org/jooq/xtend/Rows.xtend b/jOOQ-tools/src/org/jooq/xtend/Rows.xtend
index eadb6737bd..0815b7ec96 100644
--- a/jOOQ-tools/src/org/jooq/xtend/Rows.xtend
+++ b/jOOQ-tools/src/org/jooq/xtend/Rows.xtend
@@ -48,22 +48,6 @@ class Rows extends Generators {
rows.generateRowImpl();
}
- def typeSuffix(int degree) {
- '''«degreeOrN(degree)»«IF degree > 0»<«TN(degree)»>«ENDIF»'''
- }
-
- def typeSuffixRaw(int degree) {
- '''«degreeOrN(degree)»'''
- }
-
- def recTypeSuffix(int degree) {
- '''«degreeOr(degree)»«IF degree > 0»<«TN(degree)»>«ENDIF»'''
- }
-
- def recTypeSuffixRaw(int degree) {
- '''«degreeOr(degree)»'''
- }
-
def generateRowClasses() {
for (degree : (0..Constants::MAX_ROW_DEGREE)) {
val out = new StringBuilder();