decl.setDefaultValue(referenced ? staticPtrMethod("allocate", result.typeConverter.typeLiteral(actualType)) : new Expression.New(actualType.clone())); Expression vr = varRef(new SimpleIdentifier(decl.resolveName())); Statement deleteStat = stat(methodCall(expr(typeRef(BridJ.class)), "delete", referenced ? methodCall(vr, "get") : vr));
decl.setDefaultValue(referenced ? staticPtrMethod("allocate", result.typeConverter.typeLiteral(actualType)) : new Expression.New(actualType.clone())); Expression vr = varRef(new SimpleIdentifier(decl.resolveName())); Statement deleteStat = stat(methodCall(expr(typeRef(BridJ.class)), "delete", referenced ? methodCall(vr, "get") : vr));
case NativeSize: if (!rawMethod.getValueType().toString().equals("long")) { objectToRawFollowedCall = new New(nativeMethod.getValueType().clone(), objectToRawFollowedCall); rawToObjectFollowedCall = createGetIntegralValueExpression(rawToObjectFollowedCall);
case NativeSize: if (!rawMethod.getValueType().toString().equals("long")) { objectToRawFollowedCall = new New(nativeMethod.getValueType().clone(), objectToRawFollowedCall); rawToObjectFollowedCall = createGetIntegralValueExpression(rawToObjectFollowedCall);
new Declarator.DirectDeclarator( name.toString(), new Expression.New( globalType.clone(), constructorArgs.toArray(new Expression[constructorArgs.size()])))); Expression.AssignmentOperator.Equal, isPtr ? ptrExpr : isByRef ? new Expression.New(instType) : new Expression.New(instType, new Expression.FunctionCall(null, ptrExpr, hasOffset ? expr(0) : null))))); if (isByRef) { initStats.add(new Statement.ExpressionStatement(methodCall(instRef, Expression.MemberRefStyle.Dot, "setPointer", ptrExpr)));
new DirectDeclarator( fieldOrderName, new Expression.New( typeRef(ArrayList.class), (Expression) methodCall(varRef("super"), getFieldOrderName))));
new DirectDeclarator( fieldOrderName, new Expression.New( typeRef(ArrayList.class), (Expression) methodCall(varRef("super"), getFieldOrderName))));
new Declarator.DirectDeclarator( name.toString(), new Expression.New( globalType.clone(), constructorArgs.toArray(new Expression[constructorArgs.size()])))); Expression.AssignmentOperator.Equal, isPtr ? ptrExpr : isByRef ? new Expression.New(instType) : new Expression.New(instType, new Expression.FunctionCall(null, ptrExpr, hasOffset ? expr(0) : null))))); if (isByRef) { initStats.add(new Statement.ExpressionStatement(methodCall(instRef, Expression.MemberRefStyle.Dot, "setPointer", ptrExpr)));
if (needsDirect) { if (returnsFakePointer) { finalCall = new Expression.New(fDirect.getValueType(), varRef(indirectRetVarName)); toDirectFakePointer(result, fDirect);
if (needsDirect) { if (returnsFakePointer) { finalCall = new Expression.New(fDirect.getValueType(), varRef(indirectRetVarName)); toDirectFakePointer(result, fDirect);
return methodCall(new Expression.New(structRef), Expression.MemberRefStyle.Dot, "size"); SimpleTypeRef structRef = findStructRef(structName, libraryClassName); if (structRef != null) { return methodCall(new Expression.New(structRef), Expression.MemberRefStyle.Dot, "size"); } else { for (Declaration d : s.getDeclarations()) {
if (name.equals("size_t")) { ret.outerJavaTypeRef = typeRef(Long.TYPE); ret.convertedExpr = new Expression.New(typeRef(NativeSize.class), ret.convertedExpr); return ret; } else {
return methodCall(new Expression.New(structRef), Expression.MemberRefStyle.Dot, "size"); SimpleTypeRef structRef = findStructRef(structName, libraryClassName); if (structRef != null) { return methodCall(new Expression.New(structRef), Expression.MemberRefStyle.Dot, "size"); } else { for (Declaration d : s.getDeclarations()) {
protected Function createNewStructMethod(String name, Struct byRef) { TypeRef tr = typeRef(byRef.getTag().clone()); Function f = new Function(Function.Type.JavaMethod, ident(name), tr); String varName = "s"; f.addModifiers(ModifierType.Protected); if (result.config.runtime != JNAeratorConfig.Runtime.JNA) { f.setBody(block( //new Statement.Return(methodCall("setupClone", new Expression.New(tr.clone(), methodCall(null)))) new Statement.Return(new Expression.New(tr.clone(), methodCall((String) null)))).setCompact(true)); } else { f.setBody(block( stat(tr.clone(), varName, new Expression.New(tr.clone(), methodCall((String) null))), stat(methodCall(varRef(varName), MemberRefStyle.Dot, "useMemory", methodCall("getPointer"))), stat(methodCall("write")), stat(methodCall(varRef(varName), MemberRefStyle.Dot, "read")), new Statement.Return(varRef(varName)))); } return f; }
protected Function createNewStructMethod(String name, Struct byRef) { TypeRef tr = typeRef(byRef.getTag().clone()); Function f = new Function(Function.Type.JavaMethod, ident(name), tr); String varName = "s"; f.addModifiers(ModifierType.Protected); if (result.config.runtime != JNAeratorConfig.Runtime.JNA) { f.setBody(block( //new Statement.Return(methodCall("setupClone", new Expression.New(tr.clone(), methodCall(null)))) new Statement.Return(new Expression.New(tr.clone(), methodCall((String) null)))).setCompact(true)); } else { f.setBody(block( stat(tr.clone(), varName, new Expression.New(tr.clone(), methodCall((String) null))), stat(methodCall(varRef(varName), MemberRefStyle.Dot, "useMemory", methodCall("getPointer"))), stat(methodCall("write")), stat(methodCall(varRef(varName), MemberRefStyle.Dot, "read")), new Statement.Return(varRef(varName)))); } return f; }
private Expression createPointerToAddressExpression(NL4JConversion pointerType, Expression value) { TypeRef tr = pointerType.getTypeRef(false); if (pointerType.isTypedPointer) { return new New(tr, value); } else { Expression ptrExpr = expr(typeRef(org.bridj.Pointer.class)); Expression targetTypeExpr = result.typeConverter.typeLiteral(getSingleTypeParameter(tr)); if (targetTypeExpr == null || (pointerType.targetTypeConversion != null && pointerType.targetTypeConversion.type == ConvType.Void)) { return methodCall(ptrExpr, "pointerToAddress", value); } else { // Cast to unparameterized Pointer to avoid weird cast cases return cast(typeRef(org.bridj.Pointer.class), methodCall(ptrExpr, "pointerToAddress", value, targetTypeExpr)); } } } private Expression createEnumExpression(NL4JConversion enumType, Expression value) {
private Expression createPointerToAddressExpression(NL4JConversion pointerType, Expression value) { TypeRef tr = pointerType.getTypeRef(false); if (pointerType.isTypedPointer) { return new New(tr, value); } else { Expression ptrExpr = expr(typeRef(org.bridj.Pointer.class)); Expression targetTypeExpr = result.typeConverter.typeLiteral(getSingleTypeParameter(tr)); if (targetTypeExpr == null || (pointerType.targetTypeConversion != null && pointerType.targetTypeConversion.type == ConvType.Void)) { return methodCall(ptrExpr, "pointerToAddress", value); } else { // Cast to unparameterized Pointer to avoid weird cast cases return cast(typeRef(org.bridj.Pointer.class), methodCall(ptrExpr, "pointerToAddress", value, targetTypeExpr)); } } } private Expression createEnumExpression(NL4JConversion enumType, Expression value) {
Statement throwIfArraySizeDifferent(String varAndFieldName) { return new Statement.If( expr( memberRef(varRef(varAndFieldName), MemberRefStyle.Dot, "length"), BinaryOperator.IsDifferent, memberRef(memberRef(thisRef(), MemberRefStyle.Dot, varAndFieldName), MemberRefStyle.Dot, "length")), new Statement.Throw(new Expression.New(typeRef(IllegalArgumentException.class), expr("Wrong array size !"))), null); }
public static Statement tryRethrow(Statement st) { String exName = "$ex$"; return new Try(st, null, new Catch(new VariablesDeclaration(typeRef(Throwable.class), new Declarator.DirectDeclarator(exName)), new Throw(new New(typeRef(RuntimeException.class), varRef(exName))))); }
Statement throwIfArraySizeDifferent(String varAndFieldName) { return new Statement.If( expr( memberRef(varRef(varAndFieldName), MemberRefStyle.Dot, "length"), BinaryOperator.IsDifferent, memberRef(memberRef(thisRef(), MemberRefStyle.Dot, varAndFieldName), MemberRefStyle.Dot, "length")), new Statement.Throw(new Expression.New(typeRef(IllegalArgumentException.class), expr("Wrong array size !"))), null); }