diff --git a/pom.xml b/pom.xml
index 706907a..c67e611 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.alterdekim.game
actionScriptDecompiler
- 0.0.3
+ 0.0.4
jar
SWFDissect
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());
}
});