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); }
private Function newStaticInit() { Function f = new Function(Function.Type.StaticInit, null, null).setBody(block( stat(methodCall( expr(typeRef(BridJ.class)), Expression.MemberRefStyle.Dot, "register")))).addModifiers(ModifierType.Static); return f; }
private Expression createGetPeerExpression(Expression value) { return methodCall(expr(typeRef(org.bridj.Pointer.class)), "getPeer", value); } private Expression createPointerToAddressExpression(NL4JConversion pointerType, Expression value) {
private Expression createGetEnumValueExpression(Expression value) { return cast(typeRef(int.class), methodCall(value, "value")); } private Expression createGetIntegralValueExpression(Expression value) {
String itemName = result.typeConverter.getValidJavaIdentifierString(ident(er.originalItem.getName())); Enum.EnumItem item = new Enum.EnumItem(itemName, er.convertedValue); en.addItem(item); en.addInterface(ident(IntValuedEnum.class, expr(typeRef(enumName.clone())))); String valueArgName = "value"; body.addDeclaration(new Function(Type.JavaMethod, enumName.clone(), null, new Arg(valueArgName, typeRef(Long.TYPE))).setBody(block( stat(expr(memberRef(thisRef(), MemberRefStyle.Dot, valueArgName), AssignmentOperator.Equal, varRef(valueArgName)))))); body.addDeclaration(new VariablesDeclaration(typeRef(Long.TYPE), new DirectDeclarator(valueArgName)).addModifiers(ModifierType.Public, ModifierType.Final)); body.addDeclaration(new Function(Type.JavaMethod, ident(valueArgName), typeRef(Long.TYPE)).setBody(block( new Statement.Return(memberRef(thisRef(), MemberRefStyle.Dot, valueArgName)))).addModifiers(ModifierType.Public)); body.addDeclaration(new Function(Type.JavaMethod, ident("iterator"), typeRef(ident(Iterator.class, expr(typeRef(enumName.clone()))))).setBody(block( new Statement.Return( methodCall( methodCall( expr(typeRef(Collections.class)), MemberRefStyle.Dot, "singleton", thisRef()), MemberRefStyle.Dot, "iterator")))).addModifiers(ModifierType.Public)); body.addDeclaration(new Function(Type.JavaMethod, ident("fromValue"), typeRef(ident(IntValuedEnum.class, expr(typeRef(enumName.clone())))), new Arg(valueArgName, typeRef(Integer.TYPE))).setBody(block( new Statement.Return( methodCall( expr(typeRef(FlagSet.class)), MemberRefStyle.Dot, "fromValue",
@Override protected Struct createFakePointerClass(Identifier fakePointer) { Struct ptClass = result.declarationsConverter.publicStaticClass(fakePointer, ident(TypedPointer.class), Struct.Type.JavaClass, null); String addressVarName = "address"; ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null, new Arg(addressVarName, typeRef(long.class))).addModifiers(ModifierType.Public).setBody( block(stat(methodCall("super", varRef(addressVarName)))))); ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null, new Arg(addressVarName, typeRef(org.bridj.Pointer.class))).addModifiers(ModifierType.Public).setBody( block(stat(methodCall("super", varRef(addressVarName)))))); return ptClass; }
private Conversion convertTypeToJavaCL(Result result, String argName, TypeRef valueType, TypeConversionMode typeConversionMode, Identifier libraryClassName) throws UnsupportedConversionException { Conversion ret = new Conversion(); ret.argName = argName; ret.convertedExpr = varRef(argName); ret.outerJavaTypeRef = typeRef(ident(CLBuffer.class, expr(typeRef(pair.getSecond())))); return ret; name : result.typeConverter.findRef(name, target, libraryClassName, true); if (ref != null) { ret.outerJavaTypeRef = typeRef(ident(CLBuffer.class, expr(typeRef(ref)))); return ret; TypeRef ref = result.typeConverter.findStructRef((Struct)target, libraryClassName); if (ref != null) { ret.outerJavaTypeRef = typeRef(ident(CLBuffer.class, expr(ref))); return ret; String name = sr.getName() == null ? sr.toString() : sr.getName().toString(); if (name.equals("size_t")) { ret.outerJavaTypeRef = typeRef(Long.TYPE); ret.convertedExpr = new Expression.New(typeRef(NativeSize.class), ret.convertedExpr); return ret; } else { Pair<Integer, Class<?>> pair = arraysAndArityByType.get(name); if (pair != null) { ret.outerJavaTypeRef = typeRef(pair.getSecond()); if (pair.getFirst().intValue() != 1) { ret.extraStatements.add( stat(
public List<Declaration> convertVariablesDeclarationToBridJ(String name, TypeRef mutatedType, int[] iChild, int bits, boolean isGlobal, Identifier holderName, Identifier callerLibraryName, String callerLibrary, Element... toImportDetailsFrom) throws UnsupportedConversionException { name = result.typeConverter.getValidJavaArgumentName(ident(name)).toString(); mutatedType, callerLibraryName, thisField("io"), varRef(name), fieldIndex, bits); convDecl.setName(ident(name)); convDecl.addAnnotation(new Annotation(result.config.runtime.typeRef(JNAeratorConfig.Runtime.Ann.Field), expr(fieldIndex))); Expression getGlobalPointerExpr = methodCall(methodCall(expr(typeRef(BridJ.class)), "getNativeLibrary", expr(callerLibrary)), "getSymbolPointer", expr(name)); String getterName = "get"; String setterName = "set"; getGlobalPointerExpr = methodCall(getGlobalPointerExpr, "as", result.typeConverter.typeLiteral(javaType.clone())); Function getter = convDecl.clone(); if (isGlobal) { getter.setBody(block( tryRethrow(new Statement.Return(cast(javaType.clone(), methodCall(getGlobalPointerExpr, getterName)))))); } else { getter.setBody(block( new Statement.Return(conv.getFieldExpr))); setter.setValueType(typeRef(holderName.clone()));//Void.TYPE)); setter.addArg(new Arg(name, javaType));
Function createCastMethod(Identifier name, Identifier classId, boolean isStatic) { Function m = new Function(); m.setType(Function.Type.JavaMethod); m.addModifiers(ModifierType.Public); m.setName(ident("as" + (isStatic ? "Static_" : "_") + name)); m.setValueType(typeRef(classId.clone())); m.setBody(block( new Statement.Return( methodCall( expr(typeRef(Rococoa.class)), MemberRefStyle.Dot, "cast", varRef("this"), result.typeConverter.typeLiteral(typeRef(classId.clone())))))); return m; }
case NativeLong: conv.type = ConvType.NativeLong; conv.typeRef = typeRef(Long.TYPE); conv.indirectType = typeRef(org.bridj.CLong.class); radix = "CLong"; break; case NativeSize: conv.type = ConvType.NativeSize; conv.typeRef = typeRef(Long.TYPE); conv.indirectType = typeRef(org.bridj.SizeT.class); radix = "SizeT"; break; case NativeTime: conv.type = ConvType.NativeTime; conv.typeRef = typeRef(TimeT.class); case ComplexDouble: conv.type = ConvType.ComplexDouble; conv.typeRef = typeRef(org.bridj.ComplexDouble.class); radix = "NativeObject"; break; conv.type = ConvType.Primitive; conv.typeRef = primRef(valueExpr, prim); conv.indirectType = typeRef(prim.wrapperType); radix = StringUtils.capitalize(prim.type.getName()); break; conv.setFieldExpr = methodCall(structIOExpr.clone(), "set" + radix + "Field", thisRef(), expr(fieldIndex), valueExpr);
createCopy.setCommentBefore("Factory method"); createCopy.addToCommentBefore("@see #" + meth.computeSignature(SignatureType.JavaStyle)); createCopy.setName(ident("create" + name.substring("init".length()))); createCopy.addModifiers(ModifierType.Public, ModifierType.Static); createCopy.reorganizeModifiers(); int i = 0; for (Arg arg : meth.getArgs()) { args[i++] = varRef(arg.getName()); Expression val = methodCall( methodCall( methodCall(null, null, classInstanceGetterName), Expression.MemberRefStyle.Dot, "alloc"), val = methodCall(val, MemberRefStyle.Dot, "autorelease"); val = methodCall(expr(typeRef(Rococoa.class)), MemberRefStyle.Dot, "cast", val, memberRef(expr(typeRef(instanceStruct.getTag())), MemberRefStyle.Dot, "class"));
private Expression createEnumExpression(NL4JConversion enumType, Expression value) { TypeRef tr = enumType.getTypeRef(false); return methodCall(expr(typeRef(org.bridj.FlagSet.class)), "fromValue", value, result.typeConverter.typeLiteral(getSingleTypeParameter(tr))); }
private Function createProxyCopy(Function originalMethod, Function meth) { if (isMethodExcludedFromStaticForwarding(originalMethod)) { return null; } Function proxyCopy = meth.clone(); proxyCopy.addModifiers(ModifierType.Public, ModifierType.Static); proxyCopy.reorganizeModifiers(); Expression[] args = new Expression[meth.getArgs().size()]; int i = 0; for (Arg arg : meth.getArgs()) { args[i++] = varRef(arg.getName()); } Expression val = methodCall(methodCall(null, null, classInstanceGetterName), Expression.MemberRefStyle.Dot, meth.getName().toString(), args); proxyCopy.setBody(new Block( meth.getValueType() == null || "void".equals(meth.getValueType().toString()) ? stat(val) : new Statement.Return(val))); return proxyCopy; } // protected static _class_ _CLASS_ = org.rococoa.Rococoa.createClass("NSURL", _class_.class);
private Expression scopeClose(Expression content) { return methodCall(varRef(scopeName), Expression.MemberRefStyle.Dot, "Close", content); }
public static Identifier v8Ident(String name, Identifier... args) { Expression[] exprArgs = new Expression[args.length]; for (int i = 0; i < args.length; i++) { exprArgs[i] = expr(typeRef(args[i])); } return templateIdent(ident("v8", name), exprArgs); }
protected Identifier libMember(Identifier libClass, Identifier libraryClassName, Identifier member) { //return ident(SyntaxUtils.equal(libClass, libraryClassName) ? null : libClass, member); return ident(libClass, member); //return member; //TODODODODODODODODOoOOOOO }