I'm developing an extension of eclipse CDT plug-in which has to parse the c++ code and find all
Suppose .cpp file contains following text
enum SomeEnum
{
One = 0,
Two = 1,
Three = 2,
Four = 3,
maxNum
};
The pluging should output following :
The visitor method of ASTVisitor inherited class finds the enumerations this way
public int visit(IASTDeclaration declaration) {
if (declaration instanceof IASTSimpleDeclaration) {
IASTDeclSpecifier specifier = ((IASTSimpleDeclaration)declaration).getDeclSpecifier();
if (specifier instanceof IASTEnumerationSpecifier) {
IASTEnumerationSpecifier enumSpecifier = (IASTEnumerationSpecifier)specifier;
IBinding binding = enumSpecifier.getName().resolveBinding();
System.out.println(enumSpecifier.getName());
}
}
return PROCESS_CONTINUE;
}
Question : How can I iterate over the enumerators and their corresponding values of found enumeration ?
Well figured out on my own
public int visit(IASTDeclaration declaration) {
if (declaration instanceof IASTSimpleDeclaration) {
IASTDeclSpecifier specifier = ((IASTSimpleDeclaration)declaration).getDeclSpecifier();
if (specifier instanceof IASTEnumerationSpecifier) {
IASTEnumerationSpecifier enumSpecifier = (IASTEnumerationSpecifier)specifier;
// Get the current enumeration name
String enumerationName = enumSpecifier.getName().toString();
IASTEnumerator[] enumerators = enumSpecifier.getEnumerators();
for (IASTEnumerator enumerator : enumerators)
{
System.out.println(enumerator.getName());
if (enumerator.getValue() instanceof IASTLiteralExpression ) {
System.out.println(enumerator.getValue());
}
}
}
}
return PROCESS_CONTINUE;
}