org.jboss.as.arquillian.container.SecurityActions Maven / Gradle / Ivy
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.jboss.as.arquillian.container;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.List;
/**
* @author Stuart Douglas
*/
final class SecurityActions {
static List getFieldsWithAnnotation(final Class> source, final Class extends Annotation> annotationClass) {
List declaredAccessibleFields = AccessController.doPrivileged(new PrivilegedAction>() {
@Override
public List run() {
List foundFields = new ArrayList();
Class> nextSource = source;
while (nextSource != Object.class) {
for (Field field : nextSource.getDeclaredFields()) {
if (field.isAnnotationPresent(annotationClass)) {
if (!field.isAccessible()) {
field.setAccessible(true);
}
foundFields.add(field);
}
}
nextSource = nextSource.getSuperclass();
}
return foundFields;
}
});
return declaredAccessibleFields;
}
}