public Result createResult(final ClassOutputter outputter, Feedback feedback) { return new Result(config, outputter, feedback); }
public void outputObjectiveCClass(Struct in) throws IOException { Identifier fullClassName = getFullClassName(in); Signatures signatures = new Signatures(); Struct s = generateObjectiveCClass(in, signatures); result.notifyBeforeWritingClass(fullClassName, s, signatures, result.getLibrary(in)); PrintWriter out = result.classOutputter.getClassSourceWriter(fullClassName.toString()); result.printJavaClass(getPackageName(in), s, out); out.close(); } static Identifier NSObjectIdent = ident(NSObject.class),
result.prim("void", JavaPrim.Void); result.prim("VOID", JavaPrim.Void); result.prim("UTF32Char", JavaPrim.Int); result.prim("unichar", JavaPrim.Char); result.prim("int64_t", JavaPrim.Long); result.prim("uint64_t", JavaPrim.Long); result.prim("u_int64_t", JavaPrim.Long); result.prim("long long", JavaPrim.Long); result.prim("long long int", JavaPrim.Long); result.prim("long int", JavaPrim.Int); result.prim("LONGLONG", JavaPrim.Long); result.prim("ULONGLONG", JavaPrim.Long); result.prim("INT", JavaPrim.Int); result.prim("UINT", JavaPrim.Int); result.prim("SHORT", JavaPrim.Short); result.prim("USHORT", JavaPrim.Short); result.prim("CHAR", JavaPrim.Byte); result.prim("byte", JavaPrim.Byte); result.prim("BYTE", JavaPrim.Byte); result.prim("UBYTE", JavaPrim.Byte); result.prim("DOUBLE", JavaPrim.Double); result.prim("FLOAT", JavaPrim.Float); result.prim("WORD", JavaPrim.Short); result.prim("DWORD", JavaPrim.Int); result.prim("DWORD64", JavaPrim.Long); result.prim("LONG64", JavaPrim.Long); result.prim("UInt64", JavaPrim.Long);
public Identifier getUndefinedType(Identifier libraryToUseIfNotDefinedYet, Identifier name) { Identifier lib = findUndefinedType(name); if (lib != null) { return lib; } name = getUndefinedTypeName(name); Set<String> set = undefinedTypesByLibrary.get(libraryToUseIfNotDefinedYet); if (set == null) { undefinedTypesByLibrary.put(libraryToUseIfNotDefinedYet.toString(), set = new HashSet<String>()); } set.add(name.toString()); Identifier id = ident(libraryToUseIfNotDefinedYet, name); resolvedUndefinedTypes.add(id); return id; }
public Identifier getFakePointer(Identifier libraryToUseIfNotDefinedYet, Identifier name) { Identifier lib = findFakePointer(name); if (lib != null) { return lib; } name = getFakePointerName(name); Set<String> set = fakePointersByLibrary.get(libraryToUseIfNotDefinedYet); if (set == null && libraryToUseIfNotDefinedYet != null) { fakePointersByLibrary.put(libraryToUseIfNotDefinedYet.toString(), set = new HashSet<String>()); } set.add(name.toString()); Identifier id = libraryToUseIfNotDefinedYet == null ? ident(name) : ident(libraryToUseIfNotDefinedYet, name); resolvedFakePointers.add(id); return id; }
protected void outputConvertedStruct(Struct struct, Signatures signatures, DeclarationsHolder out, String callerLibrary, boolean onlyFields) throws IOException { Struct structJavaClass = convertStruct(struct, signatures, out.getResolvedJavaIdentifier(), callerLibrary, onlyFields); if (structJavaClass == null) { return; } if (result.config.putTopStructsInSeparateFiles && struct.findParentOfType(Struct.class) == null) { String library = result.getLibrary(struct); Identifier javaPackage = result.getLibraryPackage(library); Identifier fullClassName = ident(javaPackage, structJavaClass.getTag().clone()); if (result.config.runtime == JNAeratorConfig.Runtime.BridJ) { structJavaClass.addAnnotation(new Annotation(typeRef(org.bridj.ann.Library.class), expr(library))); } structJavaClass.removeModifiers(ModifierType.Static); structJavaClass = result.notifyBeforeWritingClass(fullClassName, structJavaClass, signatures, library); if (structJavaClass != null) { PrintWriter pout = result.classOutputter.getClassSourceWriter(fullClassName.toString()); result.printJavaClass(javaPackage, structJavaClass, pout); pout.close(); } } else { out.addDeclaration(decl(structJavaClass)); } }
protected void writeLibraryInterface(Result result, SourceFiles sourceFiles, DeclarationsHolder interf, String library, Identifier javaPackage) throws IOException { Identifier fullLibraryClassName = interf.getResolvedJavaIdentifier(); Signatures signatures = result.getSignaturesForOutputClass(fullLibraryClassName); if (interf instanceof Struct) { interf = result.notifyBeforeWritingClass(fullLibraryClassName, (Struct) interf, signatures, library); if (interf != null) { final PrintWriter out = result.classOutputter.getClassSourceWriter(fullLibraryClassName.toString()); //out.println("///\n/// This file was autogenerated by JNAerator (http://jnaerator.googlecode.com/), \n/// a tool written by Olivier Chafik (http://ochafik.com/).\n///"); result.printJavaClass(javaPackage, (Struct) interf, out); out.close(); } } else if (interf instanceof SourceFile) { SourceFile sourceFile = (SourceFile) interf; String sourcePath = sourceFile.getElementFile(); assert sourcePath != null; final PrintWriter out = result.classOutputter.getSourceWriter(sourcePath); //out.println("///\n/// This file was autogenerated by JNAerator (http://jnaerator.googlecode.com/), \n/// a tool written by Olivier Chafik (http://ochafik.com/).\n///"); out.print(sourceFile); out.close(); } } }
String lib = getLibrary(struct); if (lib != null) { if (!config.frameworks.contains(lib)) { if (declarativePower(struct) > declarativePower(oldStruct)) { structsByName.put(name, struct); Identifier originalName = struct.getOriginalTag(); getList(structsByLibrary, getLibrary(struct)).add(struct); getMap(objCCategoriesByTargetType, struct.getTag()).put(struct.getCategoryName(), struct); objCCategoriesByName.put(struct.getCategoryName(), struct); } else { getMap(classes, struct.getType()).put(struct.getTag(), struct);
String lib = getLibrary(e); if (name == null) { getList(enumsByLibrary, lib).add(e); } else { Enum oldEnum = enumsByName.get(name); if (declarativePower(e) > declarativePower(oldEnum)) { enumsByName.put(name, e); e.setResolvedJavaIdentifier(typeConverter.computeTaggedTypeIdentifierInJava(e)); getList(enumsByLibrary, lib).add(e);
result.rehabilitateWeakTypeDefs(); result.chooseLibraryClasses(config.packageName, config.rootPackageName); if (list != null) { String lib = result.libraries.iterator().next(); Result.getList(result.definesByLibrary, lib).addAll(list);
return typeRef(result.getFakePointer(libraryClassName, name)); } else if ((tname = result.findFakePointer(tname)) != null) { return new TypeRef.ArrayRef(typeRef(tname.clone())); if (result.isFakePointer(name)) { if (conversionMode == TypeConversionMode.NativeParameter) { return typeRef(result.config.runtime.pointerClass); return typeRef(result.getFakePointer(libraryClassName, name)); } else { return typeRef(result.config.runtime.pointerClass); case NativeParameter: case NativeParameterWithStructsPtrPtrs: if (result.isFakePointer(name)) return typeRef(result.config.runtime.pointerClass); default: return typeRef(result.getFakePointer(libraryClassName, ((TypeRef.SimpleTypeRef) valueType).getName().clone()));
@Override public void addDeclaration(Declaration d) { implementations.addDeclaration(d); if (d instanceof Function) { Function f = (Function) d; List<Arg> args = f.getArgs(); List<TypeRef> trs = new ArrayList<TypeRef>(2); trs.add(f.getValueType()); if (!args.isEmpty()) { trs.add(args.get(0).getValueType()); } for (TypeRef tr : trs) { if (tr instanceof SimpleTypeRef) { Identifier id = ((SimpleTypeRef) tr).getName(); if (result.isFakePointer(id)) { result.addFunctionReifiableInFakePointer(id, declarations.getResolvedJavaIdentifier(), f); } } } } }
result.printJavaClass(packageIdent, interf, out);
public Identifier getLibraryClassSimpleName(String library) { return ident(camelCase(library) + "Library"); }
public TypeRef parseType(Node node) throws XPathExpressionException, RecognitionException, IOException { if (node == null) { return null; } TypeRef declaredType = null; try { String dt = XMLUtils.getAttribute(node, "declared_type"); if (dt != null) { ObjCppParser parser = new JNAeratorParser().newObjCppParser(result.typeConverter, dt, false, null); parser.setupScopes(); declaredType = parser.mutableTypeRef(); } } catch (Exception ex) { ex.printStackTrace(); } TypeRef inferredType = null; if (declaredType == null || declaredType instanceof SimpleTypeRef) { inferredType = parseAndReconciliateType(XMLUtils.getAttribute(node, "type"), XMLUtils.getAttribute(node, "type64")); if (inferredType != null && declaredType instanceof SimpleTypeRef && !inferredType.toString().equals(declaredType.toString())) { String sn = ((SimpleTypeRef) declaredType).getName().toString(); result.addWeakTypeDef(inferredType.clone(), sn); } } return declaredType != null ? declaredType : inferredType; }
protected void outputConvertedStruct(Struct struct, Signatures signatures, DeclarationsHolder out, String callerLibrary, boolean onlyFields) throws IOException { Struct structJavaClass = convertStruct(struct, signatures, out.getResolvedJavaIdentifier(), callerLibrary, onlyFields); if (structJavaClass == null) { return; } if (result.config.putTopStructsInSeparateFiles && struct.findParentOfType(Struct.class) == null) { String library = result.getLibrary(struct); Identifier javaPackage = result.getLibraryPackage(library); Identifier fullClassName = ident(javaPackage, structJavaClass.getTag().clone()); if (result.config.runtime == JNAeratorConfig.Runtime.BridJ) { structJavaClass.addAnnotation(new Annotation(typeRef(org.bridj.ann.Library.class), expr(library))); } structJavaClass.removeModifiers(ModifierType.Static); structJavaClass = result.notifyBeforeWritingClass(fullClassName, structJavaClass, signatures, library); if (structJavaClass != null) { PrintWriter pout = result.classOutputter.getClassSourceWriter(fullClassName.toString()); result.printJavaClass(javaPackage, structJavaClass, pout); pout.close(); } } else { out.addDeclaration(decl(structJavaClass)); } }
protected void writeLibraryInterface(Result result, SourceFiles sourceFiles, DeclarationsHolder interf, String library, Identifier javaPackage) throws IOException { Identifier fullLibraryClassName = interf.getResolvedJavaIdentifier(); Signatures signatures = result.getSignaturesForOutputClass(fullLibraryClassName); if (interf instanceof Struct) { interf = result.notifyBeforeWritingClass(fullLibraryClassName, (Struct) interf, signatures, library); if (interf != null) { final PrintWriter out = result.classOutputter.getClassSourceWriter(fullLibraryClassName.toString()); //out.println("///\n/// This file was autogenerated by JNAerator (http://jnaerator.googlecode.com/), \n/// a tool written by Olivier Chafik (http://ochafik.com/).\n///"); result.printJavaClass(javaPackage, (Struct) interf, out); out.close(); } } else if (interf instanceof SourceFile) { SourceFile sourceFile = (SourceFile) interf; String sourcePath = sourceFile.getElementFile(); assert sourcePath != null; final PrintWriter out = result.classOutputter.getSourceWriter(sourcePath); //out.println("///\n/// This file was autogenerated by JNAerator (http://jnaerator.googlecode.com/), \n/// a tool written by Olivier Chafik (http://ochafik.com/).\n///"); out.print(sourceFile); out.close(); } } }
String lib = getLibrary(struct); if (lib != null) { if (!config.frameworks.contains(lib)) { if (declarativePower(struct) > declarativePower(oldStruct)) { structsByName.put(name, struct); Identifier originalName = struct.getOriginalTag(); getList(structsByLibrary, getLibrary(struct)).add(struct); getMap(objCCategoriesByTargetType, struct.getTag()).put(struct.getCategoryName(), struct); objCCategoriesByName.put(struct.getCategoryName(), struct); } else { getMap(classes, struct.getType()).put(struct.getTag(), struct);
String lib = getLibrary(e); if (name == null) { getList(enumsByLibrary, lib).add(e); } else { Enum oldEnum = enumsByName.get(name); if (declarativePower(e) > declarativePower(oldEnum)) { enumsByName.put(name, e); e.setResolvedJavaIdentifier(typeConverter.computeTaggedTypeIdentifierInJava(e)); getList(enumsByLibrary, lib).add(e);
result.rehabilitateWeakTypeDefs(); result.chooseLibraryClasses(config.packageName, config.rootPackageName); if (list != null) { String lib = result.libraries.iterator().next(); Result.getList(result.definesByLibrary, lib).addAll(list);