From 0d2979a8832acbc2188913ae4081daf8e0fe4047 Mon Sep 17 00:00:00 2001 From: thunderhook <8238759+thunderhook@users.noreply.github.com> Date: Fri, 1 Mar 2024 23:58:13 +0100 Subject: [PATCH 1/2] #3524 provide tests with delomboked classes annotated with lomboks @SuperBuilder annotation --- .../ap/test/lombok/package-info.java | 9 + .../lombok/superbuilder/AbstractVehicle.java | 63 +++++++ .../superbuilder/AbstractVehicleDto.java | 20 +++ .../ap/test/lombok/superbuilder/Car.java | 82 +++++++++ .../ap/test/lombok/superbuilder/CarDto.java | 21 +++ .../test/lombok/superbuilder/CarMapper.java | 43 +++++ .../superbuilder/ChainedAccessorsCar.java | 118 +++++++++++++ .../superbuilder/ChainedAccessorsVehicle.java | 133 +++++++++++++++ .../superbuilder/InheritedAbstractCar.java | 70 ++++++++ .../superbuilder/InheritedAbstractCarDto.java | 21 +++ .../superbuilder/LombokSuperBuilderTest.java | 160 ++++++++++++++++++ .../test/lombok/superbuilder/MuscleCar.java | 68 ++++++++ .../lombok/superbuilder/MuscleCarDto.java | 21 +++ .../test/lombok/superbuilder/Passenger.java | 66 ++++++++ .../lombok/superbuilder/PassengerDto.java | 20 +++ .../ap/test/lombok/superbuilder/Vehicle.java | 66 ++++++++ .../test/lombok/superbuilder/VehicleDto.java | 25 +++ 17 files changed, 1006 insertions(+) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java new file mode 100644 index 0000000000..85b2352c01 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java @@ -0,0 +1,9 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +/** + * This package contains tests with delomboked classes. + */ +package org.mapstruct.ap.test.lombok; diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java new file mode 100644 index 0000000000..2139d9ffb6 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java @@ -0,0 +1,63 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of an abstract super class using a lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public abstract class AbstractVehicle {
+ *     private final int amountOfTires;
+ * }
+ * 
+ */ +public abstract class AbstractVehicle { + + private final int amountOfTires; + private final Passenger passenger; + + protected AbstractVehicle(AbstractVehicleBuilder b) { + this.amountOfTires = b.amountOfTires; + this.passenger = b.passenger; + } + + public int getAmountOfTires() { + return this.amountOfTires; + } + + public Passenger getPassenger() { + return this.passenger; + } + + // CHECKSTYLE:OFF + public static abstract class AbstractVehicleBuilder> { + // CHECKSTYLE:ON + private int amountOfTires; + private Passenger passenger; + + public B amountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return self(); + } + + public B passenger(Passenger passenger) { + this.passenger = passenger; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "AbstractVehicle.AbstractVehicleBuilder(amountOfTires=" + this.amountOfTires + ", passenger=" + + this.passenger + ")"; + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java new file mode 100644 index 0000000000..c9c4375591 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java @@ -0,0 +1,20 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public abstract class AbstractVehicleDto { + + private final int amountOfTires; + + public AbstractVehicleDto(int amountOfTires) { + this.amountOfTires = amountOfTires; + } + + public int getAmountOfTires() { + return amountOfTires; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java new file mode 100644 index 0000000000..e57f700777 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java @@ -0,0 +1,82 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a class inheriting a non-abstract super class + * via lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public class Car extends Vehicle {
+ *     private final String manufacturer;
+ *     private final Passenger passenger;
+ * }
+ * 
+ */ +public class Car extends Vehicle { + + private final String manufacturer; + private final Passenger passenger; + + protected Car(CarBuilder b) { + super( b ); + this.manufacturer = b.manufacturer; + this.passenger = b.passenger; + } + + public static CarBuilder builder() { + return new CarBuilderImpl(); + } + + public String getManufacturer() { + return this.manufacturer; + } + + public Passenger getPassenger() { + return this.passenger; + } + + // CHECKSTYLE:OFF + public static abstract class CarBuilder> extends VehicleBuilder { + // CHECKSTYLE:ON + private String manufacturer; + private Passenger passenger; + + public B manufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return self(); + } + + public B passenger(Passenger passenger) { + this.passenger = passenger; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "Car.CarBuilder(super=" + super.toString() + ", manufacturer=" + this.manufacturer + ", passenger=" + + this.passenger + ")"; + } + } + + private static final class CarBuilderImpl extends CarBuilder { + private CarBuilderImpl() { + } + + protected CarBuilderImpl self() { + return this; + } + + public Car build() { + return new Car( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java new file mode 100644 index 0000000000..f6c072804b --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java @@ -0,0 +1,21 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public class CarDto extends VehicleDto { + + private final String manufacturer; + + public CarDto(int amountOfTires, String manufacturer, PassengerDto passenger) { + super( amountOfTires, passenger ); + this.manufacturer = manufacturer; + } + + public String getManufacturer() { + return manufacturer; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java new file mode 100644 index 0000000000..2baf879eb7 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java @@ -0,0 +1,43 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +import org.mapstruct.InheritInverseConfiguration; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +@Mapper +public interface CarMapper { + + CarMapper INSTANCE = Mappers.getMapper( CarMapper.class ); + + @Mapping(target = "amountOfTires", source = "tireCount") + Car carDtoToCar(CarDto source); + + @InheritInverseConfiguration(name = "carDtoToCar") + CarDto carToCarDto(Car source); + + @Mapping(target = "amountOfTires", source = "tireCount") + ChainedAccessorsCar carDtoToChainedAccessorsCar(CarDto source); + + @InheritInverseConfiguration(name = "carDtoToChainedAccessorsCar") + CarDto chainedAccessorsCarToCarDto(ChainedAccessorsCar source); + + @Mapping(target = "amountOfTires", source = "tireCount") + InheritedAbstractCar carDtoToInheritedAbstractCar(CarDto source); + + @InheritInverseConfiguration(name = "carDtoToInheritedAbstractCar") + CarDto inheritedAbstractCarToCarDto(InheritedAbstractCar source); + + @Mapping(target = "amountOfTires", source = "tireCount") + @Mapping(target = "horsePower", constant = "140.5f") + MuscleCar carDtoToMuscleCar(CarDto source); + + @InheritInverseConfiguration(name = "carDtoToMuscleCar") + CarDto muscleCarToCarDto(MuscleCar source); + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java new file mode 100644 index 0000000000..85d7f5ff5d --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java @@ -0,0 +1,118 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a class inheriting a non-abstract super class + * via lombok.experimental.SuperBuilder. + *

+ *

+ * @EqualsAndHashCode(callSuper = true)
+ * @Data
+ * @SuperBuilder
+ * @Accessors(chain = true)
+ * public class ChainedAccessorsCar extends Vehicle {
+ *     private String manufacturer;
+ * }
+ * 
+ */ +public class ChainedAccessorsCar extends ChainedAccessorsVehicle { + + private String manufacturer; + + protected ChainedAccessorsCar(ChainedAccessorsCarBuilder b) { + super( b ); + this.manufacturer = b.manufacturer; + } + + public static ChainedAccessorsCarBuilder builder() { + return new ChainedAccessorsCarBuilderImpl(); + } + + public String getManufacturer() { + return this.manufacturer; + } + + public ChainedAccessorsCar setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return this; + } + + public String toString() { + return "ChainedAccessorsCar(manufacturer=" + this.getManufacturer() + ")"; + } + + public boolean equals(final Object o) { + if ( o == this ) { + return true; + } + if ( !( o instanceof ChainedAccessorsCar ) ) { + return false; + } + final ChainedAccessorsCar other = (ChainedAccessorsCar) o; + if ( !other.canEqual( (Object) this ) ) { + return false; + } + if ( !super.equals( o ) ) { + return false; + } + // CHECKSTYLE:OFF + final Object this$manufacturer = this.getManufacturer(); + final Object other$manufacturer = other.getManufacturer(); + if ( this$manufacturer == null ? other$manufacturer != null : + !this$manufacturer.equals( other$manufacturer ) ) { + return false; + } + // CHECKSTYLE:ON + return true; + } + + protected boolean canEqual(final Object other) { + return other instanceof ChainedAccessorsCar; + } + + // CHECKSTYLE:OFF + public int hashCode() { + final int PRIME = 59; + int result = super.hashCode(); + final Object $manufacturer = this.getManufacturer(); + result = result * PRIME + ( $manufacturer == null ? 43 : $manufacturer.hashCode() ); + return result; + } + + public static abstract class ChainedAccessorsCarBuilder> extends ChainedAccessorsVehicleBuilder { + // CHECKSTYLE:ON + private String manufacturer; + + public B manufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "ChainedAccessorsCar.ChainedAccessorsCarBuilder(super=" + super.toString() + ", manufacturer=" + + this.manufacturer + ")"; + } + } + + private static final class ChainedAccessorsCarBuilderImpl + extends ChainedAccessorsCarBuilder { + private ChainedAccessorsCarBuilderImpl() { + } + + protected ChainedAccessorsCarBuilderImpl self() { + return this; + } + + public ChainedAccessorsCar build() { + return new ChainedAccessorsCar( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java new file mode 100644 index 0000000000..885fa84c2b --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java @@ -0,0 +1,133 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a non-abstract super class using a lombok.experimental.SuperBuilder. + *

+ *

+ * @Data
+ * @SuperBuilder
+ * @Accessors(chain = true)
+ * @NoArgsConstructor
+ * @AllArgsConstructor
+ * public class ChainedAccessors {
+ *     private int amountOfTires;
+ *     private Passenger passenger;
+ * }
+ * 
+ */ +public class ChainedAccessorsVehicle { + private int amountOfTires; + private Passenger passenger; + + protected ChainedAccessorsVehicle(ChainedAccessorsVehicleBuilder b) { + this.amountOfTires = b.amountOfTires; + this.passenger = b.passenger; + } + + public static ChainedAccessorsVehicleBuilder builder() { + return new ChainedAccessorsVehicleBuilderImpl(); + } + + public int getAmountOfTires() { + return this.amountOfTires; + } + + public Passenger getPassenger() { + return this.passenger; + } + + public ChainedAccessorsVehicle setAmountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return this; + } + + public ChainedAccessorsVehicle setPassenger(Passenger passenger) { + this.passenger = passenger; + return this; + } + + // CHECKSTYLE:OFF + public boolean equals(final Object o) { + if ( o == this ) { + return true; + } + if ( !( o instanceof ChainedAccessorsVehicle ) ) { + return false; + } + final ChainedAccessorsVehicle other = (ChainedAccessorsVehicle) o; + if ( !other.canEqual( (Object) this ) ) { + return false; + } + if ( this.getAmountOfTires() != other.getAmountOfTires() ) { + return false; + } + final Object this$passenger = this.getPassenger(); + final Object other$passenger = other.getPassenger(); + if ( this$passenger == null ? other$passenger != null : !this$passenger.equals( other$passenger ) ) { + return false; + } + return true; + } + + protected boolean canEqual(final Object other) { + return other instanceof ChainedAccessorsVehicle; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + result = result * PRIME + this.getAmountOfTires(); + final Object $passenger = this.getPassenger(); + result = result * PRIME + ( $passenger == null ? 43 : $passenger.hashCode() ); + return result; + } + + public String toString() { + return "ChainedAccessorsVehicle(amountOfTires=" + this.getAmountOfTires() + ", passenger=" + + this.getPassenger() + ")"; + } + + public static abstract class ChainedAccessorsVehicleBuilder> { + // CHECKSTYLE:ON + private int amountOfTires; + private Passenger passenger; + + public B amountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return self(); + } + + public B passenger(Passenger passenger) { + this.passenger = passenger; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "ChainedAccessorsVehicle.ChainedAccessorsVehicleBuilder(amountOfTires=" + this.amountOfTires + + ", passenger=" + this.passenger + ")"; + } + } + + private static final class ChainedAccessorsVehicleBuilderImpl + extends ChainedAccessorsVehicleBuilder { + private ChainedAccessorsVehicleBuilderImpl() { + } + + protected ChainedAccessorsVehicleBuilderImpl self() { + return this; + } + + public ChainedAccessorsVehicle build() { + return new ChainedAccessorsVehicle( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java new file mode 100644 index 0000000000..beb9cb0129 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java @@ -0,0 +1,70 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a class inheriting an abstract super class via lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public class InheritedAbstractCar extends AbstractVehicle {
+ *     private final String manufacturer;
+ * }
+ * 
+ */ +public class InheritedAbstractCar extends AbstractVehicle { + + private final String manufacturer; + + protected InheritedAbstractCar(InheritedAbstractCarBuilder b) { + super( b ); + this.manufacturer = b.manufacturer; + } + + public static InheritedAbstractCarBuilder builder() { + return new InheritedAbstractCarBuilderImpl(); + } + + public String getManufacturer() { + return this.manufacturer; + } + + // CHECKSTYLE:OFF + public static abstract class InheritedAbstractCarBuilder> + // CHECKSTYLE:ON + extends AbstractVehicleBuilder { + private String manufacturer; + + public B manufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "InheritedAbstractCar.InheritedAbstractCarBuilder(super=" + super.toString() + ", manufacturer=" + + this.manufacturer + ")"; + } + } + + private static final class InheritedAbstractCarBuilderImpl + extends InheritedAbstractCarBuilder { + private InheritedAbstractCarBuilderImpl() { + } + + protected InheritedAbstractCarBuilderImpl self() { + return this; + } + + public InheritedAbstractCar build() { + return new InheritedAbstractCar( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java new file mode 100644 index 0000000000..7a0b6510c7 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java @@ -0,0 +1,21 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public class InheritedAbstractCarDto extends AbstractVehicleDto { + + private final String manufacturer; + + public InheritedAbstractCarDto(int amountOfTires, String manufacturer) { + super( amountOfTires ); + this.manufacturer = manufacturer; + } + + public String getManufacturer() { + return manufacturer; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java new file mode 100644 index 0000000000..d8a2ddc550 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java @@ -0,0 +1,160 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +import org.mapstruct.ap.testutil.IssueKey; +import org.mapstruct.ap.testutil.ProcessorTest; +import org.mapstruct.ap.testutil.WithClasses; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests the mapping of models annotated with @SuperBuilder as source and target. + * + * @author Oliver Erhart + */ +@WithClasses({ + AbstractVehicleDto.class, + CarDto.class, + InheritedAbstractCarDto.class, + MuscleCarDto.class, + PassengerDto.class, + VehicleDto.class, + AbstractVehicle.class, + Car.class, + ChainedAccessorsCar.class, + ChainedAccessorsVehicle.class, + InheritedAbstractCar.class, + MuscleCar.class, + Passenger.class, + Vehicle.class, + CarMapper.class +}) +@IssueKey("3524") +public class LombokSuperBuilderTest { + + @ProcessorTest + public void simpleMapping() { + + PassengerDto passenger = new PassengerDto( "Tom" ); + CarDto carDto = new CarDto( 4, "BMW", passenger ); + + Car car = CarMapper.INSTANCE.carDtoToCar( carDto ); + + assertThat( car.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( car.getAmountOfTires() ).isEqualTo( 4 ); + assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void simpleMappingInverse() { + + Passenger passenger = Passenger.builder().name( "Tom" ).build(); + Car car = Car.builder() + .manufacturer( "BMW" ) + .amountOfTires( 4 ) + .passenger( passenger ) + .build(); + + CarDto carDto = CarMapper.INSTANCE.carToCarDto( car ); + + assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( carDto.getTireCount() ).isEqualTo( 4 ); + assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void chainedMapping() { + + PassengerDto passenger = new PassengerDto( "Tom" ); + CarDto carDto = new CarDto( 4, "BMW", passenger ); + + ChainedAccessorsCar car = CarMapper.INSTANCE.carDtoToChainedAccessorsCar( carDto ); + + assertThat( car.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( car.getAmountOfTires() ).isEqualTo( 4 ); + assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void chainedMappingInverse() { + + Passenger passenger = Passenger.builder().name( "Tom" ).build(); + ChainedAccessorsCar chainedAccessorsCar = ChainedAccessorsCar.builder() + .manufacturer( "BMW" ) + .amountOfTires( 4 ) + .passenger( passenger ) + .build(); + + CarDto carDto = CarMapper.INSTANCE.chainedAccessorsCarToCarDto( chainedAccessorsCar ); + + assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( carDto.getTireCount() ).isEqualTo( 4 ); + assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void inheritedAbstractMapping() { + + PassengerDto passenger = new PassengerDto( "Tom" ); + CarDto carDto = new CarDto( 4, "BMW", passenger ); + + InheritedAbstractCar car = CarMapper.INSTANCE.carDtoToInheritedAbstractCar( carDto ); + + assertThat( car.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( car.getAmountOfTires() ).isEqualTo( 4 ); + assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void inheritedAbstractMappingInverse() { + + Passenger passenger = Passenger.builder().name( "Tom" ).build(); + InheritedAbstractCar inheritedAbstractCar = InheritedAbstractCar.builder() + .manufacturer( "BMW" ) + .amountOfTires( 4 ) + .passenger( passenger ) + .build(); + + CarDto carDto = CarMapper.INSTANCE.inheritedAbstractCarToCarDto( inheritedAbstractCar ); + + assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( carDto.getTireCount() ).isEqualTo( 4 ); + assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void secondLevelMapping() { + + PassengerDto passenger = new PassengerDto( "Tom" ); + CarDto carDto = new CarDto( 4, "BMW", passenger ); + + MuscleCar car = CarMapper.INSTANCE.carDtoToMuscleCar( carDto ); + + assertThat( car.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( car.getAmountOfTires() ).isEqualTo( 4 ); + assertThat( car.getHorsePower() ).isEqualTo( 140.5f ); + assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" ); + } + + @ProcessorTest + public void secondLevelMappingInverse() { + + Passenger passenger = Passenger.builder().name( "Tom" ).build(); + MuscleCar muscleCar = MuscleCar.builder() + .manufacturer( "BMW" ) + .amountOfTires( 4 ) + .passenger( passenger ) + .build(); + + CarDto carDto = CarMapper.INSTANCE.muscleCarToCarDto( muscleCar ); + + assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" ); + assertThat( carDto.getTireCount() ).isEqualTo( 4 ); + assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" ); + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java new file mode 100644 index 0000000000..79a900f289 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java @@ -0,0 +1,68 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a class inheriting an intermediate super class + * via lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public class MuscleCar extends Car {
+ *     private final float horsePower;
+ * }
+ * 
+ */ +public class MuscleCar extends Car { + + private final float horsePower; + + protected MuscleCar(MuscleCarBuilder b) { + super( b ); + this.horsePower = b.horsePower; + } + + public static MuscleCarBuilder builder() { + return new MuscleCarBuilderImpl(); + } + + public float getHorsePower() { + return this.horsePower; + } + + // CHECKSTYLE:OFF + public static abstract class MuscleCarBuilder> extends CarBuilder { + // CHECKSTYLE:ON + private float horsePower; + + public B horsePower(float horsePower) { + this.horsePower = horsePower; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "MuscleCar.MuscleCarBuilder(super=" + super.toString() + ", horsePower=" + this.horsePower + ")"; + } + } + + private static final class MuscleCarBuilderImpl extends MuscleCarBuilder { + private MuscleCarBuilderImpl() { + } + + protected MuscleCarBuilderImpl self() { + return this; + } + + public MuscleCar build() { + return new MuscleCar( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java new file mode 100644 index 0000000000..41578d97b7 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java @@ -0,0 +1,21 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public class MuscleCarDto extends CarDto { + + private final float horsePower; + + public MuscleCarDto(int amountOfTires, String manufacturer, PassengerDto passenger, float horsePower) { + super( amountOfTires, manufacturer, passenger ); + this.horsePower = horsePower; + } + + public float getHorsePower() { + return horsePower; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java new file mode 100644 index 0000000000..56b92239b9 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java @@ -0,0 +1,66 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a class without inheritance using a lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public class Passenger {
+ *     private final String name;
+ * }
+ * 
+ */ +public class Passenger { + + private final String name; + + protected Passenger(PassengerBuilder b) { + this.name = b.name; + } + + public static PassengerBuilder builder() { + return new PassengerBuilderImpl(); + } + + public String getName() { + return this.name; + } + + // CHECKSTYLE:OFF + public static abstract class PassengerBuilder> { + // CHECKSTYLE:ON + private String name; + + public B name(String name) { + this.name = name; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "Passenger.PassengerBuilder(name=" + this.name + ")"; + } + } + + private static final class PassengerBuilderImpl extends PassengerBuilder { + private PassengerBuilderImpl() { + } + + protected PassengerBuilderImpl self() { + return this; + } + + public Passenger build() { + return new Passenger( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java new file mode 100644 index 0000000000..d7720bc298 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java @@ -0,0 +1,20 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public class PassengerDto { + + private final String name; + + public PassengerDto(String name) { + this.name = name; + } + + public String getName() { + return name; + } + +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java new file mode 100644 index 0000000000..9e166218a3 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java @@ -0,0 +1,66 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +/** + * Delomboked version of a non-abstract super class using a lombok.experimental.SuperBuilder. + *

+ *

+ * @SuperBuilder
+ * @Getter
+ * public class Vehicle {
+ *     private final int amountOfTires;
+ * }
+ * 
+ */ +public class Vehicle { + + private final int amountOfTires; + + protected Vehicle(VehicleBuilder b) { + this.amountOfTires = b.amountOfTires; + } + + public static VehicleBuilder builder() { + return new VehicleBuilderImpl(); + } + + public int getAmountOfTires() { + return this.amountOfTires; + } + + // CHECKSTYLE:OFF + public static abstract class VehicleBuilder> { + // CHECKSTYLE:ON + private int amountOfTires; + + public B amountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + + public String toString() { + return "Vehicle.VehicleBuilder(amountOfTires=" + this.amountOfTires + ")"; + } + } + + private static final class VehicleBuilderImpl extends VehicleBuilder { + private VehicleBuilderImpl() { + } + + protected VehicleBuilderImpl self() { + return this; + } + + public Vehicle build() { + return new Vehicle( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java new file mode 100644 index 0000000000..e4ada7485b --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java @@ -0,0 +1,25 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.lombok.superbuilder; + +public class VehicleDto { + + private final int tireCount; + private final PassengerDto passenger; + + public VehicleDto(int tireCount, PassengerDto passenger) { + this.tireCount = tireCount; + this.passenger = passenger; + } + + public int getTireCount() { + return tireCount; + } + + public PassengerDto getPassenger() { + return passenger; + } +} From 43a5856c5044da1c27104f56260b5f989aebcd53 Mon Sep 17 00:00:00 2001 From: thunderhook <8238759+thunderhook@users.noreply.github.com> Date: Sun, 3 Mar 2024 20:42:24 +0100 Subject: [PATCH 2/2] #5324 remove any traces from Lombok --- .../ap/test/lombok/package-info.java | 9 -- .../superbuilder/ChainedAccessorsCar.java | 118 ---------------- .../superbuilder/ChainedAccessorsVehicle.java | 133 ------------------ .../superbuilder/AbstractVehicle.java | 25 +--- .../superbuilder/AbstractVehicleDto.java | 2 +- .../test/{lombok => }/superbuilder/Car.java | 25 +--- .../{lombok => }/superbuilder/CarDto.java | 2 +- .../{lombok => }/superbuilder/CarMapper.java | 2 +- .../superbuilder/ChainedAccessorsCar.java | 58 ++++++++ .../superbuilder/ChainedAccessorsVehicle.java | 72 ++++++++++ .../superbuilder/InheritedAbstractCar.java | 24 +--- .../superbuilder/InheritedAbstractCarDto.java | 2 +- .../{lombok => }/superbuilder/MuscleCar.java | 24 +--- .../superbuilder/MuscleCarDto.java | 2 +- .../{lombok => }/superbuilder/Passenger.java | 22 +-- .../superbuilder/PassengerDto.java | 2 +- .../SuperBuilderTest.java} | 4 +- .../{lombok => }/superbuilder/Vehicle.java | 22 +-- .../{lombok => }/superbuilder/VehicleDto.java | 2 +- 19 files changed, 160 insertions(+), 390 deletions(-) delete mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java delete mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java delete mode 100644 processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/AbstractVehicle.java (63%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/AbstractVehicleDto.java (88%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/Car.java (67%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/CarDto.java (90%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/CarMapper.java (96%) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsCar.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsVehicle.java rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/InheritedAbstractCar.java (64%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/InheritedAbstractCarDto.java (90%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/MuscleCar.java (62%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/MuscleCarDto.java (90%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/Passenger.java (66%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/PassengerDto.java (87%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok/superbuilder/LombokSuperBuilderTest.java => superbuilder/SuperBuilderTest.java} (98%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/Vehicle.java (67%) rename processor/src/test/java/org/mapstruct/ap/test/{lombok => }/superbuilder/VehicleDto.java (91%) diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java deleted file mode 100644 index 85b2352c01..0000000000 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/package-info.java +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright MapStruct Authors. - * - * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 - */ -/** - * This package contains tests with delomboked classes. - */ -package org.mapstruct.ap.test.lombok; diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java deleted file mode 100644 index 85d7f5ff5d..0000000000 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsCar.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright MapStruct Authors. - * - * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 - */ -package org.mapstruct.ap.test.lombok.superbuilder; - -/** - * Delomboked version of a class inheriting a non-abstract super class - * via lombok.experimental.SuperBuilder. - *

- *

- * @EqualsAndHashCode(callSuper = true)
- * @Data
- * @SuperBuilder
- * @Accessors(chain = true)
- * public class ChainedAccessorsCar extends Vehicle {
- *     private String manufacturer;
- * }
- * 
- */ -public class ChainedAccessorsCar extends ChainedAccessorsVehicle { - - private String manufacturer; - - protected ChainedAccessorsCar(ChainedAccessorsCarBuilder b) { - super( b ); - this.manufacturer = b.manufacturer; - } - - public static ChainedAccessorsCarBuilder builder() { - return new ChainedAccessorsCarBuilderImpl(); - } - - public String getManufacturer() { - return this.manufacturer; - } - - public ChainedAccessorsCar setManufacturer(String manufacturer) { - this.manufacturer = manufacturer; - return this; - } - - public String toString() { - return "ChainedAccessorsCar(manufacturer=" + this.getManufacturer() + ")"; - } - - public boolean equals(final Object o) { - if ( o == this ) { - return true; - } - if ( !( o instanceof ChainedAccessorsCar ) ) { - return false; - } - final ChainedAccessorsCar other = (ChainedAccessorsCar) o; - if ( !other.canEqual( (Object) this ) ) { - return false; - } - if ( !super.equals( o ) ) { - return false; - } - // CHECKSTYLE:OFF - final Object this$manufacturer = this.getManufacturer(); - final Object other$manufacturer = other.getManufacturer(); - if ( this$manufacturer == null ? other$manufacturer != null : - !this$manufacturer.equals( other$manufacturer ) ) { - return false; - } - // CHECKSTYLE:ON - return true; - } - - protected boolean canEqual(final Object other) { - return other instanceof ChainedAccessorsCar; - } - - // CHECKSTYLE:OFF - public int hashCode() { - final int PRIME = 59; - int result = super.hashCode(); - final Object $manufacturer = this.getManufacturer(); - result = result * PRIME + ( $manufacturer == null ? 43 : $manufacturer.hashCode() ); - return result; - } - - public static abstract class ChainedAccessorsCarBuilder> extends ChainedAccessorsVehicleBuilder { - // CHECKSTYLE:ON - private String manufacturer; - - public B manufacturer(String manufacturer) { - this.manufacturer = manufacturer; - return self(); - } - - protected abstract B self(); - - public abstract C build(); - - public String toString() { - return "ChainedAccessorsCar.ChainedAccessorsCarBuilder(super=" + super.toString() + ", manufacturer=" + - this.manufacturer + ")"; - } - } - - private static final class ChainedAccessorsCarBuilderImpl - extends ChainedAccessorsCarBuilder { - private ChainedAccessorsCarBuilderImpl() { - } - - protected ChainedAccessorsCarBuilderImpl self() { - return this; - } - - public ChainedAccessorsCar build() { - return new ChainedAccessorsCar( this ); - } - } -} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java b/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java deleted file mode 100644 index 885fa84c2b..0000000000 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/ChainedAccessorsVehicle.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright MapStruct Authors. - * - * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 - */ -package org.mapstruct.ap.test.lombok.superbuilder; - -/** - * Delomboked version of a non-abstract super class using a lombok.experimental.SuperBuilder. - *

- *

- * @Data
- * @SuperBuilder
- * @Accessors(chain = true)
- * @NoArgsConstructor
- * @AllArgsConstructor
- * public class ChainedAccessors {
- *     private int amountOfTires;
- *     private Passenger passenger;
- * }
- * 
- */ -public class ChainedAccessorsVehicle { - private int amountOfTires; - private Passenger passenger; - - protected ChainedAccessorsVehicle(ChainedAccessorsVehicleBuilder b) { - this.amountOfTires = b.amountOfTires; - this.passenger = b.passenger; - } - - public static ChainedAccessorsVehicleBuilder builder() { - return new ChainedAccessorsVehicleBuilderImpl(); - } - - public int getAmountOfTires() { - return this.amountOfTires; - } - - public Passenger getPassenger() { - return this.passenger; - } - - public ChainedAccessorsVehicle setAmountOfTires(int amountOfTires) { - this.amountOfTires = amountOfTires; - return this; - } - - public ChainedAccessorsVehicle setPassenger(Passenger passenger) { - this.passenger = passenger; - return this; - } - - // CHECKSTYLE:OFF - public boolean equals(final Object o) { - if ( o == this ) { - return true; - } - if ( !( o instanceof ChainedAccessorsVehicle ) ) { - return false; - } - final ChainedAccessorsVehicle other = (ChainedAccessorsVehicle) o; - if ( !other.canEqual( (Object) this ) ) { - return false; - } - if ( this.getAmountOfTires() != other.getAmountOfTires() ) { - return false; - } - final Object this$passenger = this.getPassenger(); - final Object other$passenger = other.getPassenger(); - if ( this$passenger == null ? other$passenger != null : !this$passenger.equals( other$passenger ) ) { - return false; - } - return true; - } - - protected boolean canEqual(final Object other) { - return other instanceof ChainedAccessorsVehicle; - } - - public int hashCode() { - final int PRIME = 59; - int result = 1; - result = result * PRIME + this.getAmountOfTires(); - final Object $passenger = this.getPassenger(); - result = result * PRIME + ( $passenger == null ? 43 : $passenger.hashCode() ); - return result; - } - - public String toString() { - return "ChainedAccessorsVehicle(amountOfTires=" + this.getAmountOfTires() + ", passenger=" + - this.getPassenger() + ")"; - } - - public static abstract class ChainedAccessorsVehicleBuilder> { - // CHECKSTYLE:ON - private int amountOfTires; - private Passenger passenger; - - public B amountOfTires(int amountOfTires) { - this.amountOfTires = amountOfTires; - return self(); - } - - public B passenger(Passenger passenger) { - this.passenger = passenger; - return self(); - } - - protected abstract B self(); - - public abstract C build(); - - public String toString() { - return "ChainedAccessorsVehicle.ChainedAccessorsVehicleBuilder(amountOfTires=" + this.amountOfTires + - ", passenger=" + this.passenger + ")"; - } - } - - private static final class ChainedAccessorsVehicleBuilderImpl - extends ChainedAccessorsVehicleBuilder { - private ChainedAccessorsVehicleBuilderImpl() { - } - - protected ChainedAccessorsVehicleBuilderImpl self() { - return this; - } - - public ChainedAccessorsVehicle build() { - return new ChainedAccessorsVehicle( this ); - } - } -} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicle.java similarity index 63% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicle.java index 2139d9ffb6..d9cf159888 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicle.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicle.java @@ -3,19 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; - -/** - * Delomboked version of an abstract super class using a lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public abstract class AbstractVehicle {
- *     private final int amountOfTires;
- * }
- * 
- */ +package org.mapstruct.ap.test.superbuilder; + public abstract class AbstractVehicle { private final int amountOfTires; @@ -34,10 +23,9 @@ public Passenger getPassenger() { return this.passenger; } - // CHECKSTYLE:OFF - public static abstract class AbstractVehicleBuilder> { - // CHECKSTYLE:ON + private int amountOfTires; private Passenger passenger; @@ -54,10 +42,5 @@ public B passenger(Passenger passenger) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "AbstractVehicle.AbstractVehicleBuilder(amountOfTires=" + this.amountOfTires + ", passenger=" + - this.passenger + ")"; - } } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicleDto.java similarity index 88% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicleDto.java index c9c4375591..0b97398ae0 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/AbstractVehicleDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/AbstractVehicleDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public abstract class AbstractVehicleDto { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Car.java similarity index 67% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/Car.java index e57f700777..af15ee6631 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Car.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Car.java @@ -3,21 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; -/** - * Delomboked version of a class inheriting a non-abstract super class - * via lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public class Car extends Vehicle {
- *     private final String manufacturer;
- *     private final Passenger passenger;
- * }
- * 
- */ public class Car extends Vehicle { private final String manufacturer; @@ -41,9 +28,8 @@ public Passenger getPassenger() { return this.passenger; } - // CHECKSTYLE:OFF - public static abstract class CarBuilder> extends VehicleBuilder { - // CHECKSTYLE:ON + public abstract static class CarBuilder> extends VehicleBuilder { + private String manufacturer; private Passenger passenger; @@ -60,11 +46,6 @@ public B passenger(Passenger passenger) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "Car.CarBuilder(super=" + super.toString() + ", manufacturer=" + this.manufacturer + ", passenger=" + - this.passenger + ")"; - } } private static final class CarBuilderImpl extends CarBuilder { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarDto.java similarity index 90% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarDto.java index f6c072804b..9877e27d71 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public class CarDto extends VehicleDto { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarMapper.java similarity index 96% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarMapper.java index 2baf879eb7..a3def64ead 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/CarMapper.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/CarMapper.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; import org.mapstruct.InheritInverseConfiguration; import org.mapstruct.Mapper; diff --git a/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsCar.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsCar.java new file mode 100644 index 0000000000..48faa101c3 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsCar.java @@ -0,0 +1,58 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.superbuilder; + +public class ChainedAccessorsCar extends ChainedAccessorsVehicle { + + private String manufacturer; + + protected ChainedAccessorsCar(ChainedAccessorsCarBuilder b) { + super( b ); + this.manufacturer = b.manufacturer; + } + + public static ChainedAccessorsCarBuilder builder() { + return new ChainedAccessorsCarBuilderImpl(); + } + + public String getManufacturer() { + return this.manufacturer; + } + + public ChainedAccessorsCar setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return this; + } + + public abstract static class ChainedAccessorsCarBuilder> extends ChainedAccessorsVehicleBuilder { + + private String manufacturer; + + public B manufacturer(String manufacturer) { + this.manufacturer = manufacturer; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + } + + private static final class ChainedAccessorsCarBuilderImpl + extends ChainedAccessorsCarBuilder { + private ChainedAccessorsCarBuilderImpl() { + } + + protected ChainedAccessorsCarBuilderImpl self() { + return this; + } + + public ChainedAccessorsCar build() { + return new ChainedAccessorsCar( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsVehicle.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsVehicle.java new file mode 100644 index 0000000000..3344fb26f9 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/ChainedAccessorsVehicle.java @@ -0,0 +1,72 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.superbuilder; + +public class ChainedAccessorsVehicle { + private int amountOfTires; + private Passenger passenger; + + protected ChainedAccessorsVehicle(ChainedAccessorsVehicleBuilder b) { + this.amountOfTires = b.amountOfTires; + this.passenger = b.passenger; + } + + public static ChainedAccessorsVehicleBuilder builder() { + return new ChainedAccessorsVehicleBuilderImpl(); + } + + public int getAmountOfTires() { + return this.amountOfTires; + } + + public Passenger getPassenger() { + return this.passenger; + } + + public ChainedAccessorsVehicle setAmountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return this; + } + + public ChainedAccessorsVehicle setPassenger(Passenger passenger) { + this.passenger = passenger; + return this; + } + + public abstract static class ChainedAccessorsVehicleBuilder> { + private int amountOfTires; + private Passenger passenger; + + public B amountOfTires(int amountOfTires) { + this.amountOfTires = amountOfTires; + return self(); + } + + public B passenger(Passenger passenger) { + this.passenger = passenger; + return self(); + } + + protected abstract B self(); + + public abstract C build(); + } + + private static final class ChainedAccessorsVehicleBuilderImpl + extends ChainedAccessorsVehicleBuilder { + private ChainedAccessorsVehicleBuilderImpl() { + } + + protected ChainedAccessorsVehicleBuilderImpl self() { + return this; + } + + public ChainedAccessorsVehicle build() { + return new ChainedAccessorsVehicle( this ); + } + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCar.java similarity index 64% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCar.java index beb9cb0129..1d07106af8 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCar.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCar.java @@ -3,19 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; -/** - * Delomboked version of a class inheriting an abstract super class via lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public class InheritedAbstractCar extends AbstractVehicle {
- *     private final String manufacturer;
- * }
- * 
- */ public class InheritedAbstractCar extends AbstractVehicle { private final String manufacturer; @@ -33,9 +22,9 @@ public String getManufacturer() { return this.manufacturer; } - // CHECKSTYLE:OFF - public static abstract class InheritedAbstractCarBuilder> - // CHECKSTYLE:ON + public abstract static class InheritedAbstractCarBuilder> + extends AbstractVehicleBuilder { private String manufacturer; @@ -47,11 +36,6 @@ public B manufacturer(String manufacturer) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "InheritedAbstractCar.InheritedAbstractCarBuilder(super=" + super.toString() + ", manufacturer=" + - this.manufacturer + ")"; - } } private static final class InheritedAbstractCarBuilderImpl diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCarDto.java similarity index 90% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCarDto.java index 7a0b6510c7..a9cc6bbdbb 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/InheritedAbstractCarDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/InheritedAbstractCarDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public class InheritedAbstractCarDto extends AbstractVehicleDto { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCar.java similarity index 62% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCar.java index 79a900f289..ec330536ff 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCar.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCar.java @@ -3,20 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; -/** - * Delomboked version of a class inheriting an intermediate super class - * via lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public class MuscleCar extends Car {
- *     private final float horsePower;
- * }
- * 
- */ public class MuscleCar extends Car { private final float horsePower; @@ -34,9 +22,9 @@ public float getHorsePower() { return this.horsePower; } - // CHECKSTYLE:OFF - public static abstract class MuscleCarBuilder> extends CarBuilder { - // CHECKSTYLE:ON + public abstract static class MuscleCarBuilder> + extends CarBuilder { + private float horsePower; public B horsePower(float horsePower) { @@ -47,10 +35,6 @@ public B horsePower(float horsePower) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "MuscleCar.MuscleCarBuilder(super=" + super.toString() + ", horsePower=" + this.horsePower + ")"; - } } private static final class MuscleCarBuilderImpl extends MuscleCarBuilder { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCarDto.java similarity index 90% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCarDto.java index 41578d97b7..7ffe150ecf 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/MuscleCarDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/MuscleCarDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public class MuscleCarDto extends CarDto { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Passenger.java similarity index 66% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/Passenger.java index 56b92239b9..2b6740af78 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Passenger.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Passenger.java @@ -3,19 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; -/** - * Delomboked version of a class without inheritance using a lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public class Passenger {
- *     private final String name;
- * }
- * 
- */ public class Passenger { private final String name; @@ -32,9 +21,8 @@ public String getName() { return this.name; } - // CHECKSTYLE:OFF - public static abstract class PassengerBuilder> { - // CHECKSTYLE:ON + public abstract static class PassengerBuilder> { + private String name; public B name(String name) { @@ -45,10 +33,6 @@ public B name(String name) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "Passenger.PassengerBuilder(name=" + this.name + ")"; - } } private static final class PassengerBuilderImpl extends PassengerBuilder { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/PassengerDto.java similarity index 87% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/PassengerDto.java index d7720bc298..f63f6e0683 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/PassengerDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/PassengerDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public class PassengerDto { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/SuperBuilderTest.java similarity index 98% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/SuperBuilderTest.java index d8a2ddc550..93dfb746b0 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/LombokSuperBuilderTest.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/SuperBuilderTest.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; import org.mapstruct.ap.testutil.IssueKey; import org.mapstruct.ap.testutil.ProcessorTest; @@ -34,7 +34,7 @@ CarMapper.class }) @IssueKey("3524") -public class LombokSuperBuilderTest { +public class SuperBuilderTest { @ProcessorTest public void simpleMapping() { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Vehicle.java similarity index 67% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/Vehicle.java index 9e166218a3..2f4a19d842 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/Vehicle.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/Vehicle.java @@ -3,19 +3,8 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; -/** - * Delomboked version of a non-abstract super class using a lombok.experimental.SuperBuilder. - *

- *

- * @SuperBuilder
- * @Getter
- * public class Vehicle {
- *     private final int amountOfTires;
- * }
- * 
- */ public class Vehicle { private final int amountOfTires; @@ -32,9 +21,8 @@ public int getAmountOfTires() { return this.amountOfTires; } - // CHECKSTYLE:OFF - public static abstract class VehicleBuilder> { - // CHECKSTYLE:ON + public abstract static class VehicleBuilder> { + private int amountOfTires; public B amountOfTires(int amountOfTires) { @@ -45,10 +33,6 @@ public B amountOfTires(int amountOfTires) { protected abstract B self(); public abstract C build(); - - public String toString() { - return "Vehicle.VehicleBuilder(amountOfTires=" + this.amountOfTires + ")"; - } } private static final class VehicleBuilderImpl extends VehicleBuilder { diff --git a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/VehicleDto.java similarity index 91% rename from processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java rename to processor/src/test/java/org/mapstruct/ap/test/superbuilder/VehicleDto.java index e4ada7485b..04dfefb205 100644 --- a/processor/src/test/java/org/mapstruct/ap/test/lombok/superbuilder/VehicleDto.java +++ b/processor/src/test/java/org/mapstruct/ap/test/superbuilder/VehicleDto.java @@ -3,7 +3,7 @@ * * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 */ -package org.mapstruct.ap.test.lombok.superbuilder; +package org.mapstruct.ap.test.superbuilder; public class VehicleDto {