Search in sources :

Example 31 with Parameter

use of java.lang.reflect.Parameter in project completable-reactor by ru-fix.

the class LambdaReflector method signature.

static String signature(Method method) {
    StringBuilder signature = new StringBuilder();
    Parameter[] parameters = method.getParameters();
    signature.append("(");
    for (Parameter parameter : parameters) {
        signature.append(signatureMapType(parameter.getType()));
    }
    signature.append(")");
    signature.append(signatureMapType(method.getReturnType()));
    return signature.toString();
}
Also used : Parameter(java.lang.reflect.Parameter)

Example 32 with Parameter

use of java.lang.reflect.Parameter in project herd by FINRAOS.

the class RestControllerProcessor method processRestControllerClass.

/**
 * Processes a Spring MVC REST controller class that is annotated with RestController. Also collects any required model objects based on parameters and
 * return types of each endpoint into the specified model classes set.
 *
 * @param clazz the class to process
 *
 * @throws MojoExecutionException if any errors were encountered.
 */
private void processRestControllerClass(Class<?> clazz) throws MojoExecutionException {
    // Get the Java class source information.
    JavaClassSource javaClassSource = sourceMap.get(clazz.getSimpleName());
    if (javaClassSource == null) {
        throw new MojoExecutionException("No source resource found for class \"" + clazz.getName() + "\".");
    }
    Api api = clazz.getAnnotation(Api.class);
    boolean hidden = api != null && api.hidden();
    if ((clazz.getAnnotation(RestController.class) != null) && (!hidden)) {
        log.debug("Processing RestController class \"" + clazz.getName() + "\".");
        // Default the tag name to the simple class name.
        String tagName = clazz.getSimpleName();
        // See if the "Api" annotation exists.
        if (api != null && api.tags().length > 0) {
            // The "Api" annotation was found so use it's configured tag.
            tagName = api.tags()[0];
        } else {
            // No "Api" annotation so try to get the tag name from the class name. If not, we will stick with the default simple class name.
            Matcher matcher = tagPattern.matcher(clazz.getSimpleName());
            if (matcher.find()) {
                // If our class has the form
                tagName = matcher.group("tag");
            }
        }
        log.debug("Using tag name \"" + tagName + "\".");
        // Add the tag and process each method.
        swagger.addTag(new Tag().name(tagName));
        List<Method> methods = Lists.newArrayList(clazz.getDeclaredMethods());
        // Based on the Java 8 doc, getDeclaredMethods() is not guaranteed sorted
        // In order to be sure we generate stable API when the URL's don't change
        // we can give it a sort order based on the first URI hit in the request mapping
        List<Method> outMethods = methods.stream().filter((method) -> {
            RequestMapping rm = method.getAnnotation(RequestMapping.class);
            ApiOperation apiOp = method.getAnnotation(ApiOperation.class);
            return // Has RequestMapping
            rm != null && // has at least 1 URI
            rm.value().length > 0 && // has at least 1 HttpMethod
            rm.method().length > 0 && // marked as a hidden ApiOperation
            (apiOp == null || !apiOp.hidden());
        }).sorted(Comparator.comparing(a -> ((Method) a).getAnnotation(RequestMapping.class).value()[0]).thenComparing(a -> ((Method) a).getAnnotation(RequestMapping.class).method()[0])).collect(Collectors.toList());
        for (Method method : outMethods) {
            // Get the method source information.
            List<Class<?>> methodParamClasses = new ArrayList<>();
            for (Parameter parameter : method.getParameters()) {
                methodParamClasses.add(parameter.getType());
            }
            MethodSource<JavaClassSource> methodSource = javaClassSource.getMethod(method.getName(), methodParamClasses.toArray(new Class<?>[methodParamClasses.size()]));
            if (methodSource == null) {
                throw new MojoExecutionException("No method source found for class \"" + clazz.getName() + "\" and method name \"" + method.getName() + "\".");
            }
            // Process the REST controller method along with its source information.
            processRestControllerMethod(method, clazz.getAnnotation(RequestMapping.class), tagName, methodSource);
        }
    } else {
        log.debug("Skipping class \"" + clazz.getName() + "\" because it is either not a RestController or it is hidden.");
    }
}
Also used : PathVariable(org.springframework.web.bind.annotation.PathVariable) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) RequestParam(org.springframework.web.bind.annotation.RequestParam) Tag(io.swagger.models.Tag) SerializableParameter(io.swagger.models.parameters.SerializableParameter) ParameterSource(org.jboss.forge.roaster.model.source.ParameterSource) PathMatchingResourcePatternResolver(org.springframework.core.io.support.PathMatchingResourcePatternResolver) ApiOperation(io.swagger.annotations.ApiOperation) Matcher(java.util.regex.Matcher) TagElement(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.TagElement) Roaster(org.jboss.forge.roaster.Roaster) Path(io.swagger.models.Path) Map(java.util.Map) MetadataReader(org.springframework.core.type.classreading.MetadataReader) Operation(io.swagger.models.Operation) Method(java.lang.reflect.Method) MethodSource(org.jboss.forge.roaster.model.source.MethodSource) Resource(org.springframework.core.io.Resource) RefModel(io.swagger.models.RefModel) ClassUtils(org.springframework.util.ClassUtils) PathParameter(io.swagger.models.parameters.PathParameter) JavaDocSource(org.jboss.forge.roaster.model.source.JavaDocSource) Set(java.util.Set) CachingMetadataReaderFactory(org.springframework.core.type.classreading.CachingMetadataReaderFactory) RequestMethod(org.springframework.web.bind.annotation.RequestMethod) Collectors(java.util.stream.Collectors) RestController(org.springframework.web.bind.annotation.RestController) QueryParameter(io.swagger.models.parameters.QueryParameter) Response(io.swagger.models.Response) List(java.util.List) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) CollectionUtils(org.springframework.util.CollectionUtils) JavaDocTag(org.jboss.forge.roaster.model.JavaDocTag) Pattern(java.util.regex.Pattern) Javadoc(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.Javadoc) Swagger(io.swagger.models.Swagger) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) HashMap(java.util.HashMap) BooleanUtils(org.apache.commons.lang3.BooleanUtils) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) RequestBody(org.springframework.web.bind.annotation.RequestBody) XmlType(javax.xml.bind.annotation.XmlType) Lists(com.google.common.collect.Lists) Parameter(java.lang.reflect.Parameter) RefProperty(io.swagger.models.properties.RefProperty) SystemPropertyUtils(org.springframework.util.SystemPropertyUtils) Api(io.swagger.annotations.Api) BodyParameter(io.swagger.models.parameters.BodyParameter) IOException(java.io.IOException) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) Log(org.apache.maven.plugin.logging.Log) ResourcePatternResolver(org.springframework.core.io.support.ResourcePatternResolver) Comparator(java.util.Comparator) Collections(java.util.Collections) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) Matcher(java.util.regex.Matcher) ArrayList(java.util.ArrayList) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) RestController(org.springframework.web.bind.annotation.RestController) Method(java.lang.reflect.Method) RequestMethod(org.springframework.web.bind.annotation.RequestMethod) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ApiOperation(io.swagger.annotations.ApiOperation) SerializableParameter(io.swagger.models.parameters.SerializableParameter) PathParameter(io.swagger.models.parameters.PathParameter) QueryParameter(io.swagger.models.parameters.QueryParameter) Parameter(java.lang.reflect.Parameter) BodyParameter(io.swagger.models.parameters.BodyParameter) Api(io.swagger.annotations.Api) Tag(io.swagger.models.Tag) JavaDocTag(org.jboss.forge.roaster.model.JavaDocTag)

Example 33 with Parameter

use of java.lang.reflect.Parameter in project jdbi by jdbi.

the class BindBeanListFactory method createForParameter.

@Override
public SqlStatementParameterCustomizer createForParameter(Annotation annotation, Class<?> sqlObjectType, Method method, Parameter param, int index, Type type) {
    final BindBeanList bindBeanList = (BindBeanList) annotation;
    final String name = ParameterUtil.findParameterName(bindBeanList.value(), param).orElseThrow(() -> new UnsupportedOperationException("A @BindBeanList parameter was not given a name, " + "and parameter name data is not present in the class file, for: " + param.getDeclaringExecutable() + "::" + param));
    return (stmt, arg) -> {
        if (arg == null) {
            throw new IllegalArgumentException("argument is null; null was explicitly forbidden on BindBeanList");
        }
        stmt.bindBeanList(name, IterableLike.toList(arg), Arrays.asList(bindBeanList.propertyNames()));
    };
}
Also used : Arrays(java.util.Arrays) ParameterUtil(org.jdbi.v3.sqlobject.internal.ParameterUtil) Type(java.lang.reflect.Type) Parameter(java.lang.reflect.Parameter) SqlStatementCustomizerFactory(org.jdbi.v3.sqlobject.customizer.SqlStatementCustomizerFactory) Annotation(java.lang.annotation.Annotation) BindBeanList(org.jdbi.v3.sqlobject.customizer.BindBeanList) SqlStatementParameterCustomizer(org.jdbi.v3.sqlobject.customizer.SqlStatementParameterCustomizer) IterableLike(org.jdbi.v3.core.internal.IterableLike) Method(java.lang.reflect.Method) BindBeanList(org.jdbi.v3.sqlobject.customizer.BindBeanList)

Example 34 with Parameter

use of java.lang.reflect.Parameter in project jdbi by jdbi.

the class BindMapFactory method createForParameter.

@Override
public SqlStatementParameterCustomizer createForParameter(Annotation a, Class<?> sqlObjectType, Method method, Parameter param, int index, Type type) {
    BindMap annotation = (BindMap) a;
    List<String> keys = Arrays.asList(annotation.keys());
    String prefix = annotation.value().isEmpty() ? "" : annotation.value() + ".";
    return (stmt, arg) -> {
        Map<?, ?> map = (Map<?, ?>) arg;
        Map<String, Object> toBind = new HashMap<>();
        map.forEach((k, v) -> {
            if (annotation.convertKeys() || k instanceof String) {
                String key = k.toString();
                if (keys.isEmpty() || keys.contains(key)) {
                    toBind.put(prefix + key, v);
                }
            } else {
                throw new IllegalArgumentException("Key " + k + " (of " + k.getClass() + ") must be a String");
            }
        });
        keys.forEach(key -> toBind.putIfAbsent(prefix + key, null));
        stmt.bindMap(toBind);
    };
}
Also used : BindMap(org.jdbi.v3.sqlobject.customizer.BindMap) Arrays(java.util.Arrays) List(java.util.List) Type(java.lang.reflect.Type) Parameter(java.lang.reflect.Parameter) SqlStatementCustomizerFactory(org.jdbi.v3.sqlobject.customizer.SqlStatementCustomizerFactory) Map(java.util.Map) Annotation(java.lang.annotation.Annotation) SqlStatementParameterCustomizer(org.jdbi.v3.sqlobject.customizer.SqlStatementParameterCustomizer) HashMap(java.util.HashMap) Method(java.lang.reflect.Method) BindMap(org.jdbi.v3.sqlobject.customizer.BindMap) BindMap(org.jdbi.v3.sqlobject.customizer.BindMap) Map(java.util.Map) HashMap(java.util.HashMap)

Example 35 with Parameter

use of java.lang.reflect.Parameter in project jdbi by jdbi.

the class DefineFactory method createForParameter.

@Override
public SqlStatementParameterCustomizer createForParameter(Annotation annotation, Class<?> sqlObjectType, Method method, Parameter param, int index, Type type) {
    Define define = (Define) annotation;
    final String name = ParameterUtil.findParameterName(define.value(), param).orElseThrow(() -> new UnsupportedOperationException("A @Define parameter was not given a name, " + "and parameter name data is not present in the class file, for: " + param.getDeclaringExecutable() + "::" + param));
    return (stmt, arg) -> stmt.define(name, arg);
}
Also used : Define(org.jdbi.v3.sqlobject.customizer.Define) ParameterUtil(org.jdbi.v3.sqlobject.internal.ParameterUtil) Type(java.lang.reflect.Type) Parameter(java.lang.reflect.Parameter) SqlStatementCustomizerFactory(org.jdbi.v3.sqlobject.customizer.SqlStatementCustomizerFactory) Annotation(java.lang.annotation.Annotation) SqlStatementParameterCustomizer(org.jdbi.v3.sqlobject.customizer.SqlStatementParameterCustomizer) Method(java.lang.reflect.Method) Define(org.jdbi.v3.sqlobject.customizer.Define)

Aggregations

Parameter (java.lang.reflect.Parameter)165 Method (java.lang.reflect.Method)74 ArrayList (java.util.ArrayList)31 Annotation (java.lang.annotation.Annotation)25 Type (java.lang.reflect.Type)21 List (java.util.List)20 Test (org.junit.Test)18 Constructor (java.lang.reflect.Constructor)16 Map (java.util.Map)11 Executable (java.lang.reflect.Executable)10 InvocationTargetException (java.lang.reflect.InvocationTargetException)9 HashMap (java.util.HashMap)9 PathParam (javax.ws.rs.PathParam)9 FormParameter (io.swagger.models.parameters.FormParameter)7 IOException (java.io.IOException)7 Arrays (java.util.Arrays)7 SqlStatementCustomizerFactory (org.jdbi.v3.sqlobject.customizer.SqlStatementCustomizerFactory)7 SqlStatementParameterCustomizer (org.jdbi.v3.sqlobject.customizer.SqlStatementParameterCustomizer)7 RequestPart (org.springframework.web.bind.annotation.RequestPart)7 HashSet (java.util.HashSet)6