package org.scribble.codegen.java.util;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
public class InterfaceBuilder extends TypeBuilder
{
private List<MethodBuilder> defaults = new LinkedList<>();
public InterfaceBuilder()
{
}
public InterfaceBuilder(String name)
{
super(name);
}
public MethodBuilder newDefaultMethod()
{
MethodBuilder mb = new MethodBuilder();
mb.addModifiers(JavaBuilder.DEFAULT);
this.defaults.add(mb);
return mb;
}
public final MethodBuilder newDefaultMethod(String name)
{
MethodBuilder mb = newDefaultMethod();
mb.setName(name);
return mb;
}
public final List<MethodBuilder> getDefaultMethods()
{
return this.defaults;
}
@Override
protected String buildSignature(String clazz)
{
if (!this.mods.isEmpty())
{
clazz += this.mods.stream().collect(Collectors.joining(" "));
clazz += " ";
}
clazz += "interface " + this.name;
if (!this.params.isEmpty())
{
clazz += "<" + this.params.stream().collect(Collectors.joining(", ")) + ">";
}
if (!this.ifaces.isEmpty())
{
clazz += " extends ";
clazz += this.ifaces.stream().collect(Collectors.joining(", "));
}
return clazz;
}
@Override
protected String buildMethods(String clazz)
{
clazz = super.buildMethods(clazz);
if (!this.defaults.isEmpty())
{
clazz += "\n\n";
clazz += this.defaults.stream().map((mb) -> mb.build()).collect(Collectors.joining("\n\n"));
}
return clazz;
}
}