blob: b2f2507ee1f8cff9aa4763b8d4c57884b5be73a5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
package com.github.javaparser.ast.nodeTypes;
import com.github.javaparser.ast.Modifier;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.ConstructorDeclaration;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
import static java.util.Collections.unmodifiableList;
import static java.util.stream.Collectors.toCollection;
import static java.util.stream.Collectors.toList;
public interface NodeWithConstructors<N extends Node> extends NodeWithSimpleName<N>, NodeWithMembers<N> {
/**
* Try to find a {@link ConstructorDeclaration} with no parameters by its name
*
* @return the constructors found (multiple in case of polymorphism)
*/
default Optional<ConstructorDeclaration> getDefaultConstructor() {
return getMembers().stream().filter(bd -> bd instanceof ConstructorDeclaration).map(bd -> (ConstructorDeclaration) bd).filter(cd -> cd.getParameters().isEmpty()).findFirst();
}
/**
* Adds a constructor to this
*
* @param modifiers the modifiers like {@link Modifier#PUBLIC}
* @return the created constructor
*/
default ConstructorDeclaration addConstructor(Modifier... modifiers) {
ConstructorDeclaration constructorDeclaration = new ConstructorDeclaration();
constructorDeclaration.setModifiers(Arrays.stream(modifiers).collect(toCollection(() -> EnumSet.noneOf(Modifier.class))));
constructorDeclaration.setName(getName());
getMembers().add(constructorDeclaration);
return constructorDeclaration;
}
/**
* Find all constructors for this class.
*
* @return the constructors found. This list is immutable.
*/
default List<ConstructorDeclaration> getConstructors() {
return unmodifiableList(getMembers().stream().filter(m -> m instanceof ConstructorDeclaration).map(m -> (ConstructorDeclaration) m).collect(toList()));
}
/**
* Try to find a {@link ConstructorDeclaration} by its parameters types
*
* @param paramTypes the types of parameters like "Map<Integer,String>","int" to match<br> void
* foo(Map<Integer,String> myMap,int number)
* @return the constructor found (multiple in case of overloading)
*/
default Optional<ConstructorDeclaration> getConstructorByParameterTypes(String... paramTypes) {
return getConstructors().stream().filter(m -> m.hasParametersOfType(paramTypes)).findFirst();
}
/**
* Try to find a {@link ConstructorDeclaration} by its parameters types
*
* @param paramTypes the types of parameters like "Map<Integer,String>","int" to match<br> void
* foo(Map<Integer,String> myMap,int number)
* @return the constructors found (multiple in case of overloading)
*/
default Optional<ConstructorDeclaration> getConstructorByParameterTypes(Class<?>... paramTypes) {
return getConstructors().stream().filter(m -> m.hasParametersOfType(paramTypes)).findFirst();
}
}
|