use of java.lang.reflect.Member in project openj9 by eclipse.
the class MethodHandleInfoImpl method reflectAs.
public <T extends Member> T reflectAs(Class<T> expected, MethodHandles.Lookup lookup) throws NullPointerException, IllegalArgumentException, ClassCastException {
// Error checking
if ((null == expected) || (null == lookup)) {
throw new NullPointerException();
}
try {
lookup.checkAccess(mh);
} catch (IllegalAccessException e) {
/*[MSG "K0583", "The Member is not accessible to the Lookup object"]*/
// $NON-NLS-1$
IllegalArgumentException x = new IllegalArgumentException(com.ibm.oti.util.Msg.getString("K0583"));
x.initCause(e);
throw x;
}
if ((MethodHandle.KIND_INVOKEEXACT == mh.kind) || (MethodHandle.KIND_INVOKEGENERIC == mh.kind)) {
// $NON-NLS-1$
throw new IllegalArgumentException(com.ibm.oti.util.Msg.getString("K0590", this));
}
// Get the underlying Member
Member member = null;
final Class<?> defc = getDeclaringClass();
final boolean isPublic = Modifier.isPublic(getModifiers());
member = AccessController.doPrivileged(new PrivilegedAction<Member>() {
public Member run() {
Member result = null;
try {
// Field
if (isField()) {
if (isPublic) {
result = defc.getField(getName());
} else {
result = defc.getDeclaredField(getName());
}
// Method
} else if (isMethod()) {
if (isPublic) {
result = defc.getMethod(getName(), getMethodType().arguments);
} else {
result = defc.getDeclaredMethod(getName(), getMethodType().arguments);
}
// Constructor
} else if (isConstructor()) {
if (isPublic) {
result = defc.getConstructor(getMethodType().arguments);
} else {
result = defc.getDeclaredConstructor(getMethodType().arguments);
}
}
} catch (NoSuchFieldException | NoSuchMethodException e) {
throw new IllegalArgumentException(e);
}
if (null == result) {
// $NON-NLS-1$
throw new InternalError("Unable to get the underlying Member due to invalid reference kind");
}
return result;
}
});
expected.cast(member);
return (T) member;
}
use of java.lang.reflect.Member in project incubator-dubbo-spring-boot-project by apache.
the class DubboMvcEndpoint method resolveReferenceBean.
private ReferenceBean<?> resolveReferenceBean(InjectionMetadata.InjectedElement injectedElement, ConcurrentMap<String, ReferenceBean<?>> referenceBeansCache) {
// Member is Field or Method annotated @Reference
Member member = injectedElement.getMember();
Class<?> beanClass = null;
Reference reference = getFieldValue(injectedElement, "reference", Reference.class);
if (member instanceof Field) {
Field field = (Field) member;
beanClass = field.getType();
} else if (member instanceof Method) {
Method method = (Method) member;
beanClass = ((Method) member).getReturnType();
} else {
if (logger.isWarnEnabled()) {
logger.warn("What's wrong with Member? Member should not be Field or Method");
}
throw new IllegalStateException("What's wrong with Member? Member should not be Field or Method");
}
String referenceBeanCacheKey = generateReferenceBeanCacheKey(reference, beanClass);
return referenceBeansCache.get(referenceBeanCacheKey);
}
use of java.lang.reflect.Member in project latke by b3log.
the class InjectionPointValidator method checkValidity.
/**
* Checks the validity of the specified bean.
*
* @param <T> the class of the bean instance
* @param bean the specified bean
*/
public static <T> void checkValidity(final Bean<T> bean) {
final Set<InjectionPoint> injectionPoints = bean.getInjectionPoints();
final Set<Constructor> constructors = new HashSet<Constructor>();
for (final InjectionPoint injectionPoint : injectionPoints) {
final Member member = injectionPoint.getMember();
if (member instanceof Constructor) {
constructors.add((Constructor) member);
}
}
if (constructors.size() > 1) {
throw new RuntimeException("Only one constructor can be injected!");
}
// TODO: TypeVarible check.
}
use of java.lang.reflect.Member in project datanucleus-core by datanucleus.
the class MapHandler method getValueType.
private String getValueType(AbstractMemberMetaData mmd) {
String valueType = null;
if (mmd.getTargetClassName() == null) {
// Infer from generics
Member member = mmd.getMemberRepresented();
if (member instanceof Field) {
valueType = ClassUtils.getMapValueType((Field) member);
} else {
valueType = ClassUtils.getMapValueType((Method) member);
}
// TODO Bounded typed declarations: Shouldn't this be part of getMapvalueType?
if (valueType == null) {
// Try to use generics to furnish any missing type info
Type genericType = member instanceof Field ? ((Field) member).getGenericType() : ((Method) member).getGenericReturnType();
if (genericType != null && genericType instanceof ParameterizedType) {
ParameterizedType paramGenType = (ParameterizedType) genericType;
Type valueGenericType = paramGenType.getActualTypeArguments()[1];
if (valueGenericType instanceof TypeVariable) {
Type valueGenTypeBound = ((TypeVariable) valueGenericType).getBounds()[0];
if (valueGenTypeBound instanceof Class) {
valueType = ((Class) valueGenTypeBound).getName();
} else if (valueGenTypeBound instanceof ParameterizedType) {
// Value type is defined as a parametrized type, e.g "Project<? extends ProjectLeader<?>>"
ParameterizedType paramValGenType = (ParameterizedType) valueGenTypeBound;
Type paramValGenTypeRaw = paramValGenType.getRawType();
if (paramValGenTypeRaw != null && paramValGenTypeRaw instanceof Class) {
valueType = ((Class) paramValGenTypeRaw).getName();
}
}
}
}
}
} else {
// User has specified target class name (JPA)
valueType = mmd.getTargetClassName();
}
if (valueType == null) {
// Default to "Object" as element type
valueType = Object.class.getName();
NucleusLogger.METADATA.debug(Localiser.msg("044004", mmd.getClassName(), mmd.getName()));
}
return valueType;
}
use of java.lang.reflect.Member in project datanucleus-core by datanucleus.
the class CollectionHandler method getElementType.
protected String getElementType(AbstractMemberMetaData mmd) {
String elementType = null;
if (mmd.getTargetClassName() == null) {
// Infer from generics
Member member = mmd.getMemberRepresented();
if (member instanceof Field) {
elementType = ClassUtils.getCollectionElementType((Field) member);
} else if (member instanceof Method) {
elementType = ClassUtils.getCollectionElementType((Method) member);
}
if (elementType == null) {
// Try to use generics to furnish any missing type info
Type genericType = member instanceof Field ? ((Field) member).getGenericType() : ((Method) member).getGenericReturnType();
if (genericType != null && genericType instanceof ParameterizedType) {
ParameterizedType paramGenType = (ParameterizedType) genericType;
Type elemGenericType = paramGenType.getActualTypeArguments()[0];
if (elemGenericType instanceof TypeVariable) {
Type elemGenTypeBound = ((TypeVariable) elemGenericType).getBounds()[0];
if (elemGenTypeBound instanceof Class) {
elementType = ((Class) elemGenTypeBound).getName();
} else if (elemGenTypeBound instanceof ParameterizedType) {
// Element type is defined as a parametrized type, e.g "Project<? extends ProjectLeader<?>>"
ParameterizedType paramElemGenType = (ParameterizedType) elemGenTypeBound;
Type paramElemGenTypeRaw = paramElemGenType.getRawType();
if (paramElemGenTypeRaw != null && paramElemGenTypeRaw instanceof Class) {
elementType = ((Class) paramElemGenTypeRaw).getName();
}
}
}
}
}
} else {
// User has specified target class name (JPA)
elementType = mmd.getTargetClassName();
}
if (elementType == null) {
// Default to "Object" as element type
elementType = Object.class.getName();
NucleusLogger.METADATA.debug(Localiser.msg("044003", mmd.getClassName(), mmd.getName()));
}
return elementType;
}
Aggregations