TaggedTypeRef ttr = (TaggedTypeRef)ttrd.getTaggedTypeRef(); if (ttr != ttr) defineTypeIdentifierInParentScope(ttr.getTag());
Element parent = taggedTypeRef.getParentElement(); DeclarationsHolder holder = taggedTypeRef.findParentOfType(DeclarationsHolder.class); if (holder != null && holder != taggedTypeRef.getParentElement() && !(parent instanceof DeclarationsHolder)) { TaggedTypeRefDeclaration td = new TaggedTypeRefDeclaration(); if (parent instanceof VariablesDeclaration && ((VariablesDeclaration) parent).getDeclarators().isEmpty()) { taggedTypeRef.importDetails(parent, false); parent.replaceBy(null); } else { TypeRef tr = new TypeRef.SimpleTypeRef(taggedTypeRef.getTag().clone()); for (Modifier mod : taggedTypeRef.getModifiers()) { if (mod.isA(ModifierKind.StorageClassSpecifier)) { tr.addModifiers(mod); taggedTypeRef.replaceBy(tr); if (taggedTypeRef instanceof Struct) { tr.setMarkedAsResolved(true);
Element parent = taggedTypeRef.getParentElement(); DeclarationsHolder holder = taggedTypeRef.findParentOfType(DeclarationsHolder.class); if (holder != null && holder != taggedTypeRef.getParentElement() && !(parent instanceof DeclarationsHolder)) { TaggedTypeRefDeclaration td = new TaggedTypeRefDeclaration(); if (parent instanceof VariablesDeclaration && ((VariablesDeclaration) parent).getDeclarators().isEmpty()) { taggedTypeRef.importDetails(parent, false); parent.replaceBy(null); } else { TypeRef tr = new TypeRef.SimpleTypeRef(taggedTypeRef.getTag().clone()); for (Modifier mod : taggedTypeRef.getModifiers()) { if (mod.isA(ModifierKind.StorageClassSpecifier)) { tr.addModifiers(mod); taggedTypeRef.replaceBy(tr); if (taggedTypeRef instanceof Struct) { tr.setMarkedAsResolved(true);
if (ttr.isForwardDeclaration()) { Identifier name = ttr.getTag(); if (ttr instanceof Struct) { ttr = result.resolveStruct(name);
if (ttr.isForwardDeclaration()) { Identifier name = ttr.getTag(); if (ttr instanceof Struct) { ttr = result.resolveStruct(name);
methodCall(expr(typeRef(Rococoa.class)), MemberRefStyle.Dot, "cast", val, memberRef(expr(typeRef(instanceStruct.getTag())), MemberRefStyle.Dot, "class"));
protected TypeRef resolveType(TypeRef tr, boolean keepUnresolvedIdentifiers, Set<Identifier> resolvedTypeDefs) { if (tr instanceof TypeRef.TaggedTypeRef) { TypeRef.TaggedTypeRef ttr = (TypeRef.TaggedTypeRef) tr; if (ttr.isForwardDeclaration() && ttr.getTag() != null) { TypeRef resolved = null; if (ttr instanceof Enum) { resolved = resolveEnum(ttr.getTag()); } else if (ttr instanceof Struct) { resolved = resolveStruct(ttr.getTag());
methodCall(expr(typeRef(Rococoa.class)), MemberRefStyle.Dot, "cast", val, memberRef(expr(typeRef(instanceStruct.getTag())), MemberRefStyle.Dot, "class"));
protected TypeRef resolveType(TypeRef tr, boolean keepUnresolvedIdentifiers, Set<Identifier> resolvedTypeDefs) { if (tr instanceof TypeRef.TaggedTypeRef) { TypeRef.TaggedTypeRef ttr = (TypeRef.TaggedTypeRef) tr; if (ttr.isForwardDeclaration() && ttr.getTag() != null) { TypeRef resolved = null; if (ttr instanceof Enum) { resolved = resolveEnum(ttr.getTag()); } else if (ttr instanceof Struct) { resolved = resolveStruct(ttr.getTag());
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 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(); }
/** * @return true if changed and revisited on change results (caller can give * up) */ private boolean chooseNameIfMissing(TaggedTypeRef taggedTypeRef) { // String tag = taggedTypeRef.getTag(); // taggedTypeRef.setTag(result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef)); // if (!SyntaxUtils.equal(tag, taggedTypeRef.getTag())) { // taggedTypeRef.accept(this); // return true; // } //String betterTag = result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef); if (isNull(taggedTypeRef.getTag()) && !(taggedTypeRef.getParentElement() instanceof TaggedTypeRefDeclaration)) { Identifier tag = result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef); if (isNull(tag)) { List<String> ownerNames = JNAeratorUtils.guessOwnerName(taggedTypeRef);//.getParentElement() instanceof StructTypeRef ? struct.getParentElement() : struct); tag = ident(chooseName(taggedTypeRef, ownerNames, true)); } if (!isNull(tag)) { taggedTypeRef.setTag(tag.clone()); // taggedTypeRef.accept(this); return true; } } return false; }
Set<Identifier> listChildIdentifiers(DeclarationsHolder h) { List<Identifier> list = new ArrayList<Identifier>(); for (Declaration d : h.getDeclarations()) { if (d instanceof Function) { list.add(((Function) d).getName()); } else if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRefDeclaration td = (TaggedTypeRefDeclaration) d; TaggedTypeRef tr = td.getTaggedTypeRef(); if (tr != null) { list.add(tr.getTag()); } } else if (d instanceof VariablesDeclaration) { for (Declarator dc : ((VariablesDeclaration) d).getDeclarators()) { list.add(ident(dc.resolveName())); } } } Set<Identifier> ret = new HashSet<Identifier>(); for (Identifier i : list) { if (i != null) { ret.add(i); } } return ret; }
/** * @return true if changed and revisited on change results (caller can give * up) */ private boolean chooseNameIfMissing(TaggedTypeRef taggedTypeRef) { // String tag = taggedTypeRef.getTag(); // taggedTypeRef.setTag(result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef)); // if (!SyntaxUtils.equal(tag, taggedTypeRef.getTag())) { // taggedTypeRef.accept(this); // return true; // } //String betterTag = result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef); if (isNull(taggedTypeRef.getTag()) && !(taggedTypeRef.getParentElement() instanceof TaggedTypeRefDeclaration)) { Identifier tag = result.declarationsConverter.getActualTaggedTypeName(taggedTypeRef); if (isNull(tag)) { List<String> ownerNames = JNAeratorUtils.guessOwnerName(taggedTypeRef);//.getParentElement() instanceof StructTypeRef ? struct.getParentElement() : struct); tag = ident(chooseName(taggedTypeRef, ownerNames, true)); } if (!isNull(tag)) { taggedTypeRef.setTag(tag.clone()); // taggedTypeRef.accept(this); return true; } } return false; }