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

View file

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