f.addModifiers(ModifierType.Private); if (java.lang.reflect.Modifier.isProtected(modifiers)) f.addModifiers(ModifierType.Protected); if (java.lang.reflect.Modifier.isPublic(modifiers)) f.addModifiers(ModifierType.Public); if (java.lang.reflect.Modifier.isStatic(modifiers)) f.addModifiers(ModifierType.Static); f.addModifiers(ModifierType.Abstract); if (java.lang.reflect.Modifier.isFinal(modifiers)) f.addModifiers(ModifierType.Final); if (java.lang.reflect.Modifier.isNative(modifiers)) f.addModifiers(ModifierType.Native); if (java.lang.reflect.Modifier.isSynchronized(modifiers)) f.addModifiers(ModifierType.Synchronized);
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 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 void addAllocIfMissing(Struct in, String allocName) { Identifier n = in.getTag(); if (n.equals("NSObject") || n.equals("NSClass")) { return; } boolean hasAlloc = false; for (Declaration d : in.getDeclarations()) { if (d instanceof Function) { Function f = (Function) d; if (f.getArgs().isEmpty() && allocName.equals(f.getName())) { hasAlloc = true; break; } } } if (!hasAlloc) { in.addDeclaration(new Function(Function.Type.ObjCMethod, ident(allocName), typeRef(in.getTag())).addModifiers(ModifierType.Static)); } }
private void addAllocIfMissing(Struct in, String allocName) { Identifier n = in.getTag(); if (n.equals("NSObject") || n.equals("NSClass")) { return; } boolean hasAlloc = false; for (Declaration d : in.getDeclarations()) { if (d instanceof Function) { Function f = (Function) d; if (f.getArgs().isEmpty() && allocName.equals(f.getName())) { hasAlloc = true; break; } } } if (!hasAlloc) { in.addDeclaration(new Function(Function.Type.ObjCMethod, ident(allocName), typeRef(in.getTag())).addModifiers(ModifierType.Static)); } }
@Override protected Struct createFakePointerClass(Identifier fakePointer) { Struct ptClass = result.declarationsConverter.publicStaticClass(fakePointer, ident(PointerType.class), Struct.Type.JavaClass, null); String pointerVarName = "address"; ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null, new Arg(pointerVarName, typeRef(com.sun.jna.Pointer.class))).addModifiers(ModifierType.Public).setBody( block(stat(methodCall("super", varRef(pointerVarName)))))); ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null) .addModifiers(ModifierType.Public) .setBody( block(stat(methodCall("super"))))); return ptClass; }
@Override protected void visitStoredDeclarations(StoredDeclarations d) { super.visitStoredDeclarations(d); if (d.getDeclarators().size() == 1) { Declarator declarator = d.getDeclarators().get(0); if (declarator instanceof FunctionDeclarator) { FunctionDeclarator fd = (FunctionDeclarator) declarator; Function f = new Function(Function.Type.CFunction, null, d.getValueType(), fd.getArgs()); f.addModifiers(fd.getTarget().getModifiers()); FunctionSignature fs = new FunctionSignature(f); d.setValueType(fs); Declarator target = fd.getTarget(); Declarator newTarget = target == null ? new DirectDeclarator(fd.resolveName(), fd.getDefaultValue()) : target.clone(); d.setDeclarators(Arrays.asList(newTarget)); d.accept(this); } } }
@Override protected void visitStoredDeclarations(StoredDeclarations d) { super.visitStoredDeclarations(d); if (d.getDeclarators().size() == 1) { Declarator declarator = d.getDeclarators().get(0); if (declarator instanceof FunctionDeclarator) { FunctionDeclarator fd = (FunctionDeclarator) declarator; Function f = new Function(Function.Type.CFunction, null, d.getValueType(), fd.getArgs()); f.addModifiers(fd.getTarget().getModifiers()); FunctionSignature fs = new FunctionSignature(f); d.setValueType(fs); Declarator target = fd.getTarget(); Declarator newTarget = target == null ? new DirectDeclarator(fd.resolveName(), fd.getDefaultValue()) : target.clone(); d.setDeclarators(Arrays.asList(newTarget)); d.accept(this); } } }
@Override protected Struct createFakePointerClass(Identifier fakePointer) { Struct ptClass = result.declarationsConverter.publicStaticClass(fakePointer, ident(PointerType.class), Struct.Type.JavaClass, null); String pointerVarName = "address"; ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null, new Arg(pointerVarName, typeRef(com.sun.jna.Pointer.class))).addModifiers(ModifierType.Public).setBody( block(stat(methodCall("super", varRef(pointerVarName)))))); ptClass.addDeclaration(new Function(Function.Type.JavaMethod, fakePointer, null) .addModifiers(ModifierType.Public) .setBody( block(stat(methodCall("super"))))); return ptClass; }
@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; }
@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 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 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);
createCopy.addToCommentBefore("@see #" + meth.computeSignature(SignatureType.JavaStyle)); createCopy.setName(ident("create" + name.substring("init".length()))); createCopy.addModifiers(ModifierType.Public, ModifierType.Static); createCopy.reorganizeModifiers();
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; }
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; }
protected Function createNewStructArrayMethod(Struct struct, boolean isUnion) { if (result.config.runtime == JNAeratorConfig.Runtime.JNA) { return null; } TypeRef tr = typeRef(struct.getTag().clone()); TypeRef ar = new TypeRef.ArrayRef(tr); String varName = "arrayLength"; Function f = new Function(Function.Type.JavaMethod, ident("newArray"), ar, new Arg(varName, typeRef(Integer.TYPE))); f.addModifiers(ModifierType.Public, ModifierType.Static); f.setBody(block( new Statement.Return( methodCall( expr(typeRef(isUnion ? result.config.runtime.unionClass : result.config.runtime.structClass)), MemberRefStyle.Dot, "newArray", result.typeConverter.typeLiteral(tr), varRef(varName))))); return f; }
protected Function createNewStructArrayMethod(Struct struct, boolean isUnion) { if (result.config.runtime == JNAeratorConfig.Runtime.JNA) { return null; } TypeRef tr = typeRef(struct.getTag().clone()); TypeRef ar = new TypeRef.ArrayRef(tr); String varName = "arrayLength"; Function f = new Function(Function.Type.JavaMethod, ident("newArray"), ar, new Arg(varName, typeRef(Integer.TYPE))); f.addModifiers(ModifierType.Public, ModifierType.Static); f.setBody(block( new Statement.Return( methodCall( expr(typeRef(isUnion ? result.config.runtime.unionClass : result.config.runtime.structClass)), MemberRefStyle.Dot, "newArray", result.typeConverter.typeLiteral(tr), 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; }
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; }