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);
  }
Пример #3
0
 public void visitTaggedTypeRef(TaggedTypeRef taggedTypeRef) {
   visitTypeRef(taggedTypeRef);
   visit(taggedTypeRef.getTag());
   visit(taggedTypeRef.getOriginalTag());
 }