aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ftbsc/lll/processor/tools
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ftbsc/lll/processor/tools')
-rw-r--r--src/main/java/ftbsc/lll/processor/tools/ASTUtils.java31
1 files changed, 28 insertions, 3 deletions
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