title: Map struct : When source is null target should NOT be set to null
body: <p>I am trying to map nested properties using mapstruct 1.2.0.CR2. 
  (Example map <em>customer.address.houseNumber</em> to  <em>userDTO.homeDTO.addressDTO.houseNo</em> ).</p>
  
  <p><strong>Expectation :</strong> I do not want to set the  addressDTO to null when  customer.address is null.    Since addressDTO contains  "countyname" and other properties which  are already set from other different sources.</p>
  
  <p>Please advice if there is property/setting that I could set so that the target it not set to null when source is null.</p>
  
  <pre><code>@Mapper( nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS )
  public interface CustomerUserMapperNullCheck {
  
      @Mapping(source="address", target="homeDTO.addressDTO" )
      void mapCustomer(Customer customer, @MappingTarget  UserDTO userDTO)  ;
  
      @Mapping(source="houseNumber", target="houseNo" )
      void mapCustomerHouse(Address address, @MappingTarget  AddressDTO addrDTO)  ;
  
  }
  </code></pre>
  
  <p>I initially tried in single mapping like below</p>
  
  <pre><code>@Mapping(target="homeDTO.addressDTO.houseNo", source="address.houseNumber")
   abstract void mapCustomerHouse(Customer customer, @MappingTarget  UserDTO userDTO)  ; 
  </code></pre>
  
  <p>Then tried splitting up the mapping,  based on <a href="https://github.com/mapstruct/mapstruct/issues/649" rel="noreferrer">https://github.com/mapstruct/mapstruct/issues/649</a>. </p>
  
  <p>Both  approaches does not produce the expected result/
  Generated method code</p>
  
  <pre><code> protected void customerToHomeDTO(Customer customer, HomeDTO mappingTarget) {
          if ( customer == null ) {
              return;
          }
  
          if ( customer.getAddress() != null ) {
              if ( mappingTarget.getAddressDTO() == null ) {
                  mappingTarget.setAddressDTO( new AddressDTO() );
              }
              mapCustomerHouse( customer.getAddress(), mappingTarget.getAddressDTO() );
          }
          **else {
              mappingTarget.setAddressDTO( null );   // I dont want to else where addressDTO is set to null.
          }**
      }
  </code></pre>
  
  <p>The complete generated code is here<br>
    <a href="https://github.com/mapstruct/mapstruct/issues/1306" rel="noreferrer">https://github.com/mapstruct/mapstruct/issues/1306</a></p>
  
  <p>Thanks</p>