})
@Ensures("result != null")
static MethodModel createBlankContractHelper(
ContractKind kind, ContractAnnotationModel annotation,
String nameSuffix) {
TypeModel type = Elements.getTypeOf(annotation);
MethodModel method = null;
ContractMethodModel contract = null;
MethodModel contracted = null;
if (kind.isMethodContract()) {
contracted = (MethodModel) annotation.getEnclosingElement();
}
TypeName returnType = new TypeName("void");
String name = getHelperName(kind, annotation.getOwner(), contracted);
if (nameSuffix != null) {
name += nameSuffix;
}
if (annotation.isPrimary()) {
contract = new ContractMethodModel(ContractKind.HELPER, name,
returnType, contracted);
contract.setSourceInfo(annotation.getSourceInfo());
if (!annotation.isVirtual()) {
for (TypeName typeParam : type.getTypeParameters()) {
contract.addTypeParameter(typeParam);
}
}
method = contract;
} else {
method = new MethodModel(ElementKind.CONTRACT_MOCK, name, returnType);
if (contracted != null) {
Elements.copyParameters(method, contracted.getParameters());
}
}
if (!annotation.isVirtual()) {
method.addParameter(
new VariableModel(ElementKind.PARAMETER,
JavaUtils.THAT_VARIABLE, annotation.getOwner()));
}
if (!annotation.isVirtual()) {
method.addModifier(ElementModifier.PUBLIC);
method.addModifier(ElementModifier.STATIC);
} else {
method.addModifier(ElementModifier.PROTECTED);
}
if (annotation.isPrimary()
|| annotation.isVirtual() && !annotation.isWeakVirtual()) {
type.addMember(method);
}
return method;
}