extract(Parameter)   A
last analyzed

Complexity

Conditions 3

Size

Total Lines 10
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 8
dl 0
loc 10
rs 10
c 0
b 0
f 0
1
package com.hltech.pact.gen.domain.client.util;
2
3
import com.hltech.pact.gen.domain.client.model.Param;
4
import org.springframework.web.bind.annotation.PathVariable;
5
6
import java.lang.reflect.Method;
7
import java.lang.reflect.Parameter;
8
import java.util.Arrays;
9
import java.util.List;
10
import java.util.Map;
11
import java.util.stream.Collectors;
12
13
public final class PathParametersExtractor {
14
15
    private PathParametersExtractor() {}
16
17
    public static List<Param> extractAll(Method feignClientMethod) {
18
        return Arrays.stream(feignClientMethod.getParameters())
19
            .filter(param -> param.getAnnotation(PathVariable.class) != null)
20
            .filter(param -> param.getType() != Map.class)
21
            .map(PathParametersExtractor::extract)
22
            .collect(Collectors.toList());
23
    }
24
25
    private static Param extract(Parameter param) {
26
        PathVariable annotation = param.getAnnotation(PathVariable.class);
27
28
        List<Class<?>> paramTypes = TypeExtractor.extractParameterTypesFromType(param.getParameterizedType());
29
30
        return Param.builder()
31
            .name(annotation.name().isEmpty() ? annotation.value() : annotation.name())
32
            .type(param.getType())
33
            .genericArgumentType(paramTypes.isEmpty() ? null : paramTypes.get(0))
34
            .build();
35
    }
36
}
37