-
Notifications
You must be signed in to change notification settings - Fork 33
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DelegatingConverter and CycleAvoidingMappingContext #101
Comments
In a broader sense, the question is asking about |
Great to hear! Do you already have an idea when the next release will be available that contains this feature? I'm asking because we are currently working on a bigger innovation project. Does ist make sense to wait oder would you think that it will take a longer time? In this case we would have to look for a workaround. |
Sorry, looking at this again I just realised that I have to retract my previous response. Your base This is a known limitation resulting from Spring's narrower definition of a |
Hello, I am trying to use spring
public interface BaseMapper<S, T> extends Converter<S, T> {
@Nullable
T convert(@NonNull S source, @Context CycleAvoidingMappingContext context);
@Nullable
@Override
@Named("baseConvert")
default T convert(@NonNull S source) {
return convert(source, new CycleAvoidingMappingContext());
}
@DelegatingConverter // <--- This generate code below
@InheritInverseConfiguration
S invertConvert(T source);
} Unwanted TToSConverter is generated @Component
public class TToSConverter implements Converter<T, S> {
private BaseMapper delegateMapper;
public TToSConverter(@Autowired final BaseMapper delegateMapper) {
this.delegateMapper = delegateMapper;
}
@Override
public S convert(final T source) {
return delegateMapper.invertConvert(source);
}
} EDIT: I resolved the first point by adding a filter before the delegatingConverterDescriptors =
annotations.stream()
.filter(ConverterMapperProcessor::isDelegatingConverterAnnotation)
.map(roundEnv::getElementsAnnotatedWith)
.flatMap(Set::stream)
.map(ExecutableElement.class::cast)
// Do not generate delegate without Mapper annotation on class
.filter(annotatedMethod -> annotatedMethod.getEnclosingElement().getAnnotationMirrors().stream().anyMatch(x -> x.getAnnotationType().toString().equals(MAPPER)))
.map(annotatedMethod -> new DelegatingConverterDescriptor(annotatedMethod, processingEnv))
.collect(toList()); I am creating a new issue for the second part (I can't process the DelegatingConverter by inheritance) |
Hi,
I've defined a Mapper that should avoid cycles. For this reason I've just followed Mapstructs suggestion and invented the CycleAvoidingMappingContext. Doing so my current mapper looks like:
My problem obviously results from the additionally defined @DelegatingConverter because when compiling I get the following error:
Can only generate a delegating converter for methods with exactly one parameter and non-void return type.
Does anyone have an idea how to combine the CycleAvoidingMappingContext with @DelegatingConverter successfully?
Many thanks in advance,
Thorben
The text was updated successfully, but these errors were encountered: