.format(
"Illegal interface %s! A builder's interface must declare exactly 1 generic type parameter!",
interfaceTypeElement.getSimpleName());
throw new InvalidElementException(message, output.getInput().getAnnotatedElement());
}
TypeParameterElement typeParamEl = interfaceTypeElement.getTypeParameters().get(0);
if (!javaModelAnalyzerUtil.isUpperBoundToObject(typeParamEl)) {
String message =
String
.format(
"Illegal interface %s! A builder's interface must declare exactly 1 generic type parameter with an upper bound of Object!",
interfaceTypeElement.getSimpleName());
throw new InvalidElementException(message, output.getInput().getAnnotatedElement());
}
interfaceType.getTypeParameters().clear();
interfaceType.getTypeParameters().add(output.getBuilderModel().getPojoType());
boolean hasBuildMethod =
javaModelAnalyzerUtil.hasBuildMethod(interfaceTypeElement, output.getInput()
.getPojoElement().asType());
if (hasBuildMethod) {
output.getBuilderModel().getBuildMethod().setOverrides(true);
} else {
String message =
String
.format(
"Illegal interface %s! A builder's interface must declare a generic method \"%s build()\"!",
interfaceTypeElement.getSimpleName(), typeParamEl.getSimpleName());
throw new InvalidElementException(message, output.getInput().getAnnotatedElement());
}
output.getBuilderModel().setInterfaceType(interfaceType);
output.getInput().getOrginatingElements()
.add(javaModelAnalyzerUtil.getCompilationUnit(interfaceTypeElement));