public Identifier getActualTaggedTypeName(TaggedTypeRef struct) { Identifier structName = null; Identifier tag = struct.getTag(); if (tag == null || tag.isPlain() && tag.toString().startsWith("_")) { TypeDef parentDef = as(struct.getParentElement(), TypeDef.class); if (parentDef != null) { structName = new Identifier.SimpleIdentifier(JNAeratorUtils.findBestPlainStorageName(parentDef)); } else if (tag != null) { String better = tag.toString().substring(1); Pair<TypeDef, Declarator> pair = result.typeDefs.get(better); if (pair != null && pair.getFirst().getValueType() != null && pair.getSecond() instanceof DirectDeclarator) { TypeRef tr = pair.getFirst().getValueType(); DirectDeclarator dd = (DirectDeclarator) pair.getSecond(); if (tr instanceof SimpleTypeRef) { if (tag.equals(((SimpleTypeRef) tr).getName())) structName = ident(dd.resolveName()); } else if (tr instanceof TaggedTypeRef) { if (tag.equals(((TaggedTypeRef) tr).getTag())) structName = ident(dd.resolveName()); } } } } if (structName == null || structName.toString().equals("")) structName = tag; return structName == null ? null : structName.clone(); }
public Identifier getTaggedTypeIdentifierInJava(TaggedTypeRef s) { Identifier tag = s.getTag(); if (tag != null) { TaggedTypeRef rep = null; if (s instanceof Struct) { rep = structsByName.get(tag); } else if (s instanceof Enum) { rep = enumsByName.get(tag); } if (rep != null) s = rep; } Identifier name = declarationsConverter.getActualTaggedTypeName(s); if (name == null) return null; String library = getLibrary(s); if (library == null) return null; name = name.clone(); Struct parentStruct = s.findParentOfType(Struct.class); if (parentStruct != null && parentStruct != s) return ident(getTaggedTypeIdentifierInJava(parentStruct), name); else if ((s instanceof Struct) && (config.putTopStructsInSeparateFiles || config.runtime == JNAeratorConfig.Runtime.BridJ)) return ident(getLibraryPackage(library), name); else return typeConverter.libMember(getLibraryClassFullName(library), null, name); }
public void visitTaggedTypeRef(TaggedTypeRef taggedTypeRef) { visitTypeRef(taggedTypeRef); visit(taggedTypeRef.getTag()); visit(taggedTypeRef.getOriginalTag()); }