private Type getImplementationType(TypeMirror mirror) {
if ( mirror.getKind() != TypeKind.DECLARED ) {
return null;
}
DeclaredType declaredType = (DeclaredType) mirror;
Type implementationType = implementationTypes.get(
( (TypeElement) declaredType.asElement() ).getQualifiedName()
.toString()
);
if ( implementationType != null ) {
return new Type(
typeUtils,
elementUtils,
typeUtils.getDeclaredType(
implementationType.getTypeElement(),
declaredType.getTypeArguments().toArray( new TypeMirror[] { } )
),
implementationType.getTypeElement(),
getTypeParameters( mirror ),
null,
implementationType.getPackageName(),