+ this.genType = genType
+ this.imports = GeneratorUtil.createChildImports(genType)
+ this.fields = createFieldsFromMethods(createMethods)
+ }
+
+ def private Set<MethodSignature> createMethods() {
+ val Set<MethodSignature> methods = new LinkedHashSet
+ methods.addAll(genType.methodDefinitions)
+ storeMethodsOfImplementedIfcs(methods, genType.implements)
+ return methods
+ }
+
+ def private void storeMethodsOfImplementedIfcs(Set<MethodSignature> methods, List<Type> implementedIfcs) {
+ if (implementedIfcs == null || implementedIfcs.empty) {
+ return
+ }
+ for (implementedIfc : implementedIfcs) {
+ if ((implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))) {
+ val ifc = implementedIfc as GeneratedType
+ methods.addAll(ifc.methodDefinitions)
+ storeMethodsOfImplementedIfcs(methods, ifc.implements)
+ } else if (implementedIfc.fullyQualifiedName == Augmentable.name) {
+ for (m : Augmentable.methods) {
+ if (m.name == GET_AUGMENTATION_METHOD_NAME) {
+ addToImports(JAVA_UTIL, HASH_MAP)
+ addToImports(JAVA_UTIL, MAP)
+ val fullyQualifiedName = m.returnType.name
+ val pkg = fullyQualifiedName.package
+ val name = fullyQualifiedName.name
+ addToImports(pkg, name)
+ val tmpGenTO = new GeneratedTOBuilderImpl(pkg, name)
+ val type = new ReferencedTypeImpl(pkg, name)
+ val generic = new ReferencedTypeImpl(genType.packageName, genType.name)
+ val parametrizedReturnType = Types.parameterizedTypeFor(type, generic)
+ tmpGenTO.addMethod(m.name).setReturnType(parametrizedReturnType)
+ augmentField = tmpGenTO.toInstance.methodDefinitions.first.createFieldFromGetter