Generator: Make sure that @GLvoid types result in proper address calculations at the native side, even though the parameter java type is not java.nio.Buffer

This commit is contained in:
Elias Naur 2006-11-27 23:01:01 +00:00
parent 9709e6da2b
commit 93eabcf999
2 changed files with 10 additions and 5 deletions

View File

@ -215,7 +215,8 @@ public class NativeMethodStubsGenerator {
} else {
Class java_type = Utils.getJavaType(param.getType());
if (Buffer.class.isAssignableFrom(java_type)) {
boolean explicitly_byte_sized = java_type.equals(Buffer.class);
boolean explicitly_byte_sized = java_type.equals(Buffer.class) ||
translator.getAnnotationType().equals(type_map.getVoidType());
if (explicitly_byte_sized)
writer.print("(((char *)");
if (method.getAnnotation(GenerateAutos.class) != null || (check_annotation != null && check_annotation.canBeNull())) {

View File

@ -77,16 +77,20 @@ public class NativeTypeTranslator implements TypeVisitor {
StringBuilder signature = new StringBuilder();
if (declaration.getAnnotation(Const.class) != null)
signature.append("const ");
if (native_types.size() != 1)
throw new RuntimeException("Expected only one native type for declaration " + declaration +
", but got " + native_types.size());
// Use the name of the native type annotation as the C type name
signature.append(native_types.iterator().next().getSimpleName());
signature.append(getAnnotationType().getSimpleName());
if (is_indirect)
signature.append(" *");
return signature.toString();
}
public Class getAnnotationType() {
if (native_types.size() != 1)
throw new RuntimeException("Expected only one native type for declaration " + declaration +
", but got " + native_types.size());
return native_types.iterator().next();
}
public void visitAnnotationType(AnnotationType t) {
throw new RuntimeException(t + " is not allowed");
}