From 5977af51b705744d1f287dc79c2ce378b0c0d17f Mon Sep 17 00:00:00 2001 From: alterdekim <alterwain@protonmail.com> Date: Thu, 9 Jan 2025 21:26:27 +0300 Subject: [PATCH] Mapper improved --- pom.xml | 2 +- .../flash/decompiler/mapper/FlashField.java | 2 ++ .../flash/decompiler/mapper/FlashFieldConverter.java | 11 +++++++++++ .../flash/decompiler/mapper/FlashMapper.java | 8 +++++++- 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/alterdekim/flash/decompiler/mapper/FlashFieldConverter.java diff --git a/pom.xml b/pom.xml index 706907a..c67e611 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>com.alterdekim.game</groupId> <artifactId>actionScriptDecompiler</artifactId> - <version>0.0.3</version> + <version>0.0.4</version> <packaging>jar</packaging> <name>SWFDissect</name> diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java index 09cd06d..069bf77 100644 --- a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java +++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashField.java @@ -9,4 +9,6 @@ import java.lang.annotation.Target; @Target(ElementType.FIELD) public @interface FlashField { String name() default ""; + boolean useCustomConverter() default false; + Class<? extends FlashFieldConverter> converter() default FlashFieldConverter.None.class; } diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashFieldConverter.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashFieldConverter.java new file mode 100644 index 0000000..9f89fb3 --- /dev/null +++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashFieldConverter.java @@ -0,0 +1,11 @@ +package com.alterdekim.flash.decompiler.mapper; + + +public abstract class FlashFieldConverter { + public abstract Object convert(Object o); + + public abstract static class None extends FlashFieldConverter { + public None() { + } + } +} diff --git a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java index 3eeb910..cb6513c 100644 --- a/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java +++ b/src/main/java/com/alterdekim/flash/decompiler/mapper/FlashMapper.java @@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.tuple.Pair; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.Map; @@ -21,8 +22,13 @@ public class FlashMapper { Field f = p.getLeft(); String name = p.getRight(); f.setAccessible(true); + if( f.isAnnotationPresent(FlashField.class) && f.getAnnotation(FlashField.class).useCustomConverter()) { + f.set(result, f.getAnnotation(FlashField.class).converter().getDeclaredConstructor().newInstance().convert(m.get(name))); + return; + } f.set(result, m.get(name)); - } catch (IllegalAccessException e) { + } catch (IllegalAccessException | NoSuchMethodException | InstantiationException | + InvocationTargetException e) { log.error("FlashMapper valueSet error: {}", e.getMessage()); } });