Skip to content

Commit a84ba03

Browse files
authored
Fix auto-completion for nested public fields (#145)
1 parent a2b48cc commit a84ba03

File tree

5 files changed

+70
-34
lines changed

5 files changed

+70
-34
lines changed

src/main/java/org/mapstruct/intellij/codeinsight/references/MapstructSourceReference.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ Object[] getVariantsInternal(@NotNull PsiMethod mappingMethod) {
124124
@Override
125125
PsiType resolvedType() {
126126
PsiElement element = resolve();
127+
127128
if ( element instanceof PsiMethod ) {
128129
return ( (PsiMethod) element ).getReturnType();
129130
}
@@ -133,6 +134,9 @@ else if ( element instanceof PsiParameter ) {
133134
else if ( element instanceof PsiRecordComponent ) {
134135
return ( (PsiRecordComponent) element ).getType();
135136
}
137+
else if ( element instanceof PsiField ) {
138+
return ( (PsiField) element ).getType();
139+
}
136140

137141
return null;
138142
}

src/main/java/org/mapstruct/intellij/codeinsight/references/MapstructTargetReference.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ else if ( element instanceof PsiParameter ) {
199199
else if ( element instanceof PsiRecordComponent ) {
200200
return ( (PsiRecordComponent) element ).getType();
201201
}
202+
else if ( element instanceof PsiField ) {
203+
return ( (PsiField) element ).getType();
204+
}
205+
202206
return null;
203207
}
204208

src/test/java/org/mapstruct/intellij/MapstructCompletionTestCase.java

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,21 @@ private void assertCarDtoWithConstructorAndSettersAutoComplete() {
246246
);
247247
}
248248

249+
private void assertNestedSecondLevelAutoCompleteProperty() {
250+
assertThat( myItems )
251+
.extracting( LookupElement::getLookupString )
252+
.containsExactlyInAnyOrder(
253+
"name"
254+
);
255+
256+
assertThat( myItems )
257+
.extracting( LookupElementPresentation::renderElement )
258+
.usingRecursiveFieldByFieldElementComparator()
259+
.containsExactlyInAnyOrder(
260+
createVariable( "name", "String" )
261+
);
262+
}
263+
249264
public void testCarMapperReturnTargetCarDtoKotlin() {
250265
configureByFile( "/" + getTestName( false ) + ".kt" );
251266
assertCarDtoAutoCompleteKt();
@@ -362,34 +377,17 @@ public void testTargetPropertyAutoCompleteAfterTargetParameter() {
362377

363378
public void testNestedSecondLevelAutoCompleteTargetProperty() {
364379
configureByTestName();
365-
assertThat( myItems )
366-
.extracting( LookupElement::getLookupString )
367-
.containsExactlyInAnyOrder(
368-
"name"
369-
);
380+
assertNestedSecondLevelAutoCompleteProperty();
381+
}
370382

371-
assertThat( myItems )
372-
.extracting( LookupElementPresentation::renderElement )
373-
.usingRecursiveFieldByFieldElementComparator()
374-
.containsExactlyInAnyOrder(
375-
createVariable( "name", "String" )
376-
);
383+
public void testNestedSecondLevelAutoCompleteTargetPublicProperty() {
384+
configureByTestName();
385+
assertNestedSecondLevelAutoCompleteProperty();
377386
}
378387

379388
public void testNestedSecondLevelAutoCompleteBuilderTargetProperty() {
380389
configureByTestName();
381-
assertThat( myItems )
382-
.extracting( LookupElement::getLookupString )
383-
.containsExactlyInAnyOrder(
384-
"name"
385-
);
386-
387-
assertThat( myItems )
388-
.extracting( LookupElementPresentation::renderElement )
389-
.usingRecursiveFieldByFieldElementComparator()
390-
.containsExactlyInAnyOrder(
391-
createVariable( "name", "String" )
392-
);
390+
assertNestedSecondLevelAutoCompleteProperty();
393391
}
394392

395393
public void testNestedSecondLevelAutoCompleteConstructorTargetProperty() {
@@ -463,18 +461,12 @@ public void testMultipleSourceParametersUpdateMapping() {
463461

464462
public void testNestedSecondLevelAutoCompleteSourceProperty() {
465463
configureByTestName();
466-
assertThat( myItems )
467-
.extracting( LookupElement::getLookupString )
468-
.containsExactlyInAnyOrder(
469-
"name"
470-
);
464+
assertNestedSecondLevelAutoCompleteProperty();
465+
}
471466

472-
assertThat( myItems )
473-
.extracting( LookupElementPresentation::renderElement )
474-
.usingRecursiveFieldByFieldElementComparator()
475-
.containsExactlyInAnyOrder(
476-
createVariable( "name", "String" )
477-
);
467+
public void testNestedSecondLevelAutoCompleteSourcePublicProperty() {
468+
configureByTestName();
469+
assertNestedSecondLevelAutoCompleteProperty();
478470
}
479471

480472
public void testFluentGenericTargetMapper() {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright MapStruct Authors.
3+
*
4+
* Licensed under the Apache License version 2.0, available at https://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
package org.mapstruct.ap.test.complex;
7+
8+
import org.example.dto.CarPublic;
9+
import org.example.dto.CarDtoPublic;
10+
import org.mapstruct.Mapper;
11+
import org.mapstruct.Mapping;
12+
13+
@Mapper
14+
public interface CarMapper {
15+
16+
@Mapping(source = "driver.<caret>name", target = "myDriver.name")
17+
CarDtoPublic carToCarDto(CarPublic car);
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/*
2+
* Copyright MapStruct Authors.
3+
*
4+
* Licensed under the Apache License version 2.0, available at https://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
package org.mapstruct.ap.test.complex;
7+
8+
import org.example.dto.CarPublic;
9+
import org.example.dto.CarDtoPublic;
10+
import org.mapstruct.Mapper;
11+
import org.mapstruct.Mapping;
12+
13+
@Mapper
14+
public interface CarMapper {
15+
16+
@Mapping(source = "driver.name", target = "myDriver.<caret>name")
17+
CarDtoPublic carToCarDto(CarPublic car);
18+
}

0 commit comments

Comments
 (0)