public abstract class UserNativeFunction {
public abstract FunctionSignatureMapper functionSignatureMapper();
private Optional<String> functionBodyCodeInsertion = Optional.absent();
String generateUserFunctionPrototype() {
FunctionSignatureMapper functionSignatureMapper = functionSignatureMapper();
<BUG>String prototypeArgumentList = generatePrototypeArgumentListDefinition(functionSignatureMapper);
return String.format(CppSyntax.FUNCTION_PROTOTYPE_STR.substring(1),
CppSyntax.NO_ADDITIONAL_INDENTATION, functionSignatureMapper.returnTypeMapper().cppType().getCppClassName() + "*",
functionSignatureMapper.functionNameMapper().javaName(), prototypeArgumentList);</BUG>
}

public abstract class UserNativeFunction {
public abstract FunctionSignatureMapper functionSignatureMapper();
private Optional<String> functionBodyCodeInsertion = Optional.absent();
String generateUserFunctionPrototype() {
FunctionSignatureMapper functionSignatureMapper = functionSignatureMapper();
String prototypeArgumentList = generatePrototypeArgumentListDefinition(functionSignatureMapper);
String returnType = JniUtils.wrapInSharedPtr(functionSignatureMapper.returnTypeMapper().cppType().getCppClassName(), PASS_BY_VALUE);
return String.format(CppSyntax.FUNCTION_PROTOTYPE_STR.substring(1),
CppSyntax.NO_ADDITIONAL_INDENTATION, returnType,
functionSignatureMapper.functionNameMapper().javaName(), prototypeArgumentList);
}
