com.hltech.pact.gen.domain.client.util.PathParametersExtractor   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 16
dl 0
loc 22
rs 10
c 0
b 0
f 0
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A extract(Parameter) 0 10 3
A PathParametersExtractor() 0 1 1
A extractAll(Method) 0 6 1
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