summaryrefslogtreecommitdiff
path: root/src/main/java/ftbsc/lll
diff options
context:
space:
mode:
author zaaarf <zaaarf@proton.me>2023-03-17 19:24:20 +0100
committer zaaarf <zaaarf@proton.me>2023-03-17 19:24:20 +0100
commit6e2355997398923c73756c3ae319c6290977e614 (patch)
treecc60eb3d8d375403ca0bb14c724f08bf52c38278 /src/main/java/ftbsc/lll
parent5fd954a1188afb230f2b1ae70834110e742a3c99 (diff)
fix: support array levels
Diffstat (limited to 'src/main/java/ftbsc/lll')
-rw-r--r--src/main/java/ftbsc/lll/processor/LilleroProcessor.java6
-rw-r--r--src/main/java/ftbsc/lll/processor/tools/ASTUtils.java31
2 files changed, 31 insertions, 6 deletions
diff --git a/src/main/java/ftbsc/lll/processor/LilleroProcessor.java b/src/main/java/ftbsc/lll/processor/LilleroProcessor.java
index 957785b..e023677 100644
--- a/src/main/java/ftbsc/lll/processor/LilleroProcessor.java
+++ b/src/main/java/ftbsc/lll/processor/LilleroProcessor.java
@@ -332,12 +332,12 @@ public class LilleroProcessor extends AbstractProcessor {
for(VariableElement p : targetMethod.getParameters()) {
if(p.asType().getKind().isPrimitive())
b.addStatement("bd.addParameter($T.class)", p.asType());
- else b.addStatement("bd.addParameter($S)", p.asType().toString());
+ else b.addStatement("bd.addParameter($S, %L)", getInnermostComponentType(p.asType()), getArrayLevel(p.asType()));
}
if(targetMethod.getReturnType().getKind().isPrimitive())
b.addStatement("bd.setReturnType($T.class)", targetMethod.getReturnType());
- else b.addStatement("bd.setReturnType($S)", targetMethod.getReturnType().toString());
+ else b.addStatement("bd.setReturnType($S, %L)", getInnermostComponentType(targetMethod.getReturnType()), getArrayLevel(targetMethod.getReturnType()));
b.addStatement("return bd.build()");
@@ -366,7 +366,7 @@ public class LilleroProcessor extends AbstractProcessor {
if(targetField.asType().getKind().isPrimitive())
b.addStatement("bd.setType($T.class)", targetField.asType());
- else b.addStatement("bd.setType($S)", targetField.asType().toString());
+ else b.addStatement("bd.setType($S, %L)", getInnermostComponentType(targetField.asType()), getArrayLevel(targetField.asType()));
b.addStatement("return bd.build()");
diff --git a/src/main/java/ftbsc/lll/processor/tools/ASTUtils.java b/src/main/java/ftbsc/lll/processor/tools/ASTUtils.java
index ef50e52..1735b66 100644
--- a/src/main/java/ftbsc/lll/processor/tools/ASTUtils.java
+++ b/src/main/java/ftbsc/lll/processor/tools/ASTUtils.java
@@ -12,9 +12,7 @@ import ftbsc.lll.processor.tools.obfuscation.ObfuscationMapper;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.*;
-import javax.lang.model.type.MirroredTypeException;
-import javax.lang.model.type.MirroredTypesException;
-import javax.lang.model.type.TypeMirror;
+import javax.lang.model.type.*;
import javax.lang.model.util.Elements;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
@@ -84,6 +82,33 @@ public class ASTUtils {
}
/**
+ * Calculates the array nesting level for a {@link TypeMirror}.
+ * @param t the type mirror to get it for
+ * @return the array nesting level
+ * @since 0.3.0
+ */
+ public static int getArrayLevel(TypeMirror t) {
+ int arrayLevel = 0;
+ while(t.getKind() == TypeKind.ARRAY) {
+ t = ((ArrayType) t).getComponentType();
+ arrayLevel++;
+ }
+ return arrayLevel;
+ }
+
+ /**
+ * Calculates the array nesting level for a {@link TypeMirror}.
+ * @param t the type mirror to get it for
+ * @return the array nesting level
+ * @since 0.3.0
+ */
+ public static TypeMirror getInnermostComponentType(TypeMirror t) {
+ while(t.getKind() == TypeKind.ARRAY)
+ t = ((ArrayType) t).getComponentType();
+ return t;
+ }
+
+ /**
* Safely extracts a {@link Class} from an annotation and gets its fully qualified name.
* @param ann the annotation containing the class
* @param fun the annotation function returning the class