Your guide is very clear and helpful. I agree your 2nd suggestion should be the choice.
I'd also like to take this opportunity to learn ASTVisitor more. Here is the class' public interface:
public abstract class ASTVisitor {
public static final int PROCESS_SKIP = 1;
public static final int PROCESS_ABORT = 2;
public static final int PROCESS_CONTINUE = 3;
public boolean shouldVisitNames;
public boolean shouldVisitDeclarations;
public boolean shouldVisitInitializers;
public boolean shouldVisitParameterDeclarations;
public boolean shouldVisitDeclarators;
public boolean shouldVisitDeclSpecifiers;
public boolean shouldVisitArrayModifiers;
public boolean shouldVisitPointerOperators;
public boolean shouldVisitAttributes;
public boolean shouldVisitTokens;
public boolean shouldVisitExpressions;
public boolean shouldVisitStatements;
public boolean shouldVisitTypeIds;
public boolean shouldVisitEnumerators;
public boolean shouldVisitTranslationUnit;
public boolean shouldVisitProblems;
public boolean shouldVisitDesignators;
public boolean shouldVisitBaseSpecifiers;
public boolean shouldVisitNamespaces;
public boolean shouldVisitTemplateParameters;
public boolean shouldVisitCaptures;
public boolean shouldVisitVirtSpecifiers;
public boolean shouldVisitDecltypeSpecifiers;
public boolean includeInactiveNodes;
public boolean shouldVisitAmbiguousNodes;
public boolean shouldVisitImplicitNames;
public boolean shouldVisitImplicitNameAlternates;
public boolean shouldVisitImplicitDestructorNames;
public ASTVisitor() {
}
public ASTVisitor(boolean visitNodes) {
}
public int visit(IASTTranslationUnit tu) {
}
public int visit(IASTName name) {
}
public int visit(IASTDeclaration declaration) {
}
public int visit(IASTInitializer initializer) {
}
public int visit(IASTParameterDeclaration parameterDeclaration) {
}
public int visit(IASTDeclarator declarator) {
}
public int visit(IASTDeclSpecifier declSpec) {
}
public int visit(IASTArrayModifier arrayModifier) {
}
public int visit(IASTPointerOperator ptrOperator) {
}
public int visit(IASTAttribute attribute) {
}
public int visit(IASTAttributeSpecifier specifier) {
}
public int visit(IASTToken token) {
}
public int visit(IASTExpression _expression_) {
}
public int visit(IASTStatement statement) {
}
public int visit(IASTTypeId typeId) {
}
public int visit(IASTEnumerationSpecifier.IASTEnumerator enumerator) {
}
public int visit(IASTProblem problem) {
}
public int visit(ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier baseSpecifier) {
}
public int visit(ICPPASTNamespaceDefinition namespaceDefinition) {
}
public int visit(ICPPASTTemplateParameter templateParameter) {
}
public int visit(ICPPASTCapture capture) {
}
public int visit(ICASTDesignator designator) {
}
public int visit(ICPPASTDesignator designator) {
}
public int visit(ICPPASTVirtSpecifier virtSpecifier) {
}
public int visit(ICPPASTClassVirtSpecifier classVirtSpecifier) {
}
public int visit(ICPPASTDecltypeSpecifier decltypeSpecifier) {
}