use of java.lang.reflect.Member in project motech by motech.
the class MemberUtil method getFieldAndAccessorsForElement.
/**
* Returns a list of objects, that are either field or getter/setter methods of this field, based
* on single accessible object of a class. If it fails to find anything, it returns the passed
* object.
*
* @param ao an object to find field, getter/setter method for
* @return a list of field and getter/setter methods or {@code ao} if nothing has been found
*/
public static List<AccessibleObject> getFieldAndAccessorsForElement(AccessibleObject ao) {
String fieldName = getFieldName(ao);
if (fieldName == null) {
return Arrays.asList(ao);
}
Class declaringClass = ((Member) ao).getDeclaringClass();
try {
PropertyDescriptor descriptor = new PropertyDescriptor(fieldName, declaringClass);
Field field = ReflectionUtils.findField(declaringClass, fieldName);
Method getter = descriptor.getReadMethod();
Method setter = descriptor.getWriteMethod();
List<AccessibleObject> result = new ArrayList<>();
if (field != null) {
result.add(field);
}
if (getter != null) {
result.add(getter);
}
if (setter != null) {
result.add(setter);
}
if (result.isEmpty()) {
result.add(ao);
}
return result;
} catch (IntrospectionException e) {
return Arrays.asList(ao);
}
}
use of java.lang.reflect.Member in project motech by motech.
the class NonEditableProcessor method getElementsToProcess.
@Override
protected Set<? extends AnnotatedElement> getElementsToProcess() {
List<Member> members = ReflectionsUtil.getFilteredMembers(clazz, nonEditable());
Set<AnnotatedElement> elements = new LinkedHashSet<>(members.size());
for (Member member : members) {
if (member instanceof AnnotatedElement) {
elements.add((AnnotatedElement) member);
}
}
return elements;
}
use of java.lang.reflect.Member in project motech by motech.
the class UIDisplayableProcessor method getElementsToProcess.
@Override
protected Set<? extends AnnotatedElement> getElementsToProcess() {
List<Member> members = ReflectionsUtil.getFilteredMembers(clazz, uiDisplayable());
Set<AnnotatedElement> elements = new LinkedHashSet<>(members.size());
for (Member member : members) {
if (member instanceof AnnotatedElement) {
elements.add((AnnotatedElement) member);
}
}
return elements;
}
use of java.lang.reflect.Member in project spoon by INRIA.
the class CtFieldReferenceImpl method getModifiers.
@Override
public Set<ModifierKind> getModifiers() {
CtVariable<?> v = getDeclaration();
if (v != null) {
return v.getModifiers();
}
Member m = getActualField();
if (m != null) {
return RtHelper.getModifiers(m.getModifiers());
}
return Collections.emptySet();
}
use of java.lang.reflect.Member in project AndHook by rrrfff.
the class HookHelper method applyHooks.
public static void applyHooks(final Class<?> holdClass, final ClassLoader loader) {
for (final Method hookMethod : holdClass.getDeclaredMethods()) {
final Hook hookInfo = hookMethod.getAnnotation(Hook.class);
if (hookInfo != null) {
String name = hookInfo.name();
if (name.isEmpty())
name = hookMethod.getName();
Class<?> clazz = hookInfo.clazz();
try {
if (clazz == Hook.class)
clazz = loader.loadClass(hookInfo.value());
final Class<?>[] _parameterTypes = hookMethod.getParameterTypes();
if (_parameterTypes.length < 1) {
Log.e(AndHook.LOG_TAG, "unexpected args number!");
continue;
}
final Class<?>[] parameterTypes = new Class[_parameterTypes.length - 1];
System.arraycopy(_parameterTypes, 1, parameterTypes, 0, parameterTypes.length);
Member origin;
if (isConstructor(clazz, name)) {
origin = findConstructorHierarchically(clazz, parameterTypes);
} else {
origin = findMethodHierarchically(clazz, name, parameterTypes);
}
if (origin != null) {
if (Modifier.isStatic(origin.getModifiers())) {
AndHook.ensureClassInitialized(clazz);
}
if (hookInfo.need_origin()) {
HookHelper.hook(origin, hookMethod);
} else {
AndHook.hookNoBackup(origin, hookMethod);
}
}
} catch (final Exception e) {
Log.e(AndHook.LOG_TAG, e.getMessage(), e);
}
}
}
}
Aggregations