List<TaggedTypeRefDeclaration> getUnnamedTaggedTypeRefs(List<Declaration> ds) { List<TaggedTypeRefDeclaration> ret = new ArrayList<TaggedTypeRefDeclaration>(); for (Declaration d : ds) { if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRefDeclaration td = (TaggedTypeRefDeclaration) d; TaggedTypeRef tr = td.getTaggedTypeRef(); if (tr != null && tr.getTag() == null) { ret.add(td); } } } return ret; }
List<TaggedTypeRefDeclaration> getUnnamedTaggedTypeRefs(List<Declaration> ds) { List<TaggedTypeRefDeclaration> ret = new ArrayList<TaggedTypeRefDeclaration>(); for (Declaration d : ds) { if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRefDeclaration td = (TaggedTypeRefDeclaration) d; TaggedTypeRef tr = td.getTaggedTypeRef(); if (tr != null && tr.getTag() == null) { ret.add(td); } } } return ret; }
static boolean isUnnamed(TaggedTypeRefDeclaration d) { return d != null && d.getTaggedTypeRef() != null && isNull(d.getTaggedTypeRef().getTag()); }
static boolean isUnnamed(TaggedTypeRefDeclaration d) { return d != null && d.getTaggedTypeRef() != null && isNull(d.getTaggedTypeRef().getTag()); }
public void visitTaggedTypeRefDeclaration(TaggedTypeRefDeclaration e) { if (e.getTaggedTypeRef() == null) { return; } TaggedTypeRef tr = e.getTaggedTypeRef(); formatComments(e, false, true, true); // formatComments(tr, false, true, true); //append(tr, tr.isForwardDeclaration() ? ";" : null, e.getCommentAfter()); append(tr, ";", e.getCommentAfter()); }
@Override public boolean replaceChild(Element child, Element by) { if (child.equals(getTaggedTypeRef())) { setTaggedTypeRef((TaggedTypeRef)by); return true; } return super.replaceChild(child, by); }
public void visitTaggedTypeRefDeclaration(TaggedTypeRefDeclaration taggedTypeRefDeclaration) { visitDeclaration(taggedTypeRefDeclaration); visit(taggedTypeRefDeclaration.getTaggedTypeRef()); }
List<String> getNames(Declaration d) { if (d instanceof StoredDeclarations) { List<String> ret = new ArrayList<String>(); for (Declarator declarator : ((StoredDeclarations) d).getDeclarators()) { ret.add(declarator.resolveName()); } return ret; } else if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRef tr = ((TaggedTypeRefDeclaration) d).getTaggedTypeRef(); Identifier id = tr.getTag(); if (id instanceof SimpleIdentifier) { return Collections.singletonList(((SimpleIdentifier) id).getName()); } } return Collections.EMPTY_LIST; }
List<String> getNames(Declaration d) { if (d instanceof StoredDeclarations) { List<String> ret = new ArrayList<String>(); for (Declarator declarator : ((StoredDeclarations) d).getDeclarators()) { ret.add(declarator.resolveName()); } return ret; } else if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRef tr = ((TaggedTypeRefDeclaration) d).getTaggedTypeRef(); Identifier id = tr.getTag(); if (id instanceof SimpleIdentifier) { return Collections.singletonList(((SimpleIdentifier) id).getName()); } } return Collections.EMPTY_LIST; }
public static Identifier getName(Element element) { if (element instanceof Function) return ((Function) element).getName(); if (element instanceof TaggedTypeRefDeclaration) return getName(((TaggedTypeRefDeclaration) element).getTaggedTypeRef()); if (element instanceof TypeRef.TaggedTypeRef) return ((TypeRef.TaggedTypeRef) element).getTag(); return null; }
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; }
public Declaration resolveDown(DeclarationsHolder dh, Iterator<SimpleIdentifier> simpleIds) { String nextId = simpleIds.next().getName(); for (Declaration d : dh.getDeclarations()) { List<String> names = getNames(d); if (names.contains(nextId)) { if (!simpleIds.hasNext()) { return d; } else { DeclarationsHolder sub = null; if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRef ttr = ((TaggedTypeRefDeclaration) d).getTaggedTypeRef(); if (ttr instanceof DeclarationsHolder) { sub = (DeclarationsHolder) ttr; } } if (sub == null) { return null; } return resolveDown(sub, simpleIds); } } } return null; }
public Declaration resolveDown(DeclarationsHolder dh, Iterator<SimpleIdentifier> simpleIds) { String nextId = simpleIds.next().getName(); for (Declaration d : dh.getDeclarations()) { List<String> names = getNames(d); if (names.contains(nextId)) { if (!simpleIds.hasNext()) { return d; } else { DeclarationsHolder sub = null; if (d instanceof TaggedTypeRefDeclaration) { TaggedTypeRef ttr = ((TaggedTypeRefDeclaration) d).getTaggedTypeRef(); if (ttr instanceof DeclarationsHolder) { sub = (DeclarationsHolder) ttr; } } if (sub == null) { return null; } return resolveDown(sub, simpleIds); } } } return null; }
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; }
@Override public void visitTaggedTypeRefDeclaration(TaggedTypeRefDeclaration taggedTypeRefDeclaration) { TaggedTypeRef tr = taggedTypeRefDeclaration.getTaggedTypeRef(); if (tr != null) { String before = tr.getCommentBefore(); tr.setCommentBefore(taggedTypeRefDeclaration.getCommentBefore()); tr.addToCommentBefore(before); taggedTypeRefDeclaration.setCommentBefore(null); } super.visitTaggedTypeRefDeclaration(taggedTypeRefDeclaration); }
@Override public void visitTaggedTypeRefDeclaration(TaggedTypeRefDeclaration taggedTypeRefDeclaration) { TaggedTypeRef tr = taggedTypeRefDeclaration.getTaggedTypeRef(); if (tr != null) { String before = tr.getCommentBefore(); tr.setCommentBefore(taggedTypeRefDeclaration.getCommentBefore()); tr.addToCommentBefore(before); taggedTypeRefDeclaration.setCommentBefore(null); } super.visitTaggedTypeRefDeclaration(taggedTypeRefDeclaration); }
private void fixUnNamedChildren(Struct struct) { List<TaggedTypeRefDeclaration> trs = getUnnamedTaggedTypeRefs(struct.getDeclarations()); if (trs.isEmpty()) { return; } Set<Identifier> ids = listChildIdentifiers(struct); for (TaggedTypeRefDeclaration td : trs) { TaggedTypeRef tr = td.getTaggedTypeRef(); if (!(tr instanceof Struct)) { continue; } Struct s = (Struct) tr; switch (s.getType()) { case CStruct: case CUnion: String n = chooseNameSuffix(tr); int i = 1; Identifier fieldName; while (!ids.add(fieldName = ident("field" + i))) { i++; } //tr.setTag(idTag); td.replaceBy(new VariablesDeclaration(tr, new Declarator.DirectDeclarator(fieldName.toString()))); break; } } }
private void fixUnNamedChildren(Struct struct) { List<TaggedTypeRefDeclaration> trs = getUnnamedTaggedTypeRefs(struct.getDeclarations()); if (trs.isEmpty()) { return; } Set<Identifier> ids = listChildIdentifiers(struct); for (TaggedTypeRefDeclaration td : trs) { TaggedTypeRef tr = td.getTaggedTypeRef(); if (!(tr instanceof Struct)) { continue; } Struct s = (Struct) tr; switch (s.getType()) { case CStruct: case CUnion: String n = chooseNameSuffix(tr); int i = 1; Identifier fieldName; while (!ids.add(fieldName = ident("field" + i))) { i++; } //tr.setTag(idTag); td.replaceBy(new VariablesDeclaration(tr, new Declarator.DirectDeclarator(fieldName.toString()))); break; } } }
@Override public void visitEnum(Enum e) { Element parent = e.getParentElement(); if (e.getTag() == null && !(parent instanceof TypeDef)) { // Hack to infer the enum name from the next typedef NSUInteger NSSomethingThatLooksLikeTheEnumsIdentifiers Element base = parent instanceof Declaration ? e.getParentElement() : e; Element next = base.getNextSibling(); if (!handleAppleEnumTypeDef(next, e)) { Element previous = base.getPreviousSibling(); Element beforePrevious = previous == null ? null : previous.getPreviousSibling(); if (previous != null && !(beforePrevious instanceof TaggedTypeRefDeclaration && ((TaggedTypeRefDeclaration) beforePrevious).getTaggedTypeRef() instanceof Enum)) { handleAppleEnumTypeDef(previous, e); } } } String comment = e.getCommentBefore(); if (comment != null) { // TODO parse cocoa comments here } super.visitEnum(e); }
@Override public void visitEnum(Enum e) { Element parent = e.getParentElement(); if (e.getTag() == null && !(parent instanceof TypeDef)) { // Hack to infer the enum name from the next typedef NSUInteger NSSomethingThatLooksLikeTheEnumsIdentifiers Element base = parent instanceof Declaration ? e.getParentElement() : e; Element next = base.getNextSibling(); if (!handleAppleEnumTypeDef(next, e)) { Element previous = base.getPreviousSibling(); Element beforePrevious = previous == null ? null : previous.getPreviousSibling(); if (previous != null && !(beforePrevious instanceof TaggedTypeRefDeclaration && ((TaggedTypeRefDeclaration) beforePrevious).getTaggedTypeRef() instanceof Enum)) { handleAppleEnumTypeDef(previous, e); } } } String comment = e.getCommentBefore(); if (comment != null) { // TODO parse cocoa comments here } super.visitEnum(e); }