fix: skip invalid bare injectors

This commit is contained in:
zaaarf 2023-04-12 19:26:22 +02:00
parent ee12ab20c1
commit fbd3d0c35a
No known key found for this signature in database
GPG key ID: 82240E075E31FA4C

View file

@ -134,7 +134,7 @@ public class LilleroProcessor extends AbstractProcessor {
*/ */
@Override @Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) { for(TypeElement annotation : annotations) {
if(annotation.getQualifiedName().contentEquals(Patch.class.getName())) { if(annotation.getQualifiedName().contentEquals(Patch.class.getName())) {
Set<TypeElement> validInjectors = Set<TypeElement> validInjectors =
roundEnv.getElementsAnnotatedWith(annotation) roundEnv.getElementsAnnotatedWith(annotation)
@ -145,17 +145,21 @@ public class LilleroProcessor extends AbstractProcessor {
if(!validInjectors.isEmpty()) if(!validInjectors.isEmpty())
validInjectors.forEach(this::generateClasses); validInjectors.forEach(this::generateClasses);
} else if(annotation.getQualifiedName().contentEquals(RegisterBareInjector.class.getName())) { } else if(annotation.getQualifiedName().contentEquals(RegisterBareInjector.class.getName())) {
for(Element e : roundEnv.getElementsAnnotatedWith(annotation)) TypeMirror injectorType = this.processingEnv.getElementUtils().getTypeElement("ftbsc.lll.IInjector").asType();
this.generatedInjectors.add(((TypeElement) e).getQualifiedName().toString()); for(Element e : roundEnv.getElementsAnnotatedWith(annotation)) {
if(this.processingEnv.getTypeUtils().isAssignable(e.asType(), injectorType))
this.generatedInjectors.add(((TypeElement) e).getQualifiedName().toString());
else this.processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, String.format(
"Class %s annotated with @RegisterBareInjector is not an instance of IInjector, skipping...",
((TypeElement) e).getQualifiedName().toString()
));
}
} }
} }
if (!this.generatedInjectors.isEmpty()) { if (!this.generatedInjectors.isEmpty()) {
generateServiceProvider(); generateServiceProvider();
return true; return true;
} } else return false;
return false;
} }
/** /**
@ -168,7 +172,7 @@ public class LilleroProcessor extends AbstractProcessor {
private boolean isValidInjector(TypeElement elem) { private boolean isValidInjector(TypeElement elem) {
TypeMirror classNodeType = this.processingEnv.getElementUtils().getTypeElement("org.objectweb.asm.tree.ClassNode").asType(); TypeMirror classNodeType = this.processingEnv.getElementUtils().getTypeElement("org.objectweb.asm.tree.ClassNode").asType();
TypeMirror methodNodeType = this.processingEnv.getElementUtils().getTypeElement("org.objectweb.asm.tree.MethodNode").asType(); TypeMirror methodNodeType = this.processingEnv.getElementUtils().getTypeElement("org.objectweb.asm.tree.MethodNode").asType();
if (elem.getEnclosedElements().stream().anyMatch(e -> e.getAnnotation(Target.class) != null) if(elem.getEnclosedElements().stream().anyMatch(e -> e.getAnnotation(Target.class) != null)
&& elem.getEnclosedElements().stream().filter(e -> e instanceof ExecutableElement).anyMatch(e -> { && elem.getEnclosedElements().stream().filter(e -> e instanceof ExecutableElement).anyMatch(e -> {
List<? extends TypeMirror> params = ((ExecutableType) e.asType()).getParameterTypes(); List<? extends TypeMirror> params = ((ExecutableType) e.asType()).getParameterTypes();
return e.getAnnotation(Injector.class) != null return e.getAnnotation(Injector.class) != null