mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#156 correctly handle imports / fully qualified names for @TargetType class literals
This commit is contained in:
parent
e5b9ee2cb1
commit
c051741824
@ -24,7 +24,7 @@
|
|||||||
return<#if returnType.name != "void"> null</#if>;
|
return<#if returnType.name != "void"> null</#if>;
|
||||||
}
|
}
|
||||||
|
|
||||||
<#if !existingInstanceMapping><@includeModel object=resultType/> ${resultName} = <#if factoryMethod??><@includeModel object=factoryMethod targetType="${resultType.name}"/><#else>new <@includeModel object=resultType/>()</#if>;</#if>
|
<#if !existingInstanceMapping><@includeModel object=resultType/> ${resultName} = <#if factoryMethod??><@includeModel object=factoryMethod targetType=resultType raw=true/><#else>new <@includeModel object=resultType/>()</#if>;</#if>
|
||||||
<#if (sourceParameters?size > 1)>
|
<#if (sourceParameters?size > 1)>
|
||||||
<#list sourceParameters as sourceParam>
|
<#list sourceParameters as sourceParam>
|
||||||
if ( ${sourceParam.name} != null ) {
|
if ( ${sourceParam.name} != null ) {
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
targetAccessorName=targetAccessorName
|
targetAccessorName=targetAccessorName
|
||||||
sourceBeanName=sourceBeanName
|
sourceBeanName=sourceBeanName
|
||||||
sourceAccessorName=sourceAccessorName><#compress>
|
sourceAccessorName=sourceAccessorName><#compress>
|
||||||
<@includeModel object=mappingMethod input="${sourceBeanName}.${sourceAccessorName}()" targetType=targetType.name/>
|
<@includeModel object=mappingMethod input="${sourceBeanName}.${sourceAccessorName}()" targetType=targetType raw=true/>
|
||||||
</#compress></@assignResult>
|
</#compress></@assignResult>
|
||||||
<#-- b) simple conversion -->
|
<#-- b) simple conversion -->
|
||||||
<#elseif conversion??>
|
<#elseif conversion??>
|
||||||
|
@ -18,4 +18,4 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
|
|
||||||
-->
|
-->
|
||||||
<#if imported>${name}<#else>${fullyQualifiedName}</#if><#if (typeParameters?size > 0) ><<#list typeParameters as typeParameter><@includeModel object=typeParameter /><#if typeParameter_has_next>, </#if></#list>></#if>
|
<#if imported>${name}<#else>${fullyQualifiedName}</#if><#if (!ext.raw?? && typeParameters?size > 0) ><<#list typeParameters as typeParameter><@includeModel object=typeParameter /><#if typeParameter_has_next>, </#if></#list>></#if>
|
@ -24,6 +24,8 @@ import org.junit.Rule;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mapstruct.ap.test.imports.from.Foo;
|
import org.mapstruct.ap.test.imports.from.Foo;
|
||||||
|
import org.mapstruct.ap.test.imports.from.FooWrapper;
|
||||||
|
import org.mapstruct.ap.test.imports.referenced.GenericMapper;
|
||||||
import org.mapstruct.ap.test.imports.referenced.NotImportedDatatype;
|
import org.mapstruct.ap.test.imports.referenced.NotImportedDatatype;
|
||||||
import org.mapstruct.ap.test.imports.referenced.Source;
|
import org.mapstruct.ap.test.imports.referenced.Source;
|
||||||
import org.mapstruct.ap.test.imports.referenced.Target;
|
import org.mapstruct.ap.test.imports.referenced.Target;
|
||||||
@ -45,13 +47,24 @@ import org.mapstruct.ap.testutil.runner.GeneratedSource;
|
|||||||
List.class,
|
List.class,
|
||||||
Map.class,
|
Map.class,
|
||||||
Foo.class,
|
Foo.class,
|
||||||
org.mapstruct.ap.test.imports.to.Foo.class, Source.class, Target.class, NotImportedDatatype.class
|
org.mapstruct.ap.test.imports.to.Foo.class,
|
||||||
|
Source.class,
|
||||||
|
Target.class,
|
||||||
|
NotImportedDatatype.class,
|
||||||
|
GenericMapper.class,
|
||||||
|
FooWrapper.class,
|
||||||
|
org.mapstruct.ap.test.imports.to.FooWrapper.class,
|
||||||
|
SecondSourceTargetMapper.class
|
||||||
})
|
})
|
||||||
@RunWith(AnnotationProcessorTestRunner.class)
|
@RunWith(AnnotationProcessorTestRunner.class)
|
||||||
public class ConflictingTypesNamesTest {
|
public class ConflictingTypesNamesTest {
|
||||||
|
|
||||||
|
private GeneratedSource generatedSource = new GeneratedSource();
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public GeneratedSource generatedSource = new GeneratedSource();
|
public GeneratedSource getGeneratedSource() {
|
||||||
|
return generatedSource;
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mapperImportingTypesWithConflictingNamesCanBeGenerated() {
|
public void mapperImportingTypesWithConflictingNamesCanBeGenerated() {
|
||||||
@ -72,7 +85,8 @@ public class ConflictingTypesNamesTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void mapperNoUnecessaryImports() {
|
@IssueKey( "178" )
|
||||||
|
public void mapperHasNoUnecessaryImports() {
|
||||||
Source source = new Source();
|
Source source = new Source();
|
||||||
source.setNotImported( new NotImportedDatatype( 42 ) );
|
source.setNotImported( new NotImportedDatatype( 42 ) );
|
||||||
|
|
||||||
@ -83,4 +97,20 @@ public class ConflictingTypesNamesTest {
|
|||||||
|
|
||||||
generatedSource.forMapper( SourceTargetMapper.class ).containsNoImportFor( NotImportedDatatype.class );
|
generatedSource.forMapper( SourceTargetMapper.class ).containsNoImportFor( NotImportedDatatype.class );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@IssueKey( "156" )
|
||||||
|
public void importsForTargetTypes() {
|
||||||
|
FooWrapper source = new FooWrapper();
|
||||||
|
Foo value = new Foo();
|
||||||
|
value.setName( "foo" );
|
||||||
|
source.setValue( value );
|
||||||
|
|
||||||
|
org.mapstruct.ap.test.imports.to.FooWrapper result =
|
||||||
|
SecondSourceTargetMapper.INSTANCE.fooWrapperToFooWrapper( source );
|
||||||
|
|
||||||
|
assertThat( result ).isNotNull();
|
||||||
|
assertThat( result.getValue() ).isNotNull();
|
||||||
|
assertThat( result.getValue().getName() ).isEqualTo( "foo" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* 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.imports;
|
||||||
|
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.ap.test.imports.referenced.GenericMapper;
|
||||||
|
import org.mapstruct.ap.test.imports.to.FooWrapper;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andreas Gudian
|
||||||
|
*/
|
||||||
|
@Mapper( uses = GenericMapper.class )
|
||||||
|
public interface SecondSourceTargetMapper {
|
||||||
|
|
||||||
|
SecondSourceTargetMapper INSTANCE = Mappers.getMapper( SecondSourceTargetMapper.class );
|
||||||
|
|
||||||
|
FooWrapper fooWrapperToFooWrapper(org.mapstruct.ap.test.imports.from.FooWrapper foo);
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* 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.imports.from;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andreas Gudian
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FooWrapper {
|
||||||
|
private Foo value;
|
||||||
|
|
||||||
|
public Foo getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Foo value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
/**
|
||||||
|
* 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.imports.referenced;
|
||||||
|
|
||||||
|
import org.mapstruct.TargetType;
|
||||||
|
import org.mapstruct.ap.test.imports.from.Foo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andreas Gudian
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class GenericMapper {
|
||||||
|
|
||||||
|
@SuppressWarnings( "unchecked" )
|
||||||
|
public <T> T fromFoo(Foo fromFoo, @TargetType Class<T> toFooClass) {
|
||||||
|
if ( org.mapstruct.ap.test.imports.to.Foo.class == toFooClass ) {
|
||||||
|
org.mapstruct.ap.test.imports.to.Foo result = new org.mapstruct.ap.test.imports.to.Foo();
|
||||||
|
result.setName( fromFoo.getName() );
|
||||||
|
|
||||||
|
return (T) result;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* 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.imports.to;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Andreas Gudian
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FooWrapper {
|
||||||
|
private Foo value;
|
||||||
|
|
||||||
|
public Foo getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(Foo value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user