mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#1345 ignoring reversed mappings with no target accessor silently
This commit is contained in:
parent
3d26318301
commit
4c1dcc5272
@ -37,7 +37,6 @@ import javax.lang.model.util.Types;
|
|||||||
import org.mapstruct.ap.internal.model.common.FormattingParameters;
|
import org.mapstruct.ap.internal.model.common.FormattingParameters;
|
||||||
import org.mapstruct.ap.internal.model.common.Parameter;
|
import org.mapstruct.ap.internal.model.common.Parameter;
|
||||||
import org.mapstruct.ap.internal.model.common.TypeFactory;
|
import org.mapstruct.ap.internal.model.common.TypeFactory;
|
||||||
import org.mapstruct.ap.internal.prism.CollectionMappingStrategyPrism;
|
|
||||||
import org.mapstruct.ap.internal.prism.MappingPrism;
|
import org.mapstruct.ap.internal.prism.MappingPrism;
|
||||||
import org.mapstruct.ap.internal.prism.MappingsPrism;
|
import org.mapstruct.ap.internal.prism.MappingsPrism;
|
||||||
import org.mapstruct.ap.internal.util.FormattingMessager;
|
import org.mapstruct.ap.internal.util.FormattingMessager;
|
||||||
@ -390,11 +389,6 @@ public class Mapping {
|
|||||||
return dependsOn;
|
return dependsOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean hasPropertyInReverseMethod(String name, SourceMethod method) {
|
|
||||||
CollectionMappingStrategyPrism cms = method.getMapperConfiguration().getCollectionMappingStrategy();
|
|
||||||
return method.getResultType().getPropertyWriteAccessors( cms ).containsKey( name );
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mapping reverse(SourceMethod method, FormattingMessager messager, TypeFactory typeFactory) {
|
public Mapping reverse(SourceMethod method, FormattingMessager messager, TypeFactory typeFactory) {
|
||||||
|
|
||||||
// mapping can only be reversed if the source was not a constant nor an expression nor a nested property
|
// mapping can only be reversed if the source was not a constant nor an expression nor a nested property
|
||||||
@ -426,6 +420,12 @@ public class Mapping {
|
|||||||
true,
|
true,
|
||||||
sourceReference != null ? sourceReference.getParameter() : null
|
sourceReference != null ? sourceReference.getParameter() : null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// check if the reverse mapping has indeed a write accessor, otherwise the mapping cannot be reversed
|
||||||
|
if ( !reverse.targetReference.isValid() ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return reverse;
|
return reverse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ public class TargetReference {
|
|||||||
foundEntryMatch = (entries.size() == targetPropertyNames.length);
|
foundEntryMatch = (entries.size() == targetPropertyNames.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !foundEntryMatch && errorMessage != null) {
|
if ( !foundEntryMatch && errorMessage != null && !isReverse ) {
|
||||||
// This is called only for reporting errors
|
// This is called only for reporting errors
|
||||||
errorMessage.report( isReverse );
|
errorMessage.report( isReverse );
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.bugs._1345;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritInverseConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface Issue1345Mapper {
|
||||||
|
|
||||||
|
Issue1345Mapper INSTANCE = Mappers.getMapper( Issue1345Mapper.class );
|
||||||
|
|
||||||
|
@Mapping(target = "property", source = "readOnlyProperty")
|
||||||
|
B a2B(A a);
|
||||||
|
|
||||||
|
@InheritInverseConfiguration(name = "a2B")
|
||||||
|
A b2A(B b);
|
||||||
|
|
||||||
|
class A {
|
||||||
|
|
||||||
|
private String readOnlyProperty;
|
||||||
|
|
||||||
|
public String getReadOnlyProperty() {
|
||||||
|
return readOnlyProperty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class B {
|
||||||
|
|
||||||
|
private String property;
|
||||||
|
|
||||||
|
public String getProperty() {
|
||||||
|
return property;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProperty(String property) {
|
||||||
|
this.property = property;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
|
||||||
|
* and/or other contributors as indicated by the @authors tag. See the
|
||||||
|
* copyright.txt file in the distribution for a full listing of all
|
||||||
|
* contributors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.mapstruct.ap.test.bugs._1345;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mapstruct.ap.testutil.IssueKey;
|
||||||
|
import org.mapstruct.ap.testutil.WithClasses;
|
||||||
|
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@WithClasses({
|
||||||
|
Issue1345Mapper.class
|
||||||
|
})
|
||||||
|
@IssueKey("1345")
|
||||||
|
@RunWith(AnnotationProcessorTestRunner.class)
|
||||||
|
public class Issue1345Test {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCompile() {
|
||||||
|
}
|
||||||
|
}
|
@ -183,8 +183,8 @@ public class NestedSourcePropertiesTest {
|
|||||||
diagnostics = {
|
diagnostics = {
|
||||||
@Diagnostic( type = ArtistToChartEntryErroneous.class,
|
@Diagnostic( type = ArtistToChartEntryErroneous.class,
|
||||||
kind = javax.tools.Diagnostic.Kind.ERROR,
|
kind = javax.tools.Diagnostic.Kind.ERROR,
|
||||||
line = 46,
|
line = 47,
|
||||||
messageRegExp = "Unknown property \"position\" in result type java\\.lang\\.Integer\\." )
|
messageRegExp = "java.lang.Integer does not have an accessible empty constructor." )
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@WithClasses({ ArtistToChartEntryErroneous.class })
|
@WithClasses({ ArtistToChartEntryErroneous.class })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user