[type-utils, weaver-pojo] Introduce a submodule focused on Java types for POJO weaving

This commit is contained in:
2025-03-04 23:47:40 +01:00
parent 0eac7e42aa
commit e30e6d0547
25 changed files with 1079 additions and 204 deletions

View File

@@ -74,9 +74,13 @@ public class ReadWritePojoPostProcessor implements TweedPojoWeavingPostProcessor
return;
}
readWriteExtension.setEntryReaderWriterDefinition(configEntry, createDefinitionFromEntryConfig(entryConfig, context));
EntryReaderWriterDefinition definition = createDefinitionFromEntryConfig(entryConfig, context);
if (definition != null) {
readWriteExtension.setEntryReaderWriterDefinition(configEntry, definition);
}
}
@Nullable
private EntryReaderWriterDefinition createDefinitionFromEntryConfig(EntryReadWriteConfig entryConfig, WeavingContext context) {
String readerSpecText = entryConfig.reader().isEmpty() ? entryConfig.value() : entryConfig.reader();
String writerSpecText = entryConfig.writer().isEmpty() ? entryConfig.value() : entryConfig.writer();
@@ -90,6 +94,10 @@ public class ReadWritePojoPostProcessor implements TweedPojoWeavingPostProcessor
writerSpec = specFromText(writerSpecText, context);
}
if (readerSpec == null && writerSpec == null) {
return null;
}
//noinspection unchecked
TweedEntryReader<?, ?> reader = readerSpec == null
? TweedEntryReaderWriterImpls.NOOP_READER_WRITER
@@ -165,10 +173,10 @@ public class ReadWritePojoPostProcessor implements TweedPojoWeavingPostProcessor
private <T> T loadClassIfExists(Class<T> baseClass, String className, T[] arguments) {
try {
Class<?> clazz = Class.forName(className);
Class<?>[] argClassses = new Class<?>[arguments.length];
Arrays.fill(argClassses, baseClass);
Class<?>[] argClasses = new Class<?>[arguments.length];
Arrays.fill(argClasses, baseClass);
Constructor<?> constructor = clazz.getConstructor(argClassses);
Constructor<?> constructor = clazz.getConstructor(argClasses);
//noinspection unchecked
return (T) constructor.newInstance((Object[]) arguments);