mapstruct / mapstruct-idea

An IntelliJ IDEA plugin for working with MapStruct
Other
141 stars 38 forks source link

Array and Map paramter ignored as source-parameter if used as only source #173

Open hduelme opened 9 months ago

hduelme commented 9 months ago

I found while investigation #168, that currently the plugin ignores source parameters of type array and Map, if used as the only source parameter. Here a small example Mapper:

import org.mapstruct.Mapper;

import java.util.Map;

@Mapper
public interface MultiSourceMapper {

    class ArrayTarget {
        private int[] myArray;

        public int[] getMyArray() {
            return myArray;
        }

        public void setMyArray(int[] myArray) {
            this.myArray = myArray;
        }
    }

    ArrayTarget mapToArrayTarget(int[] myArray);

    class MapTarget {
        private Map<Integer, Integer> myMap;

        public Map<Integer, Integer> getMyMap() {
            return myMap;
        }

        public void setMyMap(Map<Integer, Integer> myMap) {
            this.myMap = myMap;
        }
    }

    MapTarget mapToMapTarget(Map<Integer, Integer> myMap);
}

This generates code where all targets are mapped based on their names. The plugin currently ignores the source parameters and give a unmapped target property warning. grafik Also the completion doesn't show them as source parameters.

One thing to notice: For Iterable this behavior is correct as mapstruct itself doesn't support mapping from Iterable to Object.