Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Allow inherited DelegatingConverter to be processed

Abierto
#104 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
java
Área
tooling

Línea de trabajo

Comienza en ConverterMapperProcessor y sigue cómo se recopilan los métodos @DelegatingConverter de roundEnv; compara ese recorrido con el ejemplo heredado de BaseMapper. Se considera terminado cuando la anotación en BaseMapper.invertConvert se reconoce para CarMapper sin un override y se genera el delegado correspondiente.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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

Lenguaje dominante
Java
Estrellas
181
Forks
33
Merge medio
2 d 18 h
PR fusionados (30 d)
3

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de mapstruct/mapstruct-spring-extensions

Todos los issues de mapstruct/mapstruct-spring-extensions

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.