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 extends NodeWithSimpleName, NodeWithMembers { /** * Try to find a {@link ConstructorDeclaration} with no parameters by its name * * @return the constructors found (multiple in case of polymorphism) */ default Optional 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 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
void * foo(Map<Integer,String> myMap,int number) * @return the constructor found (multiple in case of overloading) */ default Optional 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
void * foo(Map<Integer,String> myMap,int number) * @return the constructors found (multiple in case of overloading) */ default Optional getConstructorByParameterTypes(Class... paramTypes) { return getConstructors().stream().filter(m -> m.hasParametersOfType(paramTypes)).findFirst(); } }