mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#2 Generating import statements for used types; Restructuring "complex" test case to make use of imports
This commit is contained in:
parent
d88cc1086a
commit
289286cdda
@ -18,7 +18,11 @@
|
||||
*/
|
||||
package org.mapstruct.ap.model;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import javax.annotation.Generated;
|
||||
|
||||
public class Mapper {
|
||||
|
||||
@ -28,6 +32,7 @@ public class Mapper {
|
||||
private final List<BeanMapping> beanMappings;
|
||||
private final List<Type> usedMapperTypes;
|
||||
private final Options options;
|
||||
private final SortedSet<Type> importedTypes;
|
||||
|
||||
public Mapper(String packageName, String interfaceName,
|
||||
String implementationName, List<BeanMapping> beanMappings, List<Type> usedMapperTypes, Options options) {
|
||||
@ -37,6 +42,40 @@ public class Mapper {
|
||||
this.beanMappings = beanMappings;
|
||||
this.usedMapperTypes = usedMapperTypes;
|
||||
this.options = options;
|
||||
this.importedTypes = determineImportedTypes();
|
||||
}
|
||||
|
||||
private SortedSet<Type> determineImportedTypes() {
|
||||
SortedSet<Type> importedTypes = new TreeSet<Type>();
|
||||
importedTypes.add( Type.forClass( Generated.class ) );
|
||||
|
||||
for ( BeanMapping beanMapping : beanMappings ) {
|
||||
addWithDependents( importedTypes, beanMapping.getSourceType() );
|
||||
addWithDependents( importedTypes, beanMapping.getTargetType() );
|
||||
|
||||
for ( PropertyMapping propertyMapping : beanMapping.getPropertyMappings() ) {
|
||||
addWithDependents( importedTypes, propertyMapping.getSourceType() );
|
||||
addWithDependents( importedTypes, propertyMapping.getTargetType() );
|
||||
}
|
||||
}
|
||||
|
||||
return importedTypes;
|
||||
}
|
||||
|
||||
private void addWithDependents(Collection<Type> collection, Type typeToAdd) {
|
||||
if ( typeToAdd == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ( typeToAdd.getPackageName() != null &&
|
||||
!typeToAdd.getPackageName().equals( packageName ) &&
|
||||
!typeToAdd.getPackageName().startsWith( "java.lang" ) ) {
|
||||
collection.add( typeToAdd );
|
||||
}
|
||||
|
||||
addWithDependents( collection, typeToAdd.getCollectionImplementationType() );
|
||||
addWithDependents( collection, typeToAdd.getIterableImplementationType() );
|
||||
addWithDependents( collection, typeToAdd.getElementType() );
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -81,4 +120,8 @@ public class Mapper {
|
||||
public Options getOptions() {
|
||||
return options;
|
||||
}
|
||||
|
||||
public SortedSet<Type> getImportedTypes() {
|
||||
return importedTypes;
|
||||
}
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ import java.util.concurrent.ConcurrentMap;
|
||||
*
|
||||
* @author Gunnar Morling
|
||||
*/
|
||||
public class Type {
|
||||
public class Type implements Comparable<Type> {
|
||||
|
||||
private final static Set<String> primitiveTypeNames = new HashSet<String>(
|
||||
Arrays.asList( "boolean", "char", "byte", "short", "int", "long", "float", "double" )
|
||||
@ -140,6 +140,10 @@ public class Type {
|
||||
return isIterableType;
|
||||
}
|
||||
|
||||
public String getFullyQualifiedName() {
|
||||
return packageName == null ? name : packageName + "." + name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if ( packageName == null ) {
|
||||
@ -203,4 +207,9 @@ public class Type {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Type o) {
|
||||
return getFullyQualifiedName().compareTo( o.getFullyQualifiedName() );
|
||||
}
|
||||
}
|
||||
|
@ -20,13 +20,9 @@
|
||||
-->
|
||||
package ${packageName};
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Generated;
|
||||
import java.util.Date;
|
||||
<#list importedTypes as importedType>
|
||||
import ${importedType.fullyQualifiedName};
|
||||
</#list>
|
||||
|
||||
@Generated(
|
||||
value = "org.mapstruct.ap.MappingProcessor"<#if options.suppressGeneratorTimestamp == false>,
|
||||
|
@ -37,7 +37,6 @@ import static org.fest.assertions.Assertions.assertThat;
|
||||
})
|
||||
public class DefaultCollectionImplementationTest extends MapperTestBase {
|
||||
|
||||
|
||||
@Test
|
||||
@IssueKey("6")
|
||||
public void shouldUseDefaultImplementationForList() {
|
||||
|
@ -24,6 +24,10 @@ import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mappers;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.Mappings;
|
||||
import org.mapstruct.ap.test.complex.source.Car;
|
||||
import org.mapstruct.ap.test.complex.source.Person;
|
||||
import org.mapstruct.ap.test.complex.target.CarDto;
|
||||
import org.mapstruct.ap.test.complex.target.PersonDto;
|
||||
|
||||
@Mapper(uses = DateMapper.class)
|
||||
public interface CarMapper {
|
||||
|
@ -23,6 +23,11 @@ import java.util.Arrays;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.List;
|
||||
|
||||
import org.mapstruct.ap.test.complex.source.Car;
|
||||
import org.mapstruct.ap.test.complex.source.Category;
|
||||
import org.mapstruct.ap.test.complex.source.Person;
|
||||
import org.mapstruct.ap.test.complex.target.CarDto;
|
||||
import org.mapstruct.ap.test.complex.target.PersonDto;
|
||||
import org.mapstruct.ap.testutil.MapperTestBase;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
import org.testng.annotations.Test;
|
||||
|
@ -16,11 +16,12 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mapstruct.ap.test.complex;
|
||||
package org.mapstruct.ap.test.complex.source;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class Car {
|
||||
|
||||
private String make;
|
@ -16,7 +16,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mapstruct.ap.test.complex;
|
||||
package org.mapstruct.ap.test.complex.source;
|
||||
|
||||
public enum Category {
|
||||
SEDAN, CONVERTIBLE, TRUCK;
|
@ -16,7 +16,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mapstruct.ap.test.complex;
|
||||
package org.mapstruct.ap.test.complex.source;
|
||||
|
||||
public class Person {
|
||||
|
@ -16,7 +16,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mapstruct.ap.test.complex;
|
||||
package org.mapstruct.ap.test.complex.target;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -16,7 +16,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.mapstruct.ap.test.complex;
|
||||
package org.mapstruct.ap.test.complex.target;
|
||||
|
||||
public class PersonDto {
|
||||
|
Loading…
x
Reference in New Issue
Block a user