forked from qt-creator/qt-creator
		
	C++: Bind Q_ENUMS in the code model.
Reviewed-by: Roberto Raggi
This commit is contained in:
		| @@ -1931,8 +1931,13 @@ bool Bind::visit(QtEnumDeclarationAST *ast) | ||||
|     // unsigned enum_specifier_token = ast->enum_specifier_token; | ||||
|     // unsigned lparen_token = ast->lparen_token; | ||||
|     for (NameListAST *it = ast->enumerator_list; it; it = it->next) { | ||||
|         /*const Name *value =*/ this->name(it->value); | ||||
|         const Name *value = this->name(it->value); | ||||
|         if (!value) | ||||
|             continue; | ||||
|         QtEnum *qtEnum = control()->newQtEnum(it->value->firstToken(), value); | ||||
|         _scope->addMember(qtEnum); | ||||
|     } | ||||
|  | ||||
|     // unsigned rparen_token = ast->rparen_token; | ||||
|     return false; | ||||
| } | ||||
| @@ -2833,6 +2838,7 @@ bool Bind::visit(EnumSpecifierAST *ast) | ||||
| { | ||||
|     unsigned sourceLocation = location(ast->name, ast->firstToken()); | ||||
|     const Name *enumName = this->name(ast->name); | ||||
|  | ||||
|     Enum *e = control()->newEnum(sourceLocation, enumName); | ||||
|     e->setStartOffset(tokenAt(sourceLocation).end()); // at the end of the enum or identifier token. | ||||
|     e->setEndOffset(tokenAt(ast->lastToken() - 1).end()); | ||||
|   | ||||
| @@ -133,6 +133,7 @@ class Token; | ||||
|  | ||||
| // Qt symbols | ||||
| class QtPropertyDeclaration; | ||||
| class QtEnum; | ||||
|  | ||||
| // Objective-C symbols | ||||
| class ObjCBaseClass; | ||||
|   | ||||
| @@ -410,6 +410,13 @@ public: | ||||
|         return d; | ||||
|     } | ||||
|  | ||||
|     QtEnum *newQtEnum(unsigned sourceLocation, const Name *name) | ||||
|     { | ||||
|         QtEnum *d = new QtEnum(translationUnit, sourceLocation, name); | ||||
|         symbols.push_back(d); | ||||
|         return d; | ||||
|     } | ||||
|  | ||||
|     ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name) | ||||
|     { | ||||
|         ObjCBaseClass *c = new ObjCBaseClass(translationUnit, sourceLocation, name); | ||||
| @@ -720,6 +727,9 @@ QtPropertyDeclaration *Control::newQtPropertyDeclaration(unsigned sourceLocation | ||||
|                                                          const Name *name) | ||||
| { return d->newQtPropertyDeclaration(sourceLocation, name); } | ||||
|  | ||||
| QtEnum *Control::newQtEnum(unsigned sourceLocation, const Name *name) | ||||
| { return d->newQtEnum(sourceLocation, name); } | ||||
|  | ||||
| ObjCBaseClass *Control::newObjCBaseClass(unsigned sourceLocation, const Name *name) | ||||
| { return d->newObjCBaseClass(sourceLocation, name); } | ||||
|  | ||||
|   | ||||
| @@ -161,6 +161,9 @@ public: | ||||
|     /// Creates a new QtPropertyDeclaration symbol. | ||||
|     QtPropertyDeclaration *newQtPropertyDeclaration(unsigned sourceLocation, const Name *name = 0); | ||||
|  | ||||
|     /// Creates a new QtEnum symbol. | ||||
|     QtEnum *newQtEnum(unsigned sourceLocation, const Name *name = 0); | ||||
|  | ||||
|     ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name); | ||||
|     ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, const Name *name); | ||||
|  | ||||
|   | ||||
| @@ -205,6 +205,9 @@ public: | ||||
|     /// Returns true if this Symbol is a QtPropertyDeclaration. | ||||
|     bool isQtPropertyDeclaration() const; | ||||
|  | ||||
|     /// Returns true if this Symbol is a QtEnum. | ||||
|     bool isQtEnum() const; | ||||
|  | ||||
|     bool isObjCBaseClass() const; | ||||
|     bool isObjCBaseProtocol() const; | ||||
|  | ||||
| @@ -242,6 +245,7 @@ public: | ||||
|     virtual const BaseClass *asBaseClass() const { return 0; } | ||||
|     virtual const ForwardClassDeclaration *asForwardClassDeclaration() const { return 0; } | ||||
|     virtual const QtPropertyDeclaration *asQtPropertyDeclaration() const { return 0; } | ||||
|     virtual const QtEnum *asQtEnum() const { return 0; } | ||||
|     virtual const ObjCBaseClass *asObjCBaseClass() const { return 0; } | ||||
|     virtual const ObjCBaseProtocol *asObjCBaseProtocol() const { return 0; } | ||||
|     virtual const ObjCClass *asObjCClass() const { return 0; } | ||||
| @@ -267,6 +271,7 @@ public: | ||||
|     virtual BaseClass *asBaseClass() { return 0; } | ||||
|     virtual ForwardClassDeclaration *asForwardClassDeclaration() { return 0; } | ||||
|     virtual QtPropertyDeclaration *asQtPropertyDeclaration() { return 0; } | ||||
|     virtual QtEnum *asQtEnum() { return 0; } | ||||
|     virtual ObjCBaseClass *asObjCBaseClass() { return 0; } | ||||
|     virtual ObjCBaseProtocol *asObjCBaseProtocol() { return 0; } | ||||
|     virtual ObjCClass *asObjCClass() { return 0; } | ||||
|   | ||||
| @@ -89,6 +89,7 @@ public: | ||||
|  | ||||
|     // Qt | ||||
|     virtual bool visit(QtPropertyDeclaration *) { return true; } | ||||
|     virtual bool visit(QtEnum *) { return true; } | ||||
|  | ||||
|     // Objective-C | ||||
|     virtual bool visit(ObjCBaseClass *) { return true; } | ||||
|   | ||||
| @@ -687,6 +687,7 @@ void Class::visitSymbol0(SymbolVisitor *visitor) | ||||
|  | ||||
| QtPropertyDeclaration::QtPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) | ||||
|     : Symbol(translationUnit, sourceLocation, name) | ||||
|     , _flags(NoFlags) | ||||
| { } | ||||
|  | ||||
| QtPropertyDeclaration::~QtPropertyDeclaration() | ||||
| @@ -708,6 +709,20 @@ void QtPropertyDeclaration::visitSymbol0(SymbolVisitor *visitor) | ||||
| { visitor->visit(this); } | ||||
|  | ||||
|  | ||||
| QtEnum::QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) | ||||
|     : Symbol(translationUnit, sourceLocation, name) | ||||
| { } | ||||
|  | ||||
| QtEnum::~QtEnum() | ||||
| { } | ||||
|  | ||||
| FullySpecifiedType QtEnum::type() const | ||||
| { return FullySpecifiedType(); } | ||||
|  | ||||
| void QtEnum::visitSymbol0(SymbolVisitor *visitor) | ||||
| { visitor->visit(this); } | ||||
|  | ||||
|  | ||||
| ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) | ||||
|     : Symbol(translationUnit, sourceLocation, name) | ||||
| { } | ||||
|   | ||||
| @@ -524,6 +524,7 @@ class CPLUSPLUS_EXPORT QtPropertyDeclaration: public Symbol | ||||
| { | ||||
| public: | ||||
|     enum Flag { | ||||
|         NoFlags = 0, | ||||
|         ReadFunction = 1 << 0, | ||||
|         WriteFunction = 1 << 1, | ||||
|         ResetFunction = 1 << 2, | ||||
| @@ -566,6 +567,25 @@ private: | ||||
|     int _flags; | ||||
| }; | ||||
|  | ||||
| class CPLUSPLUS_EXPORT QtEnum: public Symbol | ||||
| { | ||||
| public: | ||||
|     QtEnum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); | ||||
|     virtual ~QtEnum(); | ||||
|  | ||||
|     // Symbol's interface | ||||
|     virtual FullySpecifiedType type() const; | ||||
|  | ||||
|     virtual const QtEnum *asQtEnum() const | ||||
|     { return this; } | ||||
|  | ||||
|     virtual QtEnum *asQtEnum() | ||||
|     { return this; } | ||||
|  | ||||
| protected: | ||||
|     virtual void visitSymbol0(SymbolVisitor *visitor); | ||||
| }; | ||||
|  | ||||
| class CPLUSPLUS_EXPORT ObjCBaseClass: public Symbol | ||||
| { | ||||
| public: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user