Reputation: 9883
I'm developing an eclipse plugin based on CDT API.
Suppose I've following C++ code
class EventEnum
{
public:
enum e {
E_CompleteDisconnectSuccess = 1,
E_CreateBtAdapterNoSuccess = 2,
E_CreateBtAdapterSuccess = 3,
};
};
Using following ASTVisitor
visitor method I can find the enum declaration
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();
System.out.println("Found enum : " + enumerationName);
}
}
return PROCESS_CONTINUE;
}
Question : How can I get the class name which contains the found enum declaration, in my case it will be EventEnum
?
Upvotes: 2
Views: 169
Reputation: 9883
Found the answer on my own, probably for someone it will be usefull, so I'm posting it here
if (enumSpecifier.getParent() instanceof CPPASTSimpleDeclaration)
{
if (enumSpecifier.getParent().getParent() instanceof CPPASTCompositeTypeSpecifier)
{
CPPASTCompositeTypeSpecifier firstLevelClass = (CPPASTCompositeTypeSpecifier)enumSpecifier.getParent().getParent();
return firstLevelClass.getName().toString();
}
}
Upvotes: 1