From 6a8eb92c278790a025719e10100e660671d7a349 Mon Sep 17 00:00:00 2001 From: Milan Todorov Date: Sun, 27 Sep 2026 13:47:29 +0300 Subject: [PATCH 1/2] refactor: extract method #mapperTypeElements --- .../org/mapstruct/ap/MappingProcessor.java | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java index 50831a8f42..3f849a4289 100644 --- a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java @@ -263,23 +263,30 @@ private Set getMappers(final Set annotations continue; } - try { - Set annotatedMappers = roundEnvironment.getElementsAnnotatedWith( annotation ); - for ( Element mapperElement : annotatedMappers ) { - TypeElement mapperTypeElement = asTypeElement( mapperElement ); - - // on some JDKs, RoundEnvironment.getElementsAnnotatedWith( ... ) returns types with - // annotations unknown to the compiler, even though they are not declared Mappers - if ( mapperTypeElement != null && MapperGem.instanceOn( mapperTypeElement ) != null ) { - mapperTypes.add( mapperTypeElement ); - } + mapperTypes.addAll( mapperTypeElements( roundEnvironment, annotation ) ); + } + return mapperTypes; + } + + private Set mapperTypeElements(final RoundEnvironment roundEnvironment, final TypeElement annotation) { + Set mapperTypes = new HashSet<>(); + try { + Set annotatedMappers = roundEnvironment.getElementsAnnotatedWith( annotation ); + for ( Element mapperElement : annotatedMappers ) { + TypeElement mapperTypeElement = asTypeElement( mapperElement ); + + // on some JDKs, RoundEnvironment.getElementsAnnotatedWith( ... ) returns types with + // annotations unknown to the compiler, even though they are not declared Mappers + if ( mapperTypeElement != null && MapperGem.instanceOn( mapperTypeElement ) != null ) { + mapperTypes.add( mapperTypeElement ); } } - catch ( Throwable t ) { // whenever that may happen, but just to stay on the save side - handleUncaughtError( annotation, t ); - continue; - } } + catch ( Throwable t ) { // whenever that may happen, but just to stay on the save side + handleUncaughtError( annotation, t ); + return new HashSet<>(); + } + return mapperTypes; } From afb803758969419d2684e9951bca4b0c4beeb8d6 Mon Sep 17 00:00:00 2001 From: Milan Todorov Date: Sun, 27 Sep 2026 16:43:43 +0300 Subject: [PATCH 2/2] refactor: replace nested control structures with pipeline --- .../org/mapstruct/ap/MappingProcessor.java | 37 ++++++------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java index 3f849a4289..0282ccf206 100644 --- a/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java +++ b/processor/src/main/java/org/mapstruct/ap/MappingProcessor.java @@ -14,6 +14,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.ServiceLoader; import java.util.Set; import java.util.stream.Collectors; @@ -254,40 +255,26 @@ private Set getAndResetDeferredMappers() { private Set getMappers(final Set annotations, final RoundEnvironment roundEnvironment) { - Set mapperTypes = new HashSet<>(); - - for ( TypeElement annotation : annotations ) { - //Indicates that the annotation's type isn't on the class path of the compiled - //project. Let the compiler deal with that and print an appropriate error. - if ( annotation.getKind() != ElementKind.ANNOTATION_TYPE ) { - continue; - } - - mapperTypes.addAll( mapperTypeElements( roundEnvironment, annotation ) ); - } - return mapperTypes; + return annotations.stream() + .filter( a -> a.getKind().equals( ElementKind.ANNOTATION_TYPE ) ) + .map( a -> mapperTypeElements( roundEnvironment, a ) ) + .flatMap( Set::stream ) + .collect( Collectors.toSet() ); } private Set mapperTypeElements(final RoundEnvironment roundEnvironment, final TypeElement annotation) { - Set mapperTypes = new HashSet<>(); try { - Set annotatedMappers = roundEnvironment.getElementsAnnotatedWith( annotation ); - for ( Element mapperElement : annotatedMappers ) { - TypeElement mapperTypeElement = asTypeElement( mapperElement ); - - // on some JDKs, RoundEnvironment.getElementsAnnotatedWith( ... ) returns types with - // annotations unknown to the compiler, even though they are not declared Mappers - if ( mapperTypeElement != null && MapperGem.instanceOn( mapperTypeElement ) != null ) { - mapperTypes.add( mapperTypeElement ); - } - } + return roundEnvironment.getElementsAnnotatedWith( annotation ) + .stream() + .map( this::asTypeElement ) + .filter( Objects::nonNull ) + .filter( mapper -> Objects.nonNull( MapperGem.instanceOn( mapper ) ) ) + .collect( Collectors.toSet() ); } catch ( Throwable t ) { // whenever that may happen, but just to stay on the save side handleUncaughtError( annotation, t ); return new HashSet<>(); } - - return mapperTypes; } private void processMapperElements(Set mapperElements, RoundContext roundContext) {