diff options
author | zaaarf <zaaarf@proton.me> | 2023-03-17 19:24:20 +0100 |
---|---|---|
committer | zaaarf <zaaarf@proton.me> | 2023-03-17 19:24:20 +0100 |
commit | 6e2355997398923c73756c3ae319c6290977e614 (patch) | |
tree | cc60eb3d8d375403ca0bb14c724f08bf52c38278 /src/main/java/ftbsc/lll | |
parent | 5fd954a1188afb230f2b1ae70834110e742a3c99 (diff) |
fix: support array levels
Diffstat (limited to 'src/main/java/ftbsc/lll')
-rw-r--r-- | src/main/java/ftbsc/lll/processor/LilleroProcessor.java | 6 | ||||
-rw-r--r-- | src/main/java/ftbsc/lll/processor/tools/ASTUtils.java | 31 |
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 |