Search in sources :

Example 96 with Member

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;
}
Also used : PrivilegedAction(java.security.PrivilegedAction) Member(java.lang.reflect.Member)

Example 97 with 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);
}
Also used : Field(java.lang.reflect.Field) Reference(com.alibaba.dubbo.config.annotation.Reference) Method(java.lang.reflect.Method) RequestMethod(org.springframework.web.bind.annotation.RequestMethod) Member(java.lang.reflect.Member)

Example 98 with Member

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.
}
Also used : InjectionPoint(org.b3log.latke.ioc.point.InjectionPoint) Constructor(java.lang.reflect.Constructor) Member(java.lang.reflect.Member) HashSet(java.util.HashSet)

Example 99 with Member

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;
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) Field(java.lang.reflect.Field) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) TypeVariable(java.lang.reflect.TypeVariable) Method(java.lang.reflect.Method) Member(java.lang.reflect.Member)

Example 100 with Member

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;
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) Field(java.lang.reflect.Field) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) TypeVariable(java.lang.reflect.TypeVariable) Method(java.lang.reflect.Method) Member(java.lang.reflect.Member)

Aggregations

Member (java.lang.reflect.Member)135 Method (java.lang.reflect.Method)41 Field (java.lang.reflect.Field)30 ArrayList (java.util.ArrayList)13 AccessibleObject (java.lang.reflect.AccessibleObject)12 Type (java.lang.reflect.Type)12 Annotation (java.lang.annotation.Annotation)11 Constructor (java.lang.reflect.Constructor)10 TypeVariable (java.lang.reflect.TypeVariable)9 InvocationTargetException (java.lang.reflect.InvocationTargetException)8 ParameterizedType (java.lang.reflect.ParameterizedType)7 Map (java.util.Map)7 MetaInfo (org.qi4j.api.common.MetaInfo)7 InjectionPoint (com.google.inject.spi.InjectionPoint)6 AnnotatedElement (java.lang.reflect.AnnotatedElement)6 LinkedHashSet (java.util.LinkedHashSet)6 Optional (org.qi4j.api.common.Optional)6 ValueConstraintsInstance (org.qi4j.runtime.composite.ValueConstraintsInstance)6 ValueConstraintsModel (org.qi4j.runtime.composite.ValueConstraintsModel)6 HashSet (java.util.HashSet)5