static boolean isNull(Identifier i) { return i == null || i.resolveLastSimpleIdentifier() == null || i.resolveLastSimpleIdentifier().getName() == null; }
static boolean isNull(Identifier i) { return i == null || i.resolveLastSimpleIdentifier() == null || i.resolveLastSimpleIdentifier().getName() == null; }
public static Identifier templateIdent(Identifier base, Expression... args) { Identifier id = base.clone(); id.resolveLastSimpleIdentifier().setTemplateArguments(Arrays.asList(args)); return id; }
private Element resolve(Identifier ident, boolean varOrType) { if (ident == null) { return null; } // TODO handle new namespace Identifier lastIdent = ident.resolveLastSimpleIdentifier(); Element resolved = (varOrType ? variableDefinitions : typeDefinitions).get(lastIdent); if (resolved == null) { if (parent != null) { return parent.resolve(ident, varOrType); } //if (ident.getParentElement() instanceof TypeRef && ident.getParentElement().getParentElement() instanceof VariablesDeclaration) // System.out.println("hehehe"); return null; } //System.out.println("Resolved " + ident + " as " + resolved); //System.err.println("Resolved " + ident + " as " + resolved); (varOrType ? symbols.resolvedVariables : symbols.resolvedTypes).put(ident.getId(), resolved); return resolved; } }
private Element resolve(Identifier ident, boolean varOrType) { if (ident == null) { return null; } // TODO handle new namespace Identifier lastIdent = ident.resolveLastSimpleIdentifier(); Element resolved = (varOrType ? variableDefinitions : typeDefinitions).get(lastIdent); if (resolved == null) { if (parent != null) { return parent.resolve(ident, varOrType); } //if (ident.getParentElement() instanceof TypeRef && ident.getParentElement().getParentElement() instanceof VariablesDeclaration) // System.out.println("hehehe"); return null; } //System.out.println("Resolved " + ident + " as " + resolved); //System.err.println("Resolved " + ident + " as " + resolved); (varOrType ? symbols.resolvedVariables : symbols.resolvedTypes).put(ident.getId(), resolved); return resolved; } }
public static TypeRef getSingleTypeParameter(TypeRef tr) { if (!(tr instanceof SimpleTypeRef)) { return null; } SimpleTypeRef str = (SimpleTypeRef) tr; Identifier name = str.getName(); if (name == null) { return null; } SimpleIdentifier id = name.resolveLastSimpleIdentifier(); List<Expression> templateArguments = id.getTemplateArguments(); if (templateArguments.size() != 1) { return null; } Expression x = templateArguments.get(0); if (!(x instanceof TypeRefExpression)) { return null; } return ((TypeRefExpression) x).getType(); }
@SuppressWarnings("unchecked") @Override public void visitIdentifier(Identifier e) { super.visitIdentifier(e); if (e.getParentElement() instanceof QualifiedIdentifier) { return; } Element parent = e.getParentElement(); if (!(parent instanceof TypeRef)) { return; } e = e.clone(); SimpleIdentifier si = e.resolveLastSimpleIdentifier(); si.setTemplateArguments(Collections.EMPTY_LIST); String name = si.getName(); Set<Identifier> ids = identifiersBySimpleName.get(name); if (ids == null) { identifiersBySimpleName.put(name, ids = new HashSet<Identifier>()); } ids.add(e); } });
TypeRef pointerToTypeRef(TypeRef targetType) { Identifier id = ident(ptrClass()); id.resolveLastSimpleIdentifier().addTemplateArgument(expr(targetType)); return typeRef(id); }
TypeRef pointerToTypeRef(TypeRef targetType) { Identifier id = ident(ptrClass()); id.resolveLastSimpleIdentifier().addTemplateArgument(expr(targetType)); return typeRef(id); }
public Struct notifyBeforeWritingClass(Identifier fullClassName, Struct interf, Signatures signatures, String currentLibrary) { for (Class<?> c : overwrittenClassesThatNeedToKeepAllTheirMethods) { if (fullClassName.equals(c.getName())) { declarationsConverter.addMissingMethods(c, signatures, interf); break; } } if (fullClassName.resolveLastSimpleIdentifier().equals("char")) { return null; } String runtimeSpecificHelp = config.runtime == JNAeratorConfig.Runtime.BridJ ? "or <a href=\"http://bridj.googlecode.com/\">BridJ</a> " : ", <a href=\"http://rococoa.dev.java.net/\">Rococoa</a>, " + "or <a href=\"http://jna.dev.java.net/\">JNA</a>"; interf.addToCommentBefore( "This file was autogenerated by <a href=\"http://jnaerator.googlecode.com/\">JNAerator</a>, ", "a tool written by <a href=\"http://ochafik.com/\">Olivier Chafik</a> that <a href=\"http://code.google.com/p/jnaerator/wiki/CreditsAndLicense\">uses a few opensource projects.</a>.", "For help, please visit <a href=\"http://nativelibs4java.googlecode.com/\">NativeLibs4Java</a> " + runtimeSpecificHelp + "."); for (ClassWritingNotifiable n : classWritingNotifiables) { interf = n.writingClass(fullClassName, interf, signatures, currentLibrary); if (interf == null) { return null; } } return interf; } public List<ClassWritingNotifiable> classWritingNotifiables = new ArrayList<ClassWritingNotifiable>();
@Override public Expression typeLiteral(TypeRef c) { if (c instanceof SimpleTypeRef && result.config.runtime == JNAeratorConfig.Runtime.BridJ) { Identifier id = ((SimpleTypeRef) c).getName(); Identifier.SimpleIdentifier sid = id.resolveLastSimpleIdentifier(); if (!sid.getTemplateArguments().isEmpty()) { Identifier erased = id.eraseTemplateArguments(); List<Expression> exprs = new ArrayList<Expression>(); exprs.add(typeLiteral(typeRef(erased.clone()))); for (Expression t : sid.getTemplateArguments()) { if (t instanceof Expression.TypeRefExpression) { exprs.add(typeLiteral(((Expression.TypeRefExpression) t).getType().clone())); } } return methodCall(expr(typeRef(DefaultParameterizedType.class)), "paramType", exprs.toArray(new Expression[exprs.size()])); } } return super.typeLiteral(c); }
@Override public Expression typeLiteral(TypeRef c) { if (c instanceof SimpleTypeRef && result.config.runtime == JNAeratorConfig.Runtime.BridJ) { Identifier id = ((SimpleTypeRef) c).getName(); Identifier.SimpleIdentifier sid = id.resolveLastSimpleIdentifier(); if (!sid.getTemplateArguments().isEmpty()) { Identifier erased = id.eraseTemplateArguments(); List<Expression> exprs = new ArrayList<Expression>(); exprs.add(typeLiteral(typeRef(erased.clone()))); for (Expression t : sid.getTemplateArguments()) { if (t instanceof Expression.TypeRefExpression) { exprs.add(typeLiteral(((Expression.TypeRefExpression) t).getType().clone())); } } return methodCall(expr(typeRef(DefaultParameterizedType.class)), "paramType", exprs.toArray(new Expression[exprs.size()])); } } return super.typeLiteral(c); }
public Struct notifyBeforeWritingClass(Identifier fullClassName, Struct interf, Signatures signatures, String currentLibrary) { for (Class<?> c : overwrittenClassesThatNeedToKeepAllTheirMethods) { if (fullClassName.equals(c.getName())) { declarationsConverter.addMissingMethods(c, signatures, interf); break; } } if (fullClassName.resolveLastSimpleIdentifier().equals("char")) { return null; } String runtimeSpecificHelp = config.runtime == JNAeratorConfig.Runtime.BridJ ? "or <a href=\"http://bridj.googlecode.com/\">BridJ</a> " : ", <a href=\"http://rococoa.dev.java.net/\">Rococoa</a>, " + "or <a href=\"http://jna.dev.java.net/\">JNA</a>"; interf.addToCommentBefore( "This file was autogenerated by <a href=\"http://jnaerator.googlecode.com/\">JNAerator</a>, ", "a tool written by <a href=\"http://ochafik.com/\">Olivier Chafik</a> that <a href=\"http://code.google.com/p/jnaerator/wiki/CreditsAndLicense\">uses a few opensource projects.</a>.", "For help, please visit <a href=\"http://nativelibs4java.googlecode.com/\">NativeLibs4Java</a> " + runtimeSpecificHelp + "."); for (ClassWritingNotifiable n : classWritingNotifiables) { interf = n.writingClass(fullClassName, interf, signatures, currentLibrary); if (interf == null) { return null; } } return interf; } public List<ClassWritingNotifiable> classWritingNotifiables = new ArrayList<ClassWritingNotifiable>();
public static Expression varRef(Identifier name) { MemberRefStyle s = MemberRefStyle.Dot; if (name instanceof QualifiedIdentifier) { QualificationSeparator sep = ((QualifiedIdentifier) name).getSeparator(); if (sep == QualificationSeparator.Colons) { s = MemberRefStyle.Colons; } } if (name instanceof SimpleIdentifier) { return varRef((SimpleIdentifier) name); } return memberRef(expr(typeRef(name.resolveAllButLastIdentifier())), s, name.resolveLastSimpleIdentifier()); }
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
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 convertEnum(Enum e, Signatures signatures, DeclarationsHolder out, Identifier libraryClassName) { if (e.isForwardDeclaration()) { return; } Identifier rawEnumName = getActualTaggedTypeName(e); Map<String, EnumItemResult> results = result.typeConverter.getEnumValuesAndCommentsByName(e, libraryClassName); boolean hasEnumClass = false; if (rawEnumName != null && rawEnumName.resolveLastSimpleIdentifier().getName() != null) { Identifier enumName = result.typeConverter.getValidJavaIdentifier(rawEnumName); if (!signatures.addClass(enumName)) { return; } hasEnumClass = true; Struct struct = publicStaticClass(enumName, null, Struct.Type.JavaInterface, e); out.addDeclaration(new TaggedTypeRefDeclaration(struct)); if (!result.config.noComments) { struct.addToCommentBefore("enum values"); } out = struct; signatures = new Signatures(); } outputEnumItemsAsConstants(results, out, signatures, libraryClassName, hasEnumClass); } Map<String, Pair<Function, List<Function>>> functionAlternativesByNativeSignature = new LinkedHashMap<String, Pair<Function, List<Function>>>();
public void convertEnum(Enum e, Signatures signatures, DeclarationsHolder out, Identifier libraryClassName) { if (e.isForwardDeclaration()) { return; } Identifier rawEnumName = getActualTaggedTypeName(e); Map<String, EnumItemResult> results = result.typeConverter.getEnumValuesAndCommentsByName(e, libraryClassName); boolean hasEnumClass = false; if (rawEnumName != null && rawEnumName.resolveLastSimpleIdentifier().getName() != null) { Identifier enumName = result.typeConverter.getValidJavaIdentifier(rawEnumName); if (!signatures.addClass(enumName)) { return; } hasEnumClass = true; Struct struct = publicStaticClass(enumName, null, Struct.Type.JavaInterface, e); out.addDeclaration(new TaggedTypeRefDeclaration(struct)); if (!result.config.noComments) { struct.addToCommentBefore("enum values"); } out = struct; signatures = new Signatures(); } outputEnumItemsAsConstants(results, out, signatures, libraryClassName, hasEnumClass); } Map<String, Pair<Function, List<Function>>> functionAlternativesByNativeSignature = new LinkedHashMap<String, Pair<Function, List<Function>>>();
SimpleTypeRef structRef = findStructRef(((TypeRef.SimpleTypeRef) type).getName(), libraryClassName); if (structRef == null) { structRef = findStructRef(((TypeRef.SimpleTypeRef) type).getName().resolveLastSimpleIdentifier(), libraryClassName);
if (rawEnumName != null && rawEnumName.resolveLastSimpleIdentifier().getName() != null) { hasEnumClass = true;