Skip to content

Commit 89e9a6e

Browse files
committed
Fix false positive unmapped target property for multi source mappers
Fixes #60
1 parent b1ccd85 commit 89e9a6e

11 files changed

+33
-34
lines changed

change-notes.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
<html>
2+
<h2>1.2.3</h2>
3+
<ul>
4+
<li>Bug fix: False positive unmapped target property for multi source methods</li>
5+
</ul>
26
<h2>1.2.2</h2>
37
<ul>
48
<li>Support for mapping nested bean properties to current target</li>

src/main/java/org/mapstruct/intellij/util/SourceUtils.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import java.util.HashSet;
1313
import java.util.Map;
1414
import java.util.Set;
15-
import java.util.stream.Collectors;
16-
import java.util.stream.Stream;
1715

1816
import com.intellij.openapi.util.Pair;
1917
import com.intellij.psi.CommonClassNames;
@@ -43,7 +41,8 @@ private SourceUtils() {
4341

4442
/**
4543
* Find all source properties for the given {@code method}. If the method has only one source parameter then the
46-
* properties of the source class are returned. Otherwise the names of all the source parameters are returned
44+
* properties of the source class are returned. Otherwise the names of all the source parameters
45+
* and their properties are returned.
4746
*
4847
* @param method to be used
4948
*
@@ -56,9 +55,14 @@ public static Set<String> findAllSourceProperties(@NotNull PsiMethod method) {
5655
return SourceUtils.publicReadAccessors( parameterType ).keySet();
5756
}
5857

59-
return Stream.of( sourceParameters )
60-
.map( PsiParameter::getName )
61-
.collect( Collectors.toSet() );
58+
Set<String> sourceProperties = new HashSet<>();
59+
for ( PsiParameter sourceParameter : sourceParameters ) {
60+
sourceProperties.add( sourceParameter.getName() );
61+
PsiType parameterType = SourceUtils.getParameterType( sourceParameter );
62+
sourceProperties.addAll( SourceUtils.publicReadAccessors( parameterType ).keySet() );
63+
}
64+
65+
return sourceProperties;
6266
}
6367

6468
/**

src/test/java/org/mapstruct/intellij/inspection/UnmappedFluentTargetPropertiesInspectionTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,8 @@ public void testUnmappedFluentTargetProperties() {
5252
"Ignore all unmapped target properties",
5353
"Ignore unmapped target property: 'testName'",
5454
"Add unmapped target property: 'testName'",
55-
"Ignore unmapped target property: 'matching'",
56-
"Add unmapped target property: 'matching'",
5755
"Ignore unmapped target property: 'moreTarget'",
58-
"Add unmapped target property: 'moreTarget'",
59-
"Ignore all unmapped target properties"
56+
"Add unmapped target property: 'moreTarget'"
6057
);
6158

6259
allQuickFixes.forEach( myFixture::launchAction );

src/test/java/org/mapstruct/intellij/inspection/UnmappedTargetPropertiesInspectionTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,8 @@ public void testUnmappedTargetProperties() {
6464
"Ignore all unmapped target properties",
6565
"Ignore unmapped target property: 'testName'",
6666
"Add unmapped target property: 'testName'",
67-
"Ignore unmapped target property: 'matching'",
68-
"Add unmapped target property: 'matching'",
6967
"Ignore unmapped target property: 'moreTarget'",
70-
"Add unmapped target property: 'moreTarget'",
71-
"Ignore all unmapped target properties"
68+
"Add unmapped target property: 'moreTarget'"
7269
);
7370

7471
allQuickFixes.forEach( myFixture::launchAction );

src/test/java/org/mapstruct/intellij/inspection/UnmappedTargetPropertiesJdk8InspectionTest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,8 @@ public void testUnmappedTargetPropertiesJdk8() {
5252
"Ignore all unmapped target properties",
5353
"Ignore unmapped target property: 'testName'",
5454
"Add unmapped target property: 'testName'",
55-
"Ignore unmapped target property: 'matching'",
56-
"Add unmapped target property: 'matching'",
5755
"Ignore unmapped target property: 'moreTarget'",
58-
"Add unmapped target property: 'moreTarget'",
59-
"Ignore all unmapped target properties"
56+
"Add unmapped target property: 'moreTarget'"
6057
);
6158

6259
allQuickFixes.forEach( myFixture::launchAction );

testData/inspection/UnmappedFluentTargetProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,5 +60,5 @@ interface UpdateMapper {
6060
@Mapper
6161
interface MultiSourceUpdateMapper {
6262

63-
void <warning descr="Unmapped target properties: matching, moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
63+
void <warning descr="Unmapped target property: moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
6464
}

testData/inspection/UnmappedFluentTargetProperties_after.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,11 +72,7 @@ interface UpdateMapper {
7272
@Mapper
7373
interface MultiSourceUpdateMapper {
7474

75-
@Mapping(target = "moreTarget", ignore = true)
76-
@Mapping(target = "matching", ignore = true)
7775
@Mapping(target = "moreTarget", source = "")
7876
@Mapping(target = "moreTarget", ignore = true)
79-
@Mapping(target = "matching", source = "")
80-
@Mapping(target = "matching", ignore = true)
8177
void update(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
8278
}

testData/inspection/UnmappedTargetProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,5 @@ interface UpdateMapper {
7979
@Mapper
8080
interface MultiSourceUpdateMapper {
8181

82-
void <warning descr="Unmapped target properties: matching, moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @org.mapstruct.Context String matching);
82+
void <warning descr="Unmapped target property: moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @org.mapstruct.Context String matching);
8383
}

testData/inspection/UnmappedTargetPropertiesJdk8.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ interface AllMappingMapper {
5050
Target mapWithAllMapping(Source source);
5151
}
5252

53+
@Mapper
54+
interface MultiSourceMappingsMapper {
55+
56+
Target mapWithAllMapping(Source source, String moreTarget, String testName);
57+
}
58+
5359
@Mapper
5460
interface UpdateMapper {
5561

@@ -60,7 +66,7 @@ interface UpdateMapper {
6066
@Mapper
6167
interface MultiSourceUpdateMapper {
6268

63-
void <warning descr="Unmapped target properties: matching, moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
69+
void <warning descr="Unmapped target property: moreTarget">update</warning>(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
6470
}
6571

6672
@Mapper

testData/inspection/UnmappedTargetPropertiesJdk8_after.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ interface AllMappingMapper {
6060
Target mapWithAllMapping(Source source);
6161
}
6262

63+
@Mapper
64+
interface MultiSourceMappingsMapper {
65+
66+
Target mapWithAllMapping(Source source, String moreTarget, String testName);
67+
}
68+
6369
@Mapper
6470
interface UpdateMapper {
6571

@@ -72,12 +78,8 @@ interface UpdateMapper {
7278
@Mapper
7379
interface MultiSourceUpdateMapper {
7480

75-
@Mapping(target = "moreTarget", ignore = true)
76-
@Mapping(target = "matching", ignore = true)
7781
@Mapping(target = "moreTarget", source = "")
7882
@Mapping(target = "moreTarget", ignore = true)
79-
@Mapping(target = "matching", source = "")
80-
@Mapping(target = "matching", ignore = true)
8183
void update(@MappingTarget Target moreTarget, Source source, String testName, @Context String matching);
8284
}
8385

0 commit comments

Comments
 (0)