in the case of the same class in different packages, and a suffix to the mapper class name

This commit is contained in:
linpeilie 2024-06-26 18:02:32 +08:00
parent a1fddcd1ea
commit 067a27f4d2
2 changed files with 15 additions and 15 deletions

View File

@ -117,6 +117,8 @@ public class AutoMapperProcessor extends AbstractProcessor {
private final Set<String> mapperSet = new HashSet<>();
private static final Map<String, Integer> AUTO_MAPPER_INDEX = new HashMap<>();
private Messager messager;
public AutoMapperProcessor() {
@ -517,10 +519,21 @@ public class AutoMapperProcessor extends AbstractProcessor {
mapperList.addAll(reverseMapperMetadataList);
mapperList.removeIf(metadata -> !metadata.isConvertGenerate());
// 兼容同模块下同名不同包的场景
mapperList.forEach(metadata -> {
if (!metadata.isConvertGenerate()) {
return;
String mapperName = metadata.mapperName();
// 同名类时增加后缀
Integer index = AUTO_MAPPER_INDEX.getOrDefault(mapperName, 0);
if (index > 0) {
mapperName = mapperName + "__" + index;
}
AUTO_MAPPER_INDEX.put(metadata.mapperName(), ++index);
metadata.setMapperName(mapperName);
});
mapperList.forEach(metadata -> {
this.writeAutoMapperClassFile(metadata);
addAdapterMethod(metadata);
});

View File

@ -32,22 +32,9 @@ public class AutoMapperGenerator {
public static final String CONVERT_METHOD_NAME = "convert";
private static final Map<String, Integer> AUTO_MAPPER_INDEX = new HashMap<>();
public void write(AutoMapperMetadata metadata, ProcessingEnvironment processingEnv) {
String mapperPackage = metadata.mapperPackage();
/*
当前处理方式本地使用 IDEA 开发时当修改 Source/Target 类时可能还会出现类名冲突的问题
当出现该问题时需要执行 clean 把之前构建的类清掉
*/
String mapperName = metadata.mapperName();
// 同名类时增加后缀
Integer index = AUTO_MAPPER_INDEX.getOrDefault(mapperName, 0);
if (index > 0) {
mapperName = mapperName + "__" + index;
}
AUTO_MAPPER_INDEX.put(metadata.mapperName(), ++index);
try (final Writer writer = processingEnv.getFiler()
.createSourceFile(mapperPackage + "." + mapperName)