Allow inherited DelegatingConverter to be processed
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 45/100
Piste de recherche
Commencez dans ConverterMapperProcessor et suivez la manière dont les méthodes @DelegatingConverter sont collectées depuis roundEnv ; comparez ce chemin avec l’exemple hérité de BaseMapper. C’est terminé lorsque l’annotation sur BaseMapper.invertConvert est reconnue pour CarMapper sans override et que le delegate correspondant est généré.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Related to https://github.com/mapstruct/mapstruct-spring-extensions/issues/101
Hi,
I am trying to modify the annotation processor to support custom Converter interface but I don't know how to process DelegatingConverter by inheritance.
New code in ConverterMapperProcessor:
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());
Custom converter:
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());
}
// Annotation is not processed
@DelegatingConverter
@InheritInverseConfiguration
default S invertConvert(T source) {
return invertConvert(source, new CycleAvoidingMappingContext());
}
S invertConvert(T source, @Context CycleAvoidingMappingContext context);
}
Mapper:
@Mapper(config = MapperConfig.class)
public abstract class CarMapper implements BaseMapper<Car, CarDto> {
// Required annotation to have delegate generated by processor
@DelegatingConverter
@Override
public Car invertConvert(CarDto source) {
return BaseMapper.super.invertConvert(source);
}
}
Delegate:
@Component
public class CarDtoToCarConverter implements Converter<CarDto, Car> {
private CarMapper delegateMapper;
public CarDtoToCarConverter(@Autowired final CarMapper delegateMapper) {
this.delegateMapper = delegateMapper;
}
@Override
public Car convert(final CarDto source) {
return delegateMapper.invertConvert(source);
}
}
Wanted mapper:
@Mapper(config = MapperConfig.class)
public abstract class CarMapper implements BaseMapper<Car, CarDto> {
// Nothing to override
}
Thanks
- Langage dominant
- Java
- Étoiles
- 181
- Forks
- 33
- Merge moyen
- 2 j 18 h
- PR mergées (30 j)
- 3
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de mapstruct/mapstruct-spring-extensions
-
Dependency Dashboard Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
-
Configure JReleaser for project Ouverte
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
mapstruct/mapstruct-spring-extensions#99 · 2 commentaires ·
-
bug help wanted
mapstruct/mapstruct-spring-extensions#57 · 13 commentaires · 1 personne assignée ·
-
enhancement
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
mapstruct/mapstruct-spring-extensions#3 · 2 réactions ·
Toutes les issues de mapstruct/mapstruct-spring-extensions
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
objectionary/jeo-maven-plugin#1811 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
hiero-ledger/hiero-block-node#3693 ·
-
area/dependencies kind/cve severity/critical source/scan-dependencies status/triage
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
-
bug good first issue
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
-
proposal
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
beemdevelopment/Aegis#1840 ·