package dev.peerat.parser.java.builder; import java.util.ArrayList; import java.util.List; import dev.peerat.parser.Token; import dev.peerat.parser.java.Annotation; import dev.peerat.parser.java.Function; import dev.peerat.parser.java.JavaElement; import dev.peerat.parser.java.Variable; public class JavaFunctionBuilder extends JavaModifiableBuilder{ private List annotations; private String generic; private String type; private String name; private List parameters; private List throwables; private List elements; public JavaFunctionBuilder annotate(JavaAnnotationBuilder annotation){ if(this.annotations == null) this.annotations = new ArrayList<>(); this.annotations.add(annotation.build()); return this; } public JavaFunctionBuilder setGeneric(String generic){ this.generic = generic; return this; } public JavaFunctionBuilder setType(String type){ this.type = type; return this; } public JavaFunctionBuilder setName(String name){ this.name = name; return this; } public JavaFunctionBuilder parameter(JavaVariableBuilder builder){ if(this.parameters == null) this.parameters = new ArrayList<>(); this.parameters.add(builder.build()); return this; } public JavaFunctionBuilder throwable(String throwable){ if(this.throwables == null) this.throwables = new ArrayList<>(); this.throwables.add(new Token(0,0,throwable, null)); return this; } public JavaFunctionBuilder element(JavaElement element){ if(this.elements == null) this.elements = new ArrayList<>(); this.elements.add(element); return this; } public JavaFunctionBuilder normalize(Function func){ normalizeAnnotations(func); normalizeSignature(func); //elements return this; } public JavaFunctionBuilder normalizeAnnotations(Function func){ List annotations = func.getAnnotations(); if(annotations != null && annotations.size() > 0){ if(this.annotations == null) this.annotations = new ArrayList<>(); for(Annotation annotation : annotations){ this.annotations.add(JavaBuilder.ofAnnotation().normalize(annotation).build()); } } return this; } public JavaFunctionBuilder normalizeSignature(Function func){ this.mod = func.getModifier(); if(func.getGeneric() != null) this.generic = func.getGeneric().getValue(); if(func.getReturnType() != null) this.type = func.getReturnType().getValue(); if(func.getName() != null) this.name = func.getName().getValue(); List parameters = func.getParameters(); if(parameters != null && parameters.size() > 0){ if(this.parameters == null) this.parameters = new ArrayList<>(); for(Variable param : parameters) this.parameters.add(JavaBuilder.ofVariable().normalize(param).build()); } List throwables = func.getThrowables(); if(throwables != null && throwables.size() > 0){ if(this.throwables == null) this.throwables = new ArrayList<>(); for(Token token : throwables) this.throwables.add(new Token(0,0, token.getValue(), null)); } return this; } public JavaFunctionBuilder clearAnnotations(){ this.annotations = null; return this; } @Override public Function build(){ Function result = new Function( this.annotations, this.mod, this.generic == null ? null : new Token(0,0, this.generic, null), this.type == null ? null : new Token(0,0, this.type, null), new Token(0,0, this.name, null), this.parameters, this.throwables ); result.getElements().addAll(elements); return result; } }