fix: fixed MirroredTypeException

This commit is contained in:
zaaarf 2023-03-15 11:23:40 +01:00
parent 0cd50cc179
commit 19b739943f
No known key found for this signature in database
GPG key ID: 82240E075E31FA4C
2 changed files with 13 additions and 10 deletions

View file

@ -29,6 +29,7 @@ import java.util.*;
import java.util.stream.Collectors;
import static ftbsc.lll.processor.tools.ASTUtils.*;
import static ftbsc.lll.processor.tools.ASTUtils.getClassFullyQualifiedName;
/**
* The actual annotation processor behind the magic.
@ -175,8 +176,8 @@ public class LilleroProcessor extends AbstractProcessor {
private static String findClassName(Patch patchAnn, FindMethod methodAnn, ObfuscationMapper mapper) {
String fullyQualifiedName =
methodAnn == null || methodAnn.parent() == Object.class
? getClassFullyQualifiedName(patchAnn.value())
: getClassFullyQualifiedName(methodAnn.parent());
? getClassFullyQualifiedName(patchAnn, p -> patchAnn.value())
: getClassFullyQualifiedName(methodAnn, m -> methodAnn.parent());
return findClassName(fullyQualifiedName, mapper);
}
@ -322,11 +323,11 @@ public class LilleroProcessor extends AbstractProcessor {
private VariableElement findField(ExecutableElement stub, ObfuscationMapper mapper) {
Patch patchAnn = stub.getEnclosingElement().getAnnotation(Patch.class);
FindField fieldAnn = stub.getAnnotation(FindField.class);
String parentName = findClassName(getClassFullyQualifiedName(
fieldAnn.parent().equals(Object.class)
? patchAnn.value()
: fieldAnn.parent()
), mapper);
String parentName;
if(fieldAnn.parent().equals(Object.class))
parentName = getClassFullyQualifiedName(patchAnn, p -> patchAnn.value());
else parentName = getClassFullyQualifiedName(fieldAnn, f -> fieldAnn.parent());
parentName = findClassName(parentName, mapper);
String name = fieldAnn.name().equals("")
? stub.getSimpleName().toString()
: fieldAnn.name();

View file

@ -13,6 +13,7 @@ import javax.lang.model.type.MirroredTypeException;
import javax.lang.model.type.TypeMirror;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@ -137,13 +138,14 @@ public class ASTUtils {
* Safely converts a {@link Class} to its fully qualified name. See
* <a href="https://area-51.blog/2009/02/13/getting-class-values-from-annotations-in-an-annotationprocessor">this blogpost</a>
* for more information.
* @param clazz the class to get the name for
* @param ann the annotation containing the class
* @param fun the annotation function returning the class
* @return the fully qualified name of the given class
* @since 0.3.0
*/
public static String getClassFullyQualifiedName(Class<?> clazz) {
public static <T extends Annotation> String getClassFullyQualifiedName(T ann, Function<Annotation, Class<?>> fun) {
try {
return clazz.getCanonicalName();
return fun.apply(ann).getCanonicalName();
} catch(MirroredTypeException e) {
return e.getTypeMirror().toString();
}