mirror of
https://github.com/zaaarf/lillero-processor.git
synced 2024-11-14 05:19:20 +01:00
fix: typo in condition, several exceptions, removed unused
This commit is contained in:
parent
a51cbceebc
commit
cd21d0973d
4 changed files with 30 additions and 48 deletions
|
@ -8,9 +8,19 @@ public class TargetNotFoundException extends RuntimeException {
|
||||||
/**
|
/**
|
||||||
* Constructs a new target not found exception for the specified method stub.
|
* Constructs a new target not found exception for the specified method stub.
|
||||||
* @param type the type of element being sought (class, method, etc.)
|
* @param type the type of element being sought (class, method, etc.)
|
||||||
* @param stub the stub's name (and descriptor possibly)
|
* @param member the stub's name (and descriptor possibly)
|
||||||
*/
|
*/
|
||||||
public TargetNotFoundException(String type, String stub) {
|
public TargetNotFoundException(String type, String member) {
|
||||||
super(String.format("Could not find target %s %s.", type, stub));
|
super(String.format("Could not find target %s %s.", type, member));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new target not found exception for the specified method stub.
|
||||||
|
* @param type the type of element being sought (class, method, etc.)
|
||||||
|
* @param member the stub's name (and descriptor possibly)
|
||||||
|
* @param parent the parent of the member
|
||||||
|
*/
|
||||||
|
public TargetNotFoundException(String type, String member, String parent) {
|
||||||
|
super(String.format("Could not find target %s %s in class %s.", type, member, parent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,7 +202,7 @@ public class LilleroProcessor extends AbstractProcessor {
|
||||||
//take care of TypeProxies and FieldProxies first
|
//take care of TypeProxies and FieldProxies first
|
||||||
for(VariableElement proxyVar : finders) {
|
for(VariableElement proxyVar : finders) {
|
||||||
ProxyType type = getProxyType(proxyVar);
|
ProxyType type = getProxyType(proxyVar);
|
||||||
if(type == ProxyType.METHOD && !proxyVar.getAnnotation(Find.class).name().equals("")) {
|
if(type == ProxyType.METHOD && proxyVar.getAnnotation(Find.class).name().equals("")) {
|
||||||
//methods without a specified name will be handled later
|
//methods without a specified name will be handled later
|
||||||
methodFinders.add(proxyVar);
|
methodFinders.add(proxyVar);
|
||||||
continue;
|
continue;
|
||||||
|
@ -412,7 +412,7 @@ public class LilleroProcessor extends AbstractProcessor {
|
||||||
this.injector = injector;
|
this.injector = injector;
|
||||||
this.targetStub = targetStub;
|
this.targetStub = targetStub;
|
||||||
this.reason = injector.getAnnotation(Injector.class).reason();
|
this.reason = injector.getAnnotation(Injector.class).reason();
|
||||||
this.target = findMethodFromStub(targetStub, processingEnv);
|
this.target = findMethodFromStub(targetStub, null, processingEnv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -13,7 +13,9 @@ import ftbsc.lll.proxies.ProxyType;
|
||||||
|
|
||||||
import javax.annotation.processing.ProcessingEnvironment;
|
import javax.annotation.processing.ProcessingEnvironment;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.lang.model.type.*;
|
import javax.lang.model.type.MirroredTypeException;
|
||||||
|
import javax.lang.model.type.MirroredTypesException;
|
||||||
|
import javax.lang.model.type.TypeMirror;
|
||||||
import javax.lang.model.util.Elements;
|
import javax.lang.model.util.Elements;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -121,29 +123,6 @@ public class ASTUtils {
|
||||||
return fqn;
|
return fqn;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Safely extracts a {@link Class} array from an annotation.
|
|
||||||
* @param ann the annotation containing the class
|
|
||||||
* @param fun the annotation function returning the class
|
|
||||||
* @param elementUtils the element utils corresponding to the {@link ProcessingEnvironment}
|
|
||||||
* @param <T> the type of the annotation carrying the information
|
|
||||||
* @return a list of {@link TypeMirror}s representing the classes
|
|
||||||
* @since 0.3.0
|
|
||||||
*/
|
|
||||||
public static <T extends Annotation> List<TypeMirror> classArrayFromAnnotation(T ann, Function<T, Class<?>[]> fun, Elements elementUtils) {
|
|
||||||
List<TypeMirror> params = new ArrayList<>();
|
|
||||||
try {
|
|
||||||
params.addAll(Arrays.stream(fun.apply(ann))
|
|
||||||
.map(Class::getCanonicalName)
|
|
||||||
.map(fqn -> elementUtils.getTypeElement(fqn).asType())
|
|
||||||
.collect(Collectors.toList()));
|
|
||||||
} catch(MirroredTypesException e) {
|
|
||||||
params.addAll(e.getTypeMirrors());
|
|
||||||
}
|
|
||||||
return params;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the class name and maps it to the correct format.
|
* Finds the class name and maps it to the correct format.
|
||||||
* @param name the fully qualified name of the class to convert
|
* @param name the fully qualified name of the class to convert
|
||||||
|
@ -164,12 +143,11 @@ public class ASTUtils {
|
||||||
* @param fallback the (unobfuscated) FQN to fall back on
|
* @param fallback the (unobfuscated) FQN to fall back on
|
||||||
* @param finderAnn an annotation containing metadata about the target, may be null
|
* @param finderAnn an annotation containing metadata about the target, may be null
|
||||||
* @return the fully qualified class name
|
* @return the fully qualified class name
|
||||||
* @since 0.3.0
|
* @since 0.5.0
|
||||||
*/
|
*/
|
||||||
public static String findClassNameFromAnnotations(String fallback, Find finderAnn) {
|
public static String findClassNameFromAnnotations(String fallback, Find finderAnn) {
|
||||||
String fullyQualifiedName;
|
|
||||||
if(finderAnn != null) {
|
if(finderAnn != null) {
|
||||||
fullyQualifiedName =
|
String fullyQualifiedName =
|
||||||
getClassFullyQualifiedName(
|
getClassFullyQualifiedName(
|
||||||
finderAnn,
|
finderAnn,
|
||||||
Find::value,
|
Find::value,
|
||||||
|
@ -194,7 +172,7 @@ public class ASTUtils {
|
||||||
patchAnn,
|
patchAnn,
|
||||||
Patch::value,
|
Patch::value,
|
||||||
patchAnn.className()
|
patchAnn.className()
|
||||||
), null);
|
), finderAnn);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -238,8 +216,9 @@ public class ASTUtils {
|
||||||
.filter(e -> (field && e instanceof VariableElement) || e instanceof ExecutableElement)
|
.filter(e -> (field && e instanceof VariableElement) || e instanceof ExecutableElement)
|
||||||
.filter(e -> e.getSimpleName().contentEquals(name))
|
.filter(e -> e.getSimpleName().contentEquals(name))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
if(candidates.size() == 0)
|
if(candidates.size() == 0)
|
||||||
throw new TargetNotFoundException(field ? "field" : "method", String.format("%s %s", name, descr));
|
throw new TargetNotFoundException(field ? "field" : "method", name, parentFQN);
|
||||||
if(candidates.size() == 1 && (!strict || field))
|
if(candidates.size() == 1 && (!strict || field))
|
||||||
return candidates.get(0);
|
return candidates.get(0);
|
||||||
if(field || descr == null) {
|
if(field || descr == null) {
|
||||||
|
@ -254,7 +233,7 @@ public class ASTUtils {
|
||||||
: c -> descr.split("\\)")[0].equalsIgnoreCase(descriptorFromExecutableElement(c).split("\\)")[0])
|
: c -> descr.split("\\)")[0].equalsIgnoreCase(descriptorFromExecutableElement(c).split("\\)")[0])
|
||||||
).collect(Collectors.toList());
|
).collect(Collectors.toList());
|
||||||
if(candidates.size() == 0)
|
if(candidates.size() == 0)
|
||||||
throw new TargetNotFoundException("method", String.format("%s %s", name, descr));
|
throw new TargetNotFoundException("method", String.format("%s %s", name, descr), parentFQN);
|
||||||
if(candidates.size() > 1)
|
if(candidates.size() > 1)
|
||||||
throw new AmbiguousDefinitionException(
|
throw new AmbiguousDefinitionException(
|
||||||
String.format("Found %d methods named %s in class %s!", candidates.size(), name, parentFQN)
|
String.format("Found %d methods named %s in class %s!", candidates.size(), name, parentFQN)
|
||||||
|
@ -266,22 +245,20 @@ public class ASTUtils {
|
||||||
/**
|
/**
|
||||||
* Finds the real class method corresponding to a stub annotated with {@link Target}.
|
* Finds the real class method corresponding to a stub annotated with {@link Target}.
|
||||||
* @param stub the {@link ExecutableElement} for the stub
|
* @param stub the {@link ExecutableElement} for the stub
|
||||||
|
* @param f the {@link Find} annotation containing fallback data, may be null
|
||||||
* @param env the {@link ProcessingEnvironment} to perform the operation in
|
* @param env the {@link ProcessingEnvironment} to perform the operation in
|
||||||
* @return the {@link ExecutableElement} corresponding to the method
|
* @return the {@link ExecutableElement} corresponding to the method
|
||||||
* @throws AmbiguousDefinitionException if it finds more than one candidate
|
* @throws AmbiguousDefinitionException if it finds more than one candidate
|
||||||
* @throws TargetNotFoundException if it finds no valid candidate
|
* @throws TargetNotFoundException if it finds no valid candidate
|
||||||
* @since 0.3.0
|
* @since 0.3.0
|
||||||
*/
|
*/
|
||||||
public static ExecutableElement findMethodFromStub(ExecutableElement stub, ProcessingEnvironment env) {
|
public static ExecutableElement findMethodFromStub(ExecutableElement stub, Find f, ProcessingEnvironment env) {
|
||||||
//the parent always has a @Patch annotation
|
//the parent always has a @Patch annotation
|
||||||
Patch patchAnn = stub.getEnclosingElement().getAnnotation(Patch.class);
|
Patch patchAnn = stub.getEnclosingElement().getAnnotation(Patch.class);
|
||||||
//there should ever only be one of these two
|
//there should ever only be one of these two
|
||||||
Target targetAnn = stub.getAnnotation(Target.class); //if this is null strict mode is always disabled
|
Target targetAnn = stub.getAnnotation(Target.class); //if this is null strict mode is always disabled
|
||||||
Find findAnn = stub.getAnnotation(Find.class); //this may be null, it means no fallback info
|
String parentFQN = findClassNameFromAnnotations(patchAnn, f);
|
||||||
String parentFQN = findClassNameFromAnnotations(patchAnn, findAnn);
|
|
||||||
String methodName = stub.getSimpleName().toString();
|
String methodName = stub.getSimpleName().toString();
|
||||||
if(findAnn != null && !findAnn.name().equals(""))
|
|
||||||
throw new AmbiguousDefinitionException(String.format("Specified name %s in @Find annotation for method stub %s!", findAnn.name(), methodName));
|
|
||||||
String methodDescriptor = descriptorFromExecutableElement(stub);
|
String methodDescriptor = descriptorFromExecutableElement(stub);
|
||||||
return (ExecutableElement) findMember(
|
return (ExecutableElement) findMember(
|
||||||
parentFQN,
|
parentFQN,
|
||||||
|
|
|
@ -7,9 +7,9 @@ import ftbsc.lll.processor.tools.containers.ArrayContainer;
|
||||||
import ftbsc.lll.processor.tools.containers.ClassContainer;
|
import ftbsc.lll.processor.tools.containers.ClassContainer;
|
||||||
import ftbsc.lll.processor.tools.obfuscation.ObfuscationMapper;
|
import ftbsc.lll.processor.tools.obfuscation.ObfuscationMapper;
|
||||||
import ftbsc.lll.proxies.ProxyType;
|
import ftbsc.lll.proxies.ProxyType;
|
||||||
import ftbsc.lll.tools.DescriptorBuilder;
|
|
||||||
import ftbsc.lll.proxies.impl.MethodProxy;
|
|
||||||
import ftbsc.lll.proxies.impl.FieldProxy;
|
import ftbsc.lll.proxies.impl.FieldProxy;
|
||||||
|
import ftbsc.lll.proxies.impl.MethodProxy;
|
||||||
|
import ftbsc.lll.tools.DescriptorBuilder;
|
||||||
|
|
||||||
import javax.annotation.processing.ProcessingEnvironment;
|
import javax.annotation.processing.ProcessingEnvironment;
|
||||||
import javax.lang.model.element.Element;
|
import javax.lang.model.element.Element;
|
||||||
|
@ -18,14 +18,9 @@ import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.element.VariableElement;
|
import javax.lang.model.element.VariableElement;
|
||||||
import javax.lang.model.type.TypeKind;
|
import javax.lang.model.type.TypeKind;
|
||||||
import javax.lang.model.type.TypeMirror;
|
import javax.lang.model.type.TypeMirror;
|
||||||
import javax.lang.model.util.Elements;
|
|
||||||
import javax.tools.Diagnostic;
|
import javax.tools.Diagnostic;
|
||||||
import java.lang.annotation.Annotation;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import static ftbsc.lll.processor.tools.ASTUtils.*;
|
import static ftbsc.lll.processor.tools.ASTUtils.*;
|
||||||
import static ftbsc.lll.processor.tools.ASTUtils.mapModifiers;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Collection of static utils that rely on JavaPoet to function.
|
* Collection of static utils that rely on JavaPoet to function.
|
||||||
|
@ -162,7 +157,7 @@ public class JavaPoetUtils {
|
||||||
if(isMethod) {
|
if(isMethod) {
|
||||||
ExecutableElement executableTarget;
|
ExecutableElement executableTarget;
|
||||||
if(f.name().equals("")) //find and validate from stub
|
if(f.name().equals("")) //find and validate from stub
|
||||||
executableTarget = findMethodFromStub(stub, env);
|
executableTarget = findMethodFromStub(stub, null, env);
|
||||||
else { //find and validate by name alone
|
else { //find and validate by name alone
|
||||||
if(LilleroProcessor.badPracticeWarnings) //warn user that he is doing bad stuff
|
if(LilleroProcessor.badPracticeWarnings) //warn user that he is doing bad stuff
|
||||||
env.getMessager().printMessage(Diagnostic.Kind.WARNING,
|
env.getMessager().printMessage(Diagnostic.Kind.WARNING,
|
||||||
|
|
Loading…
Reference in a new issue