/** * Find the first annotation name for the given stereotype. * * @param stereotype The stereotype * @return The annotation name */ default @Nonnull Optional<Class<? extends Annotation>> getAnnotationTypeByStereotype(@Nonnull Class<? extends Annotation> stereotype) { ArgumentUtils.requireNonNull("stereotype", stereotype); return getAnnotationTypeByStereotype(stereotype.getName()); }
@Override default @Nonnull Optional<Class<? extends Annotation>> getAnnotationTypeByStereotype(@Nonnull Class<? extends Annotation> stereotype) { return getAnnotationMetadata().getAnnotationTypeByStereotype(stereotype); }
@Override default @Nonnull Optional<Class<? extends Annotation>> getAnnotationTypeByStereotype(String stereotype) { return getAnnotationMetadata().getAnnotationTypeByStereotype(stereotype); }
@SuppressWarnings("unchecked") @Override public <T> Optional<T> convert(Object object, Class<T> targetType, ConversionContext context) { if (object == null || targetType == null || context == null) { return Optional.empty(); } if (targetType == Object.class) { return Optional.of((T) object); } Class<?> sourceType = object.getClass(); targetType = ReflectionUtils.getWrapperType(targetType); if (targetType.isInstance(object) && !Iterable.class.isInstance(object) && !Map.class.isInstance(object)) { return Optional.of((T) object); } Optional<? extends Class<? extends Annotation>> formattingAnn = context.getAnnotationMetadata().getAnnotationTypeByStereotype(Format.class); Class<? extends Annotation> formattingAnnotation = formattingAnn.orElse(null); ConvertiblePair pair = new ConvertiblePair(sourceType, targetType, formattingAnnotation); TypeConverter typeConverter = converterCache.get(pair); if (typeConverter == null) { typeConverter = findTypeConverter(sourceType, targetType, formattingAnnotation); if (typeConverter == null) { return Optional.empty(); } else { converterCache.put(pair, typeConverter); } } return typeConverter.convert(object, targetType, context); }
@Override public <T> Optional<ArgumentBinder<T, HttpRequest<?>>> findArgumentBinder(Argument<T> argument, HttpRequest<?> source) { Optional<Class<? extends Annotation>> opt = argument.getAnnotationMetadata().getAnnotationTypeByStereotype(Bindable.class); if (opt.isPresent()) { Class<? extends Annotation> annotationType = opt.get(); RequestArgumentBinder<T> binder = findBinder(argument, annotationType); if (binder == null) { binder = byAnnotation.get(annotationType); } if (binder != null) { return Optional.of(binder); } } else { RequestArgumentBinder<T> binder = byType.get(argument.typeHashCode()); if (binder != null) { return Optional.of(binder); } else { binder = byType.get(Argument.of(argument.getType()).typeHashCode()); if (binder != null) { return Optional.of(binder); } } } return Optional.of(new ParameterAnnotationBinder<>(conversionService)); }
private Argument[] resolveRequiredArguments() { return Arrays.stream(getConstructor().getArguments()) .filter(arg -> { Optional<Class<? extends Annotation>> qualifierType = arg.getAnnotationMetadata().getAnnotationTypeByStereotype(Qualifier.class); return qualifierType.isPresent() && qualifierType.get() == Parameter.class; }) .toArray(Argument[]::new); } }
private Argument[] resolveRequiredArguments() { return Arrays.stream(getConstructor().getArguments()) .filter(arg -> { Optional<Class<? extends Annotation>> qualifierType = arg.getAnnotationMetadata().getAnnotationTypeByStereotype(Qualifier.class); return qualifierType.isPresent() && qualifierType.get() == Parameter.class; }) .toArray(Argument[]::new); } }
@Override public <T> Optional<ArgumentBinder<T, HttpRequest<?>>> findArgumentBinder(Argument<T> argument, HttpRequest<?> source) { Optional<Class<? extends Annotation>> opt = argument.getAnnotationMetadata().getAnnotationTypeByStereotype(Bindable.class); if (opt.isPresent()) { Class<? extends Annotation> annotationType = opt.get(); RequestArgumentBinder<T> binder = findBinder(argument, annotationType); if (binder == null) { binder = byAnnotation.get(annotationType); } if (binder != null) { return Optional.of(binder); } } else { RequestArgumentBinder<T> binder = byType.get(argument.typeHashCode()); if (binder != null) { return Optional.of(binder); } else { binder = byType.get(Argument.of(argument.getType()).typeHashCode()); if (binder != null) { return Optional.of(binder); } } } return Optional.of(new ParameterAnnotationBinder<>(conversionService)); }
private Qualifier resolveQualifier(BeanResolutionContext resolutionContext, Argument argument) { Qualifier qualifier = null; AnnotationMetadata annotationMetadata = argument.getAnnotationMetadata(); Optional<Class<? extends Annotation>> qualifierType = annotationMetadata.getAnnotationTypeByStereotype(javax.inject.Qualifier.class); if (qualifierType.isPresent()) { qualifier = Qualifiers.byAnnotation( annotationMetadata, qualifierType.get() ); } if (qualifier == null) { Class<?>[] byType = annotationMetadata.hasDeclaredAnnotation(Type.class) ? annotationMetadata.getValue(Type.class, Class[].class).orElse(null) : null; if (byType != null) { qualifier = Qualifiers.byType(byType); } else { Optional<Qualifier> optional = resolutionContext.get(javax.inject.Qualifier.class.getName(), Map.class) .map(map -> (Qualifier) map.get(argument)); qualifier = optional.orElse(null); if (qualifier == null && isIterable() && argument.isAnnotationPresent(Parameter.class)) { qualifier = optional.orElseGet(() -> { final Optional<String> n = resolutionContext.get(Named.class.getName(), String.class); return n.map(Qualifiers::byName).orElse(null); }); } } } return qualifier; }
private Qualifier resolveQualifier(BeanResolutionContext resolutionContext, Argument argument) { Qualifier qualifier = null; AnnotationMetadata annotationMetadata = argument.getAnnotationMetadata(); Optional<Class<? extends Annotation>> qualifierType = annotationMetadata.getAnnotationTypeByStereotype(javax.inject.Qualifier.class); if (qualifierType.isPresent()) { qualifier = Qualifiers.byAnnotation( annotationMetadata, qualifierType.get() ); } if (qualifier == null) { Class<?>[] byType = annotationMetadata.hasDeclaredAnnotation(Type.class) ? annotationMetadata.getValue(Type.class, Class[].class).orElse(null) : null; if (byType != null) { qualifier = Qualifiers.byType(byType); } else { Optional<Qualifier> optional = resolutionContext.get(javax.inject.Qualifier.class.getName(), Map.class) .map(map -> (Qualifier) map.get(argument)); qualifier = optional.orElse(null); if (qualifier == null && isIterable() && argument.isAnnotationPresent(Parameter.class)) { qualifier = optional.orElseGet(() -> { final Optional<String> n = resolutionContext.get(Named.class.getName(), String.class); return n.map(Qualifiers::byName).orElse(null); }); } } } return qualifier; }
Optional<Class<? extends Annotation>> q = annotationMetadata.getAnnotationTypeByStereotype(Qualifier.class); if (q.isPresent()) { try {
final Optional<Class<? extends Annotation>> scope = argument.getAnnotationMetadata().getAnnotationTypeByStereotype(Scope.class); registeredScope = scope.flatMap(customScopeRegistry::findScope);
final Optional<Class<? extends Annotation>> scope = argument.getAnnotationMetadata().getAnnotationTypeByStereotype(Scope.class); registeredScope = scope.flatMap(customScopeRegistry::findScope);