mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#383 introduction of @InheritConfiguration to align update with create methods (single source)
This commit is contained in:
parent
3e81651455
commit
b2ef82ba5c
@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Advises the code generator to apply all the {@link Mapping}s from a mapping method to the annotated method
|
||||||
|
* as well. The method should have the same source type and target type.
|
||||||
|
* <p>
|
||||||
|
* A typical use case is annotating an update method (a method with the {@link MappingTarget} in which an existing
|
||||||
|
* target is updated) in order to copy all defined mappings.
|
||||||
|
* <p>
|
||||||
|
* If more than one matching method exists, the name of the method to inherit the configuration from must be
|
||||||
|
* specified via {@link #name()}
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Target( ElementType.METHOD )
|
||||||
|
@Retention( RetentionPolicy.SOURCE )
|
||||||
|
public @interface InheritConfiguration {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The name of the mapping method to inherit the mappings from. Needs only to be specified in case more than
|
||||||
|
* one method with matching source and target type exists.
|
||||||
|
*
|
||||||
|
* @return The name of the mapping method to inherit the mappings from.
|
||||||
|
*/
|
||||||
|
String name() default "";
|
||||||
|
}
|
@ -279,6 +279,14 @@ public class SourceMethod implements Method {
|
|||||||
&& equals( getResultType(), method.getSourceParameters().iterator().next().getType() );
|
&& equals( getResultType(), method.getSourceParameters().iterator().next().getType() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean isSame(SourceMethod method) {
|
||||||
|
return getSourceParameters().size() == 1 && method.getSourceParameters().size() == 1
|
||||||
|
&& equals( getSourceParameters().iterator().next().getType(),
|
||||||
|
method.getSourceParameters().iterator().next().getType())
|
||||||
|
&& equals( getResultType(), method.getResultType() );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc} {@link Method}
|
* {@inheritDoc} {@link Method}
|
||||||
*/
|
*/
|
||||||
@ -405,13 +413,15 @@ public class SourceMethod implements Method {
|
|||||||
/**
|
/**
|
||||||
* Merges in all the mappings configured via the given inverse mapping method, giving the locally defined mappings
|
* Merges in all the mappings configured via the given inverse mapping method, giving the locally defined mappings
|
||||||
* precedence.
|
* precedence.
|
||||||
|
* @param inverseMethod
|
||||||
|
* @param templateMethod
|
||||||
*/
|
*/
|
||||||
public void mergeWithInverseMappings(SourceMethod inverseMethod) {
|
public void mergeWithInverseMappings(SourceMethod inverseMethod, SourceMethod templateMethod) {
|
||||||
Map<String, List<Mapping>> newMappings = new HashMap<String, List<Mapping>>();
|
Map<String, List<Mapping>> newMappings = new HashMap<String, List<Mapping>>();
|
||||||
|
|
||||||
if ( inverseMethod != null && !inverseMethod.getMappings().isEmpty() ) {
|
if ( inverseMethod != null && !inverseMethod.getMappings().isEmpty() ) {
|
||||||
for ( List<Mapping> mappings : inverseMethod.getMappings().values() ) {
|
for ( List<Mapping> lmappings : inverseMethod.getMappings().values() ) {
|
||||||
for ( Mapping inverseMapping : mappings ) {
|
for ( Mapping inverseMapping : lmappings ) {
|
||||||
Mapping reversed = inverseMapping.reverse( this, messager, typeFactory );
|
Mapping reversed = inverseMapping.reverse( this, messager, typeFactory );
|
||||||
if ( reversed != null ) {
|
if ( reversed != null ) {
|
||||||
List<Mapping> mappingsOfProperty = newMappings.get( reversed.getTargetName() );
|
List<Mapping> mappingsOfProperty = newMappings.get( reversed.getTargetName() );
|
||||||
@ -425,6 +435,21 @@ public class SourceMethod implements Method {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( templateMethod != null && !templateMethod.getMappings().isEmpty() ) {
|
||||||
|
for ( List<Mapping> lmappings : templateMethod.getMappings().values() ) {
|
||||||
|
for ( Mapping templateMapping : lmappings ) {
|
||||||
|
if ( templateMapping != null ) {
|
||||||
|
List<Mapping> mappingsOfProperty = newMappings.get( templateMapping.getTargetName() );
|
||||||
|
if ( mappingsOfProperty == null ) {
|
||||||
|
mappingsOfProperty = new ArrayList<Mapping>();
|
||||||
|
newMappings.put( templateMapping.getTargetName(), mappingsOfProperty );
|
||||||
|
}
|
||||||
|
mappingsOfProperty.add( templateMapping );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ( getMappings().isEmpty() ) {
|
if ( getMappings().isEmpty() ) {
|
||||||
// the mapping method is configuredByReverseMappingMethod, see SourceMethod#setMappings()
|
// the mapping method is configuredByReverseMappingMethod, see SourceMethod#setMappings()
|
||||||
setMappings( newMappings );
|
setMappings( newMappings );
|
||||||
|
@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlElementDecl;
|
|||||||
import net.java.dev.hickory.prism.GeneratePrism;
|
import net.java.dev.hickory.prism.GeneratePrism;
|
||||||
import net.java.dev.hickory.prism.GeneratePrisms;
|
import net.java.dev.hickory.prism.GeneratePrisms;
|
||||||
import org.mapstruct.DecoratedWith;
|
import org.mapstruct.DecoratedWith;
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
import org.mapstruct.InheritInverseConfiguration;
|
import org.mapstruct.InheritInverseConfiguration;
|
||||||
import org.mapstruct.IterableMapping;
|
import org.mapstruct.IterableMapping;
|
||||||
import org.mapstruct.MapMapping;
|
import org.mapstruct.MapMapping;
|
||||||
@ -50,6 +51,7 @@ import org.mapstruct.TargetType;
|
|||||||
@GeneratePrism(value = MappingTarget.class, publicAccess = true),
|
@GeneratePrism(value = MappingTarget.class, publicAccess = true),
|
||||||
@GeneratePrism(value = DecoratedWith.class, publicAccess = true),
|
@GeneratePrism(value = DecoratedWith.class, publicAccess = true),
|
||||||
@GeneratePrism(value = MapperConfig.class, publicAccess = true),
|
@GeneratePrism(value = MapperConfig.class, publicAccess = true),
|
||||||
|
@GeneratePrism(value = InheritConfiguration.class, publicAccess = true),
|
||||||
@GeneratePrism(value = InheritInverseConfiguration.class, publicAccess = true),
|
@GeneratePrism(value = InheritInverseConfiguration.class, publicAccess = true),
|
||||||
@GeneratePrism(value = Qualifier.class, publicAccess = true),
|
@GeneratePrism(value = Qualifier.class, publicAccess = true),
|
||||||
@GeneratePrism(value = NullValueMapping.class, publicAccess = true),
|
@GeneratePrism(value = NullValueMapping.class, publicAccess = true),
|
||||||
|
@ -50,6 +50,7 @@ import org.mapstruct.ap.model.common.TypeFactory;
|
|||||||
import org.mapstruct.ap.model.source.SourceMethod;
|
import org.mapstruct.ap.model.source.SourceMethod;
|
||||||
import org.mapstruct.ap.option.Options;
|
import org.mapstruct.ap.option.Options;
|
||||||
import org.mapstruct.ap.prism.DecoratedWithPrism;
|
import org.mapstruct.ap.prism.DecoratedWithPrism;
|
||||||
|
import org.mapstruct.ap.prism.InheritConfigurationPrism;
|
||||||
import org.mapstruct.ap.prism.InheritInverseConfigurationPrism;
|
import org.mapstruct.ap.prism.InheritInverseConfigurationPrism;
|
||||||
import org.mapstruct.ap.prism.MapperPrism;
|
import org.mapstruct.ap.prism.MapperPrism;
|
||||||
import org.mapstruct.ap.processor.creation.MappingResolverImpl;
|
import org.mapstruct.ap.processor.creation.MappingResolverImpl;
|
||||||
@ -247,14 +248,19 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
}
|
}
|
||||||
|
|
||||||
SourceMethod inverseMappingMethod = getInverseMappingMethod( methods, method );
|
SourceMethod inverseMappingMethod = getInverseMappingMethod( methods, method );
|
||||||
|
SourceMethod templateMappingMethod = getTemplateMappingMethod( methods, method );
|
||||||
|
|
||||||
boolean hasFactoryMethod = false;
|
boolean hasFactoryMethod = false;
|
||||||
if ( method.isIterableMapping() ) {
|
if ( method.isIterableMapping() ) {
|
||||||
|
|
||||||
IterableMappingMethod.Builder builder = new IterableMappingMethod.Builder();
|
IterableMappingMethod.Builder builder = new IterableMappingMethod.Builder();
|
||||||
if ( method.getIterableMapping() == null && inverseMappingMethod != null &&
|
if ( method.getIterableMapping() == null ) {
|
||||||
inverseMappingMethod.getIterableMapping() != null ) {
|
if ( inverseMappingMethod != null && inverseMappingMethod.getIterableMapping() != null ) {
|
||||||
method.setIterableMapping( inverseMappingMethod.getIterableMapping() );
|
method.setIterableMapping( inverseMappingMethod.getIterableMapping() );
|
||||||
|
}
|
||||||
|
else if ( templateMappingMethod != null && templateMappingMethod.getIterableMapping() != null ) {
|
||||||
|
method.setIterableMapping( templateMappingMethod.getIterableMapping() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String dateFormat = null;
|
String dateFormat = null;
|
||||||
@ -278,9 +284,13 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
|
|
||||||
MapMappingMethod.Builder builder = new MapMappingMethod.Builder();
|
MapMappingMethod.Builder builder = new MapMappingMethod.Builder();
|
||||||
|
|
||||||
if ( method.getMapMapping() == null && inverseMappingMethod != null &&
|
if ( method.getMapMapping() == null ) {
|
||||||
inverseMappingMethod.getMapMapping() != null ) {
|
if ( inverseMappingMethod != null && inverseMappingMethod.getMapMapping() != null ) {
|
||||||
method.setMapMapping( inverseMappingMethod.getMapMapping() );
|
method.setMapMapping( inverseMappingMethod.getMapMapping() );
|
||||||
|
}
|
||||||
|
else if ( templateMappingMethod != null && templateMappingMethod.getMapMapping() != null ) {
|
||||||
|
method.setMapMapping( templateMappingMethod.getMapMapping() );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String keyDateFormat = null;
|
String keyDateFormat = null;
|
||||||
String valueDateFormat = null;
|
String valueDateFormat = null;
|
||||||
@ -308,7 +318,7 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
else if ( method.isEnumMapping() ) {
|
else if ( method.isEnumMapping() ) {
|
||||||
|
|
||||||
EnumMappingMethod.Builder builder = new EnumMappingMethod.Builder();
|
EnumMappingMethod.Builder builder = new EnumMappingMethod.Builder();
|
||||||
method.mergeWithInverseMappings( inverseMappingMethod );
|
method.mergeWithInverseMappings( inverseMappingMethod, templateMappingMethod );
|
||||||
MappingMethod enumMappingMethod = builder
|
MappingMethod enumMappingMethod = builder
|
||||||
.mappingContext( mappingContext )
|
.mappingContext( mappingContext )
|
||||||
.souceMethod( method )
|
.souceMethod( method )
|
||||||
@ -321,7 +331,7 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
else {
|
else {
|
||||||
|
|
||||||
BeanMappingMethod.Builder builder = new BeanMappingMethod.Builder();
|
BeanMappingMethod.Builder builder = new BeanMappingMethod.Builder();
|
||||||
method.mergeWithInverseMappings( inverseMappingMethod );
|
method.mergeWithInverseMappings( inverseMappingMethod, templateMappingMethod );
|
||||||
BeanMappingMethod beanMappingMethod = builder
|
BeanMappingMethod beanMappingMethod = builder
|
||||||
.mappingContext( mappingContext )
|
.mappingContext( mappingContext )
|
||||||
.souceMethod( method )
|
.souceMethod( method )
|
||||||
@ -422,6 +432,90 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the configuring forward method in case the given method is annotated with
|
||||||
|
* {@code @InheritConfiguration} and exactly one such configuring method can unambiguously be selected (as
|
||||||
|
* per the source/target type and optionally the name given via {@code @InheritConfiguration}).
|
||||||
|
*
|
||||||
|
* The method cannot be marked forward mapping itself (hence 'ohter'). And neither can it contain an
|
||||||
|
* {@code @InheritReverseConfiguration}
|
||||||
|
*/
|
||||||
|
private SourceMethod getTemplateMappingMethod(List<SourceMethod> rawMethods, SourceMethod method) {
|
||||||
|
SourceMethod result = null;
|
||||||
|
InheritConfigurationPrism forwardPrism = InheritConfigurationPrism.getInstanceOn(
|
||||||
|
method.getExecutable()
|
||||||
|
);
|
||||||
|
|
||||||
|
if (forwardPrism != null) {
|
||||||
|
reportErrorWhenInheritForwardAlsoHasInheritReverseMapping( method );
|
||||||
|
|
||||||
|
// method is configured as being reverse method, collect candidates
|
||||||
|
List<SourceMethod> candidates = new ArrayList<SourceMethod>();
|
||||||
|
for ( SourceMethod oneMethod : rawMethods ) {
|
||||||
|
// method must be similar but not equal
|
||||||
|
if ( oneMethod.isSame( method ) && !( oneMethod.equals( method ) ) ) {
|
||||||
|
candidates.add( oneMethod );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = forwardPrism.name();
|
||||||
|
if ( candidates.size() == 1 ) {
|
||||||
|
// no ambiguity: if no configuredBy is specified, or configuredBy specified and match
|
||||||
|
if ( name.isEmpty() ) {
|
||||||
|
result = candidates.get( 0 );
|
||||||
|
}
|
||||||
|
else if ( candidates.get( 0 ).getName().equals( name ) ) {
|
||||||
|
result = candidates.get( 0 );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
reportErrorWhenNonMatchingName( candidates.get( 0 ), method, forwardPrism );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( candidates.size() > 1 ) {
|
||||||
|
// ambiguity: find a matching method that matches configuredBy
|
||||||
|
|
||||||
|
List<SourceMethod> nameFilteredcandidates = new ArrayList<SourceMethod>();
|
||||||
|
for ( SourceMethod candidate : candidates ) {
|
||||||
|
if ( candidate.getName().equals( name ) ) {
|
||||||
|
nameFilteredcandidates.add( candidate );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( nameFilteredcandidates.size() == 1 ) {
|
||||||
|
result = nameFilteredcandidates.get( 0 );
|
||||||
|
}
|
||||||
|
else if ( nameFilteredcandidates.size() > 1 ) {
|
||||||
|
reportErrorWhenSeveralNamesMatch( nameFilteredcandidates, method, forwardPrism );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( result == null ) {
|
||||||
|
reportErrorWhenAmbigousMapping( candidates, method, forwardPrism );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( result != null ) {
|
||||||
|
reportErrorIfMethodHasAnnotation( result, method, forwardPrism );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportErrorWhenInheritForwardAlsoHasInheritReverseMapping(SourceMethod method) {
|
||||||
|
InheritInverseConfigurationPrism reversePrism = InheritInverseConfigurationPrism.getInstanceOn(
|
||||||
|
method.getExecutable()
|
||||||
|
);
|
||||||
|
if ( reversePrism != null ) {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
"Method cannot be annotated with both a @InheritConfiguration and @InheritInverseConfiguration",
|
||||||
|
method.getExecutable(),
|
||||||
|
reversePrism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void reportErrorIfInverseMethodHasInheritAnnotation(SourceMethod candidate,
|
private void reportErrorIfInverseMethodHasInheritAnnotation(SourceMethod candidate,
|
||||||
SourceMethod method,
|
SourceMethod method,
|
||||||
InheritInverseConfigurationPrism reversePrism) {
|
InheritInverseConfigurationPrism reversePrism) {
|
||||||
@ -442,6 +536,21 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
reversePrism.mirror
|
reversePrism.mirror
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InheritConfigurationPrism candidateTemplatePrism = InheritConfigurationPrism.getInstanceOn(
|
||||||
|
candidate.getExecutable()
|
||||||
|
);
|
||||||
|
if ( candidateTemplatePrism != null ) {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Resolved inverse mapping method %s() should not carry the @InheritConfiguration annotation.",
|
||||||
|
candidate.getName()
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
reversePrism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reportErrorWhenAmbigousReverseMapping(List<SourceMethod> candidates, SourceMethod method,
|
private void reportErrorWhenAmbigousReverseMapping(List<SourceMethod> candidates, SourceMethod method,
|
||||||
@ -492,7 +601,7 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void reportErrorWhenNonMatchingName(SourceMethod onlyCandidate, SourceMethod method,
|
private void reportErrorWhenNonMatchingName(SourceMethod onlyCandidate, SourceMethod method,
|
||||||
InheritInverseConfigurationPrism reversePrism) {
|
InheritInverseConfigurationPrism reversePrism) {
|
||||||
|
|
||||||
messager.printMessage(
|
messager.printMessage(
|
||||||
Diagnostic.Kind.ERROR,
|
Diagnostic.Kind.ERROR,
|
||||||
@ -504,4 +613,104 @@ public class MapperCreationProcessor implements ModelElementProcessor<List<Sourc
|
|||||||
reversePrism.mirror
|
reversePrism.mirror
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void reportErrorIfMethodHasAnnotation(SourceMethod candidate,
|
||||||
|
SourceMethod method,
|
||||||
|
InheritConfigurationPrism prism) {
|
||||||
|
|
||||||
|
InheritConfigurationPrism candidatePrism = InheritConfigurationPrism.getInstanceOn(
|
||||||
|
candidate.getExecutable()
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( candidatePrism != null ) {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Resolved mapping method %s() should not carry the @InheritConfiguration annotation itself.",
|
||||||
|
candidate.getName()
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
InheritInverseConfigurationPrism candidateInversePrism = InheritInverseConfigurationPrism.getInstanceOn(
|
||||||
|
candidate.getExecutable()
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( candidateInversePrism != null ) {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Resolved mapping method %s() should not carry the @InheritInverseConfiguration annotation.",
|
||||||
|
candidate.getName()
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportErrorWhenAmbigousMapping(List<SourceMethod> candidates, SourceMethod method,
|
||||||
|
InheritConfigurationPrism prism) {
|
||||||
|
|
||||||
|
List<String> candidateNames = new ArrayList<String>();
|
||||||
|
for ( SourceMethod candidate : candidates ) {
|
||||||
|
candidateNames.add( candidate.getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
String name = prism.name();
|
||||||
|
if ( name.isEmpty() ) {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Several matching methods exist: %s(). Specify a name explicitly.",
|
||||||
|
Strings.join( candidateNames, "(), " )
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"None of the candidates %s() matches given name: \"%s\".",
|
||||||
|
Strings.join( candidateNames, "(), " ), name
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportErrorWhenSeveralNamesMatch(List<SourceMethod> candidates, SourceMethod method,
|
||||||
|
InheritConfigurationPrism prism) {
|
||||||
|
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Given name \"%s\" matches several candidate methods: %s().",
|
||||||
|
prism.name(), Strings.join( candidates, "(), " )
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prism.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reportErrorWhenNonMatchingName(SourceMethod onlyCandidate, SourceMethod method,
|
||||||
|
InheritConfigurationPrism prims) {
|
||||||
|
|
||||||
|
messager.printMessage(
|
||||||
|
Diagnostic.Kind.ERROR,
|
||||||
|
String.format(
|
||||||
|
"Given name \"%s\" does not match the only candidate. Did you mean: \"%s\".",
|
||||||
|
prims.name(), onlyCandidate.getName()
|
||||||
|
),
|
||||||
|
method.getExecutable(),
|
||||||
|
prims.mirror
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -120,18 +120,43 @@ public class InheritInverseConfigurationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@WithClasses({ SourceTargetMapperErroneouslyAnnotated.class })
|
@WithClasses({ SourceTargetMapperErroneouslyAnnotated1.class })
|
||||||
@ExpectedCompilationOutcome(
|
@ExpectedCompilationOutcome(
|
||||||
value = CompilationResult.FAILED,
|
value = CompilationResult.FAILED,
|
||||||
diagnostics = {
|
diagnostics = {
|
||||||
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated.class,
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated1.class,
|
||||||
kind = Kind.ERROR,
|
kind = Kind.ERROR,
|
||||||
line = 49,
|
line = 50,
|
||||||
messageRegExp = "Resolved inverse mapping method reverse\\(\\) should not carry the "
|
messageRegExp = "Resolved inverse mapping method reverse\\(\\) should not carry the "
|
||||||
+ "@InheritInverseConfiguration annotation itself.")
|
+ "@InheritInverseConfiguration annotation itself.")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
public void shouldUseWronglyAnnotatedError() {
|
public void shouldUseWronglyAnnotatedError1() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperErroneouslyAnnotated2.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated2.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 45,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropX, integerPropX, "
|
||||||
|
+ "someConstantDownstream, propertyToIgnoreDownstream\""),
|
||||||
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated2.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 47,
|
||||||
|
messageRegExp = "Resolved inverse mapping method forward2\\(\\) should not carry "
|
||||||
|
+ "the @InheritConfiguration annotation"),
|
||||||
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated2.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 48,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropY, integerPropY, "
|
||||||
|
+ "propertyNotToIgnoreUpstream\"")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldUseWronglyAnnotatedError2() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -152,4 +177,5 @@ public class InheritInverseConfigurationTest {
|
|||||||
)
|
)
|
||||||
public void shouldAdviseOnSpecifyingCorrectName() {
|
public void shouldAdviseOnSpecifyingCorrectName() {
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,9 +28,10 @@ import org.mapstruct.factory.Mappers;
|
|||||||
* @author Sjaak Derksen
|
* @author Sjaak Derksen
|
||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface SourceTargetMapperErroneouslyAnnotated {
|
public interface SourceTargetMapperErroneouslyAnnotated1 {
|
||||||
|
|
||||||
SourceTargetMapperErroneouslyAnnotated INSTANCE = Mappers.getMapper( SourceTargetMapperErroneouslyAnnotated.class );
|
SourceTargetMapperErroneouslyAnnotated1 INSTANCE =
|
||||||
|
Mappers.getMapper( SourceTargetMapperErroneouslyAnnotated1.class );
|
||||||
|
|
||||||
@Mappings({
|
@Mappings({
|
||||||
@Mapping(source = "stringPropX", target = "stringPropY"),
|
@Mapping(source = "stringPropX", target = "stringPropY"),
|
@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.reverse;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.InheritInverseConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperErroneouslyAnnotated2 {
|
||||||
|
|
||||||
|
SourceTargetMapperErroneouslyAnnotated2 INSTANCE
|
||||||
|
= Mappers.getMapper( SourceTargetMapperErroneouslyAnnotated2.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(source = "stringPropX", target = "stringPropY"),
|
||||||
|
@Mapping(source = "integerPropX", target = "integerPropY"),
|
||||||
|
@Mapping(source = "propertyToIgnoreDownstream", target = "propertyNotToIgnoreUpstream")
|
||||||
|
})
|
||||||
|
Target forward(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration(name = "forward2")
|
||||||
|
Source forward2(Target target);
|
||||||
|
|
||||||
|
@InheritInverseConfiguration(name = "forward2")
|
||||||
|
Target reverse(Source source);
|
||||||
|
}
|
@ -0,0 +1,205 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
|
||||||
|
import javax.tools.Diagnostic.Kind;
|
||||||
|
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;
|
||||||
|
|
||||||
|
import static org.fest.assertions.Assertions.assertThat;
|
||||||
|
import org.mapstruct.ap.testutil.compilation.annotation.CompilationResult;
|
||||||
|
import org.mapstruct.ap.testutil.compilation.annotation.Diagnostic;
|
||||||
|
import org.mapstruct.ap.testutil.compilation.annotation.ExpectedCompilationOutcome;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@IssueKey("383")
|
||||||
|
@WithClasses({ Source.class, NestedSource.class, Target.class })
|
||||||
|
@RunWith(AnnotationProcessorTestRunner.class)
|
||||||
|
public class InheritConfigurationTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperSingle.class })
|
||||||
|
public void shouldInheritConfigurationSingleCandidates() {
|
||||||
|
|
||||||
|
Source source = new Source();
|
||||||
|
source.setStringPropX( "1" );
|
||||||
|
source.setIntegerPropX( 2 );
|
||||||
|
source.setNestedSourceProp( new NestedSource("nested") );
|
||||||
|
|
||||||
|
Target createdTarget = SourceTargetMapperSingle.INSTANCE.forwardCreate( source );
|
||||||
|
assertThat( createdTarget ).isNotNull();
|
||||||
|
assertThat( createdTarget.getStringPropY() ).isEqualTo( "1" );
|
||||||
|
assertThat( createdTarget.getIntegerPropY() ).isEqualTo( 2 );
|
||||||
|
assertThat( createdTarget.getNestedResultProp() ).isEqualTo( "nested");
|
||||||
|
assertThat( createdTarget.getExpressionProp() ).isEqualTo( "expression" );
|
||||||
|
assertThat( createdTarget.getConstantProp() ).isEqualTo( "constant" );
|
||||||
|
|
||||||
|
Target updatedTarget = new Target();
|
||||||
|
SourceTargetMapperSingle.INSTANCE.forwardUpdate( source, updatedTarget );
|
||||||
|
assertThat( updatedTarget ).isNotNull();
|
||||||
|
assertThat( updatedTarget.getStringPropY() ).isEqualTo( "1" );
|
||||||
|
assertThat( updatedTarget.getIntegerPropY() ).isEqualTo( 2 );
|
||||||
|
assertThat( updatedTarget.getNestedResultProp() ).isEqualTo( "nested" );
|
||||||
|
assertThat( updatedTarget.getExpressionProp() ).isEqualTo( "expression" );
|
||||||
|
assertThat( updatedTarget.getConstantProp() ).isEqualTo( "constant" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperMultiple.class })
|
||||||
|
public void shouldInheritConfigurationMultipleCandidates() {
|
||||||
|
|
||||||
|
Source source = new Source();
|
||||||
|
source.setStringPropX( "1" );
|
||||||
|
source.setIntegerPropX( 2 );
|
||||||
|
source.setNestedSourceProp( new NestedSource("nested") );
|
||||||
|
|
||||||
|
Target createdTarget = SourceTargetMapperSingle.INSTANCE.forwardCreate( source );
|
||||||
|
assertThat( createdTarget ).isNotNull();
|
||||||
|
assertThat( createdTarget.getStringPropY() ).isEqualTo( "1" );
|
||||||
|
assertThat( createdTarget.getIntegerPropY() ).isEqualTo( 2 );
|
||||||
|
assertThat( createdTarget.getNestedResultProp() ).isEqualTo( "nested");
|
||||||
|
assertThat( createdTarget.getExpressionProp() ).isEqualTo( "expression" );
|
||||||
|
assertThat( createdTarget.getConstantProp() ).isEqualTo( "constant" );
|
||||||
|
|
||||||
|
Target updatedTarget = new Target();
|
||||||
|
SourceTargetMapperSingle.INSTANCE.forwardUpdate( source, updatedTarget );
|
||||||
|
assertThat( updatedTarget ).isNotNull();
|
||||||
|
assertThat( updatedTarget.getStringPropY() ).isEqualTo( "1" );
|
||||||
|
assertThat( updatedTarget.getIntegerPropY() ).isEqualTo( 2 );
|
||||||
|
assertThat( updatedTarget.getNestedResultProp() ).isEqualTo( "nested" );
|
||||||
|
assertThat( updatedTarget.getExpressionProp() ).isEqualTo( "expression" );
|
||||||
|
assertThat( updatedTarget.getConstantProp() ).isEqualTo( "constant" );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperAmbiguous1.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous1.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 54,
|
||||||
|
messageRegExp = "Several matching methods exist: forwardCreate\\(\\), "
|
||||||
|
+ "forwardCreate1\\(\\). Specify a name explicitly."),
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous1.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 55,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropY, nestedResultProp, integerPropY, "
|
||||||
|
+ "constantProp, expressionProp\"")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldRaiseAmbiguousReverseMethodError() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperAmbiguous2.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous2.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 54,
|
||||||
|
messageRegExp = "None of the candidates forwardCreate\\(\\), forwardCreate1\\(\\) matches given "
|
||||||
|
+ "name: \"blah\"."),
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous2.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 55,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropY, nestedResultProp, integerPropY, "
|
||||||
|
+ "constantProp, expressionProp\"")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldRaiseAmbiguousReverseMethodErrorWrongName() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperAmbiguous3.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous3.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 54,
|
||||||
|
messageRegExp = "Given name \"forwardCreate\" matches several candidate methods: "
|
||||||
|
+ ".*forwardCreate.*\\(\\), .*forwardCreate.*\\(\\)"),
|
||||||
|
@Diagnostic(type = SourceTargetMapperAmbiguous3.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 55,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropY, nestedResultProp, integerPropY, "
|
||||||
|
+ "constantProp, expressionProp\"") }
|
||||||
|
)
|
||||||
|
public void shouldRaiseAmbiguousReverseMethodErrorDuplicatedName() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperErroneouslyAnnotated1.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated1.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 49,
|
||||||
|
messageRegExp = "Resolved mapping method forwardCreate1\\(\\) should not carry the "
|
||||||
|
+ "@InheritConfiguration annotation itself.")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldUseWronglyAnnotatedError1() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperErroneouslyAnnotated2.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperErroneouslyAnnotated2.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 51,
|
||||||
|
messageRegExp = "Resolved mapping method forwardCreate\\(\\) should not carry the "
|
||||||
|
+ "@InheritInverseConfiguration annotation.")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldUseWronglyAnnotatedError2() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@WithClasses({ SourceTargetMapperNonMatchingName.class })
|
||||||
|
@ExpectedCompilationOutcome(
|
||||||
|
value = CompilationResult.FAILED,
|
||||||
|
diagnostics = {
|
||||||
|
@Diagnostic(type = SourceTargetMapperNonMatchingName.class,
|
||||||
|
kind = Kind.ERROR,
|
||||||
|
line = 45,
|
||||||
|
messageRegExp = "Given name \"blah\" does not match the only candidate. Did you mean: "
|
||||||
|
+ "\"forwardCreate\"."),
|
||||||
|
@Diagnostic(type = SourceTargetMapperNonMatchingName.class,
|
||||||
|
kind = Kind.WARNING,
|
||||||
|
line = 46,
|
||||||
|
messageRegExp = "Unmapped target properties: \"stringPropY, nestedResultProp, integerPropY, "
|
||||||
|
+ "constantProp, expressionProp\"")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
public void shouldAdviseOnSpecifyingCorrectName() {
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class NestedSource {
|
||||||
|
|
||||||
|
private String nested;
|
||||||
|
|
||||||
|
public NestedSource(String nested) {
|
||||||
|
this.nested = nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getNested() {
|
||||||
|
return nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNested(String nested) {
|
||||||
|
this.nested = nested;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class Source {
|
||||||
|
|
||||||
|
private String stringPropX;
|
||||||
|
|
||||||
|
private Integer integerPropX;
|
||||||
|
|
||||||
|
private NestedSource nestedSourceProp;
|
||||||
|
|
||||||
|
|
||||||
|
public String getStringPropX() {
|
||||||
|
return stringPropX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringPropX(String stringPropX) {
|
||||||
|
this.stringPropX = stringPropX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getIntegerPropX() {
|
||||||
|
return integerPropX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntegerPropX(Integer integerPropX) {
|
||||||
|
this.integerPropX = integerPropX;
|
||||||
|
}
|
||||||
|
|
||||||
|
public NestedSource getNestedSourceProp() {
|
||||||
|
return nestedSourceProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNestedSourceProp(NestedSource nestedSourceProp) {
|
||||||
|
this.nestedSourceProp = nestedSourceProp;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperAmbiguous1 {
|
||||||
|
|
||||||
|
SourceTargetMapperAmbiguous1 INSTANCE = Mappers.getMapper( SourceTargetMapperAmbiguous1.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate1(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperAmbiguous2 {
|
||||||
|
|
||||||
|
SourceTargetMapperAmbiguous2 INSTANCE = Mappers.getMapper( SourceTargetMapperAmbiguous2.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate1(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "blah" )
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperAmbiguous3 {
|
||||||
|
|
||||||
|
SourceTargetMapperAmbiguous3 INSTANCE = Mappers.getMapper( SourceTargetMapperAmbiguous3.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")"),
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")"),
|
||||||
|
})
|
||||||
|
void forwardCreate(Source source, @MappingTarget Target target);
|
||||||
|
|
||||||
|
@InheritConfiguration(name = "forwardCreate")
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperErroneouslyAnnotated1 {
|
||||||
|
|
||||||
|
SourceTargetMapperErroneouslyAnnotated1 INSTANCE =
|
||||||
|
Mappers.getMapper( SourceTargetMapperErroneouslyAnnotated1.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX"),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX"),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "forwardCreate" )
|
||||||
|
Target forwardCreate1(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "forwardCreate1" )
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.InheritInverseConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperErroneouslyAnnotated2 {
|
||||||
|
|
||||||
|
SourceTargetMapperErroneouslyAnnotated2 INSTANCE =
|
||||||
|
Mappers.getMapper( SourceTargetMapperErroneouslyAnnotated2.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX"),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX"),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@InheritInverseConfiguration(name = "forwardCreate")
|
||||||
|
@Mapping(target = "nestedSourceProp", ignore = true)
|
||||||
|
Source forwardCreate(Target source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "forwardCreate" )
|
||||||
|
void forwardUpdate(Target source, @MappingTarget Source target);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperMultiple {
|
||||||
|
|
||||||
|
SourceTargetMapperMultiple INSTANCE = Mappers.getMapper( SourceTargetMapperMultiple.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")"),
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")"),
|
||||||
|
})
|
||||||
|
Target forwardCreate2(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "forwardCreate" )
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperNonMatchingName {
|
||||||
|
|
||||||
|
SourceTargetMapperNonMatchingName INSTANCE = Mappers.getMapper( SourceTargetMapperNonMatchingName.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")")
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
@InheritConfiguration( name = "blah" )
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
}
|
@ -0,0 +1,49 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
import org.mapstruct.InheritConfiguration;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mapping;
|
||||||
|
import org.mapstruct.MappingTarget;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
public interface SourceTargetMapperSingle {
|
||||||
|
|
||||||
|
SourceTargetMapperSingle INSTANCE = Mappers.getMapper( SourceTargetMapperSingle.class );
|
||||||
|
|
||||||
|
@Mappings({
|
||||||
|
@Mapping(target = "stringPropY", source = "stringPropX" ),
|
||||||
|
@Mapping(target = "integerPropY", source = "integerPropX" ),
|
||||||
|
@Mapping(target = "nestedResultProp", source = "nestedSourceProp.nested"),
|
||||||
|
@Mapping(target = "constantProp", constant = "constant"),
|
||||||
|
@Mapping(target = "expressionProp", expression = "java(\"expression\")"),
|
||||||
|
})
|
||||||
|
Target forwardCreate(Source source);
|
||||||
|
|
||||||
|
|
||||||
|
@InheritConfiguration
|
||||||
|
void forwardUpdate(Source source, @MappingTarget Target target);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2012-2014 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.template;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sjaak Derksen
|
||||||
|
*/
|
||||||
|
public class Target {
|
||||||
|
|
||||||
|
private String stringPropY;
|
||||||
|
|
||||||
|
private Integer integerPropY;
|
||||||
|
|
||||||
|
private String constantProp;
|
||||||
|
|
||||||
|
private String expressionProp;
|
||||||
|
|
||||||
|
private String nestedResultProp;
|
||||||
|
|
||||||
|
public String getStringPropY() {
|
||||||
|
return stringPropY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStringPropY(String stringPropY) {
|
||||||
|
this.stringPropY = stringPropY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getIntegerPropY() {
|
||||||
|
return integerPropY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIntegerPropY(Integer integerPropY) {
|
||||||
|
this.integerPropY = integerPropY;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getConstantProp() {
|
||||||
|
return constantProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConstantProp(String constantProp) {
|
||||||
|
this.constantProp = constantProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExpressionProp() {
|
||||||
|
return expressionProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpressionProp(String expressionProp) {
|
||||||
|
this.expressionProp = expressionProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNestedResultProp() {
|
||||||
|
return nestedResultProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNestedResultProp(String nestedResultProp) {
|
||||||
|
this.nestedResultProp = nestedResultProp;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user