2

我正在开发一个基于 CDT API 的 Eclipse 插件。

假设我遵循 C++ 代码

   class EventEnum
   {
   public:
      enum e { 
         E_CompleteDisconnectSuccess = 1, 
         E_CreateBtAdapterNoSuccess = 2, 
         E_CreateBtAdapterSuccess = 3, 
      };
   };

使用以下ASTVisitor访问者方法,我可以找到枚举声明

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;
}

问题:如何获得包含找到的枚举声明的类名,在我的情况下是EventEnum

4

1 回答 1

1

我自己找到了答案,可能对某人有用,所以我在这里发布

if (enumSpecifier.getParent() instanceof CPPASTSimpleDeclaration)
{
    if (enumSpecifier.getParent().getParent() instanceof CPPASTCompositeTypeSpecifier)
    {
        CPPASTCompositeTypeSpecifier firstLevelClass = (CPPASTCompositeTypeSpecifier)enumSpecifier.getParent().getParent();
        return firstLevelClass.getName().toString();
    }
}
于 2013-06-13T06:48:54.397 回答