Component Model "Class"
Use case
based on https://mapstruct.org/documentation/stable/reference/html/#passing-target-type, what if I don't need to inject anything? more context is at #3472
@Mapper( mappingControl = DeepClone.class, uses = GroupProxyFactory.class, componentModel = ComponentModel.SPRING) interface GroupCloner { Group clone(Group source); }
public class GroupProxyFactory { // I could be static <T extends Group> T resolve(Group entity, @TargetType Class<T> clazz) { var trackedClass = TrackerProxyFactory.getTrackedClass( clazz, GroupModifications.class, GroupChangeTrackingInvoker.class); // obnoxious long, doesn't really matter implementation return res; } }
I wrote a class with a static function (not thinking to annotate the class), and noticed it wasn't being used (actually it's still not).
I'm not longer sure if I'm reporting a bug, or requesting a feature... maybe both. It feels like this should work, but the generated code isn't using the GroupProxyFactory.
What I was going to suggest though is that it doesn't really need to know how to inject GroupProxyFactory, I wouldn't consider it a Bean it's just a class that it could new itself; or find a static method on.
As it is, even as documented it doesn't seem to work...
Generated Code
@Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2023-12-18T13:09:06-0500", comments = "version: 1.5.5.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-8.5.jar, environment: Java 11.0.21 (Eclipse Adoptium)" ) @Component class GroupClonerImpl implements GroupCloner { @Override public Group clone(Group source) { if ( source == null ) { return null; } Group group = new Group();
should be
Group group = groupProxyFactory.resolve(source, Group.class);
Honestly I'd be even happier with
Group group = groupProxyFactory.resolve(source);
Possible workarounds
No response
MapStruct Version
1.5.5