public Expression findDefine(Identifier name) { Define s = result.defines.get(name); String library = s == null ? null : result.getLibrary(s); return library == null ? null : javaStaticFieldRef(result.getLibraryClassFullName(library), name); }
@Override public void visitDefine(Define define) { super.visitDefine(define); defines.put(define.getName(), define); getList(definesByLibrary, getLibrary(define)).add(define); }
public Identifier findRef(Identifier name, Element e, Identifier libraryClassName, boolean inLibClass) { if (e == null || !name.isPlain()) { return null; } String library = result.getLibrary(e); if (library == null) { return null; } // e = e.getParentElement(); Struct parentStruct = e instanceof Struct ? (Struct) e : e.findParentOfType(Struct.class); if (!inLibClass && parentStruct != null) { if (parentStruct == e) { return ident(result.getLibraryPackage(library), name); } return ident(getTaggedTypeIdentifierInJava(parentStruct), name); } return libMember(result.getLibraryClassFullName(library), libraryClassName, name); }
public Expression findDefine(Identifier name) { Define s = result.defines.get(name); String library = s == null ? null : result.getLibrary(s); return library == null ? null : javaStaticFieldRef(result.getLibraryClassFullName(library), name); }
public Identifier findRef(Identifier name, Element e, Identifier libraryClassName, boolean inLibClass) { if (e == null || !name.isPlain()) { return null; } String library = result.getLibrary(e); if (library == null) { return null; } // e = e.getParentElement(); Struct parentStruct = e instanceof Struct ? (Struct) e : e.findParentOfType(Struct.class); if (!inLibClass && parentStruct != null) { if (parentStruct == e) { return ident(result.getLibraryPackage(library), name); } return ident(getTaggedTypeIdentifierInJava(parentStruct), name); } return libMember(result.getLibraryClassFullName(library), libraryClassName, name); }
@Override public void visitDefine(Define define) { super.visitDefine(define); defines.put(define.getName(), define); getList(definesByLibrary, getLibrary(define)).add(define); }
@Override public void visitEnumItem(EnumItem enumItem) { super.visitEnumItem(enumItem); enumItems.put(enumItem.getName(), enumItem); String library = getLibrary(enumItem); if (library == null) { return; } Element parent = enumItem.getParentElement(); if (parent == null || !(parent instanceof Enum)) { return; } Enum e = (Enum) parent; Identifier ident = ident(getLibraryClassFullName(library), declarationsConverter.getActualTaggedTypeName(e), ident(enumItem.getName())); enumItemsFullName.add(ident); }
@Override public void visitVariablesDeclaration(VariablesDeclaration v) { super.visitVariablesDeclaration(v); if (v.findParentOfTypes(Struct.class, Function.class, Enum.class) != null) { return; } for (Declarator d : v.getDeclarators()) { globalVariablesByName.put(ident(d.resolveName()), v); } getList(globalsByLibrary, getLibrary(v)).add(v); }
@Override public void visitEnumItem(EnumItem enumItem) { super.visitEnumItem(enumItem); enumItems.put(enumItem.getName(), enumItem); String library = getLibrary(enumItem); if (library == null) { return; } Element parent = enumItem.getParentElement(); if (parent == null || !(parent instanceof Enum)) { return; } Enum e = (Enum) parent; Identifier ident = ident(getLibraryClassFullName(library), declarationsConverter.getActualTaggedTypeName(e), ident(enumItem.getName())); enumItemsFullName.add(ident); }
@Override public void visitVariablesDeclaration(VariablesDeclaration v) { super.visitVariablesDeclaration(v); if (v.findParentOfTypes(Struct.class, Function.class, Enum.class) != null) { return; } for (Declarator d : v.getDeclarators()) { globalVariablesByName.put(ident(d.resolveName()), v); } getList(globalsByLibrary, getLibrary(v)).add(v); }
public SimpleTypeRef findEnum(Enum s, Identifier libraryClassName) { if (s == null) { return null; } if (result.config.runtime == JNAeratorConfig.Runtime.BridJ) { return typeRef(getTaggedTypeIdentifierInJava(s)); } Identifier name = result.declarationsConverter.getActualTaggedTypeName(s); String library = result.getLibrary(s); if (library == null) { return null; } Identifier libClass = result.getLibraryClassFullName(library); SimpleTypeRef tr = new SimpleTypeRef("int"); if (result.config.features.contains(JNAeratorConfig.GenFeatures.EnumTypeLocationComments)) { tr.setCommentBefore("@see " + (SyntaxUtils.equal(libClass, libraryClassName) ? name : libClass + "#" + name)); } return tr; }
public TypeRef findCallbackRef(FunctionSignature s, Identifier callerLibraryClass) { String library = s == null ? null : result.getLibrary(s); if (library == null) { return null; } // Struct parentStruct = s.findParentOfType(Struct.class); // if (parentStruct != null && (parentStruct.getType() == Struct.Type.ObjCClass || parentStruct.getType() == Struct.Type.ObjCProtocol)) { // Identifier structName = result.declarationsConverter.getActualTaggedTypeName(parentStruct); // return // typeRef(ident(structName, inferCallBackName(s, true, true))); // } Identifier identifier = s.getResolvedJavaIdentifier(); if (identifier == null) { throw new UnsupportedConversionException(s, null); } return typeRef(identifier); // return typeRef(libMember(result.getLibraryClassFullName(library), callerLibraryClass, inferCallBackName(s, true, true))); //typeRef(ident(result.getLibraryClassFullName(library), inferCallBackName(s, true))); }
public Identifier computeCallbackIdentifierInJava(FunctionSignature fs) { Identifier name = inferCallBackName(fs, false, false, null); if (name == null) { return null; } String library = result.getLibrary(fs); if (library == null) { return null; } name = name.clone(); Struct parentStruct = fs.findParentOfType(Struct.class); //Struct parentStruct = s.findParentOfType(Struct.class); if (parentStruct != null) { return ident(getTaggedTypeIdentifierInJava(parentStruct), name); } else { return libMember(result.getLibraryClassFullName(library), null, name); } } }
@Override public void visitFunctionSignature(FunctionSignature functionSignature) { super.visitFunctionSignature(functionSignature); Function function = functionSignature.getFunction(); Identifier name = typeConverter.inferCallBackName(functionSignature, false, false, null); Identifier identifier = typeConverter.computeCallbackIdentifierInJava(functionSignature); functionSignature.setResolvedJavaIdentifier(identifier); if (function != null) { if (functionSignature.findParentOfType(Struct.class) == null) { getList(callbacksByLibrary, getLibrary(functionSignature)).add(functionSignature); } if (name != null) { callbacksByName.put(name, functionSignature); if (identifier != null) { callbacksFullNames.add(identifier); } } } }
public Identifier computeCallbackIdentifierInJava(FunctionSignature fs) { Identifier name = inferCallBackName(fs, false, false, null); if (name == null) { return null; } String library = result.getLibrary(fs); if (library == null) { return null; } name = name.clone(); Struct parentStruct = fs.findParentOfType(Struct.class); //Struct parentStruct = s.findParentOfType(Struct.class); if (parentStruct != null) { return ident(getTaggedTypeIdentifierInJava(parentStruct), name); } else { return libMember(result.getLibraryClassFullName(library), null, name); } } }
@Override public void visitFunctionSignature(FunctionSignature functionSignature) { super.visitFunctionSignature(functionSignature); Function function = functionSignature.getFunction(); Identifier name = typeConverter.inferCallBackName(functionSignature, false, false, null); Identifier identifier = typeConverter.computeCallbackIdentifierInJava(functionSignature); functionSignature.setResolvedJavaIdentifier(identifier); if (function != null) { if (functionSignature.findParentOfType(Struct.class) == null) { getList(callbacksByLibrary, getLibrary(functionSignature)).add(functionSignature); } if (name != null) { callbacksByName.put(name, functionSignature); if (identifier != null) { callbacksFullNames.add(identifier); } } } }
protected Expression findEnumItem(EnumItem enumItem) { String library = result.getLibrary(enumItem); if (library == null) { return null; } Element parent = enumItem.getParentElement(); if (parent == null || !(parent instanceof Enum)) { return null; } Enum e = (Enum) parent; Identifier enumItemName = ident(enumItem.getName()); enumItemName.resolveLastSimpleIdentifier().setJavaStaticImportable(true); Identifier ident = ident(result.getLibraryClassFullName(library), result.declarationsConverter.getActualTaggedTypeName(e), enumItemName); return expr(typeRef(ident).setMarkedAsResolved(true)); } /// @see http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
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),
protected Expression findEnumItem(EnumItem enumItem) { String library = result.getLibrary(enumItem); if (library == null) { return null; } Element parent = enumItem.getParentElement(); if (parent == null || !(parent instanceof Enum)) { return null; } Enum e = (Enum) parent; Identifier enumItemName = ident(enumItem.getName()); enumItemName.resolveLastSimpleIdentifier().setJavaStaticImportable(true); Identifier ident = ident(result.getLibraryClassFullName(library), result.declarationsConverter.getActualTaggedTypeName(e), enumItemName); return expr(typeRef(ident).setMarkedAsResolved(true)); } /// @see http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html
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),