if ( ! Thing.class.isAssignableFrom( resolvedType ) ) {
updateTraitDefinition( type,
resolvedType );
String target = typeDescr.getTypeName() + TraitFactory.SUFFIX;
TypeDeclarationDescr tempDescr = new TypeDeclarationDescr();
tempDescr.setNamespace( typeDescr.getNamespace() );
tempDescr.setFields( typeDescr.getFields() );
tempDescr.setType( target,
typeDescr.getNamespace() );
tempDescr.addSuperType( typeDescr.getType() );
TypeDeclaration tempDeclr = new TypeDeclaration( target );
tempDeclr.setKind( TypeDeclaration.Kind.TRAIT );
tempDeclr.setTypesafe( type.isTypesafe() );
tempDeclr.setNovel( true );
tempDeclr.setTypeClassName( tempDescr.getType().getFullName() );
tempDeclr.setResource( type.getResource() );
ClassDefinition tempDef = new ClassDefinition( target );
tempDef.setClassName( tempDescr.getType().getFullName() );
tempDef.setTraitable( false );
for (FieldDefinition fld : def.getFieldsDefinitions()) {
tempDef.addField( fld );
}
tempDef.setInterfaces( def.getInterfaces() );
tempDef.setSuperClass( def.getClassName() );
tempDef.setDefinedClass( resolvedType );
tempDef.setAbstrakt( true );
tempDeclr.setTypeClassDef( tempDef );
type.setKind( TypeDeclaration.Kind.CLASS );
generateDeclaredBean( tempDescr,
tempDeclr,
pkgRegistry,
tempDef );
try {
Class<?> clazz = pkgRegistry.getTypeResolver().resolveType( tempDescr.getType().getFullName() );
tempDeclr.setTypeClass( clazz );
} catch ( ClassNotFoundException cnfe ) {
this.results.add( new TypeDeclarationError( typeDescr,
"Internal Trait extension Class '" + target +
"' could not be generated correctly'" ) );