properly parse getters via asm parser
This commit is contained in:
@@ -114,8 +114,10 @@ class FilterMethodVisitor extends MethodVisitor {
|
||||
var element = varStack.pop();
|
||||
var collection = varStack.pop();
|
||||
varStack.push(new BinaryExpression(element, collection, BinaryExpression.Operator.IN));
|
||||
} else if (name.startsWith("get") && name.length() > 3 && descriptor.startsWith("()")) { //hacky getter support, TODO replace this with proper getter eval later
|
||||
var field = findField(owner, name);
|
||||
} else if (descriptor.startsWith("()")) {
|
||||
var method = Class.forName(owner.replace("/", ".")).getDeclaredMethod(name);
|
||||
var res = new OptimizedAsmParser(method).parse();
|
||||
var field = res.getAccessedFields().stream().findFirst();
|
||||
if (field.isPresent()) {
|
||||
var v = varStack.pop();
|
||||
if (v instanceof ParameterExpression p) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package jef.model.annotations.processors;
|
||||
|
||||
import jef.asm.OptimizedAsmParser;
|
||||
import jef.model.DbEntityBuilder;
|
||||
import jef.model.DbField;
|
||||
import jef.model.DbFieldBuilder;
|
||||
import jef.model.ModelBuilder;
|
||||
import jef.model.ModelException;
|
||||
@@ -13,7 +13,6 @@ import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
abstract class KeyProcessorBase<K, T extends Annotation> implements AnnotationProcessor {
|
||||
private final Class<T> annotationClass;
|
||||
@@ -62,19 +61,20 @@ abstract class KeyProcessorBase<K, T extends Annotation> implements AnnotationPr
|
||||
private Field getField(DbEntityBuilder<? extends SerializableObject> entity, String fieldOrGetter) {
|
||||
Method getter = null;
|
||||
try {
|
||||
getter = entity.type().get().getDeclaredMethod(fieldOrGetter);
|
||||
} catch (NoSuchMethodException e) {
|
||||
getter = entity.type().orElseThrow().getDeclaredMethod(fieldOrGetter);
|
||||
} catch (NoSuchMethodException ignored) {
|
||||
}
|
||||
|
||||
Field field = null;
|
||||
try {
|
||||
if (getter != null && getter.getName().length() > 3 && getter.getName().startsWith("get")) {
|
||||
var name = getter.getName().substring(3, 4).toLowerCase(Locale.ROOT) + getter.getName().substring(4); //TODO HACK
|
||||
field = entity.type().get().getDeclaredField(name);
|
||||
if (getter != null) {
|
||||
var res = new OptimizedAsmParser(getter ).parse();
|
||||
var name = res.getAccessedFields().stream().findFirst().orElseThrow().getName();
|
||||
field = entity.type().orElseThrow().getDeclaredField(name);
|
||||
} else {
|
||||
field = entity.type().get().getDeclaredField(fieldOrGetter);
|
||||
field = entity.type().orElseThrow().getDeclaredField(fieldOrGetter);
|
||||
}
|
||||
} catch (NoSuchFieldException e) {
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
}
|
||||
|
||||
if (field == null) {
|
||||
|
||||
Reference in New Issue
Block a user