diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-12-18 17:03:30 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2009-12-18 17:26:07 +0100 |
commit | f229a7618a193438e6eec61aa69d2a35cbf3f5ee (patch) | |
tree | 1caa7a35647dfc4760150d95fbf2b0f445a06a02 /src/plugins | |
parent | 918856cac327ed77a18aef88a2abd2ca5f02c1e8 (diff) | |
download | qt-creator-f229a7618a193438e6eec61aa69d2a35cbf3f5ee.tar.gz |
Added highlighting for locals in ObjC methods.
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 58 |
1 files changed, 40 insertions, 18 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index c0c066868c..0a5edd352c 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -201,13 +201,23 @@ public: bool hasD; bool hasQ; - void operator()(FunctionDefinitionAST *ast) + void operator()(DeclarationAST *ast) { localUses.clear(); - if (ast && ast->symbol) { - _functionScope = ast->symbol->members(); - accept(ast); + if (!ast) + return; + + if (FunctionDefinitionAST *def = ast->asFunctionDefinition()) { + if (def->symbol) { + _functionScope = def->symbol->members(); + accept(ast); + } + } else if (ObjCMethodDeclarationAST *decl = ast->asObjCMethodDeclaration()) { + if (decl->method_prototype->symbol) { + _functionScope = decl->method_prototype->symbol->members(); + accept(ast); + } } } @@ -392,7 +402,7 @@ class FunctionDefinitionUnderCursor: protected ASTVisitor { unsigned _line; unsigned _column; - FunctionDefinitionAST *_functionDefinition; + DeclarationAST *_functionDefinition; public: FunctionDefinitionUnderCursor(TranslationUnit *translationUnit) @@ -400,7 +410,7 @@ public: _line(0), _column(0) { } - FunctionDefinitionAST *operator()(AST *ast, unsigned line, unsigned column) + DeclarationAST *operator()(AST *ast, unsigned line, unsigned column) { _functionDefinition = 0; _line = line; @@ -416,22 +426,34 @@ protected: return false; else if (FunctionDefinitionAST *def = ast->asFunctionDefinition()) { - unsigned startLine, startColumn; - unsigned endLine, endColumn; - getTokenStartPosition(def->firstToken(), &startLine, &startColumn); - getTokenEndPosition(def->lastToken() - 1, &endLine, &endColumn); - - if (_line > startLine || (_line == startLine && _column >= startColumn)) { - if (_line < endLine || (_line == endLine && _column < endColumn)) { - _functionDefinition = def; - return false; - } - } + return checkDeclaration(def); + } + + else if (ObjCMethodDeclarationAST *method = ast->asObjCMethodDeclaration()) { + if (method->function_body) + return checkDeclaration(method); } return true; } +private: + bool checkDeclaration(DeclarationAST *ast) + { + unsigned startLine, startColumn; + unsigned endLine, endColumn; + getTokenStartPosition(ast->firstToken(), &startLine, &startColumn); + getTokenEndPosition(ast->lastToken() - 1, &endLine, &endColumn); + + if (_line > startLine || (_line == startLine && _column >= startColumn)) { + if (_line < endLine || (_line == endLine && _column < endColumn)) { + _functionDefinition = ast; + return false; + } + } + + return true; + } }; class ProcessDeclarators: protected ASTVisitor @@ -2195,7 +2217,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) AST *ast = translationUnit->ast(); FunctionDefinitionUnderCursor functionDefinitionUnderCursor(translationUnit); - FunctionDefinitionAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column); + DeclarationAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column); FindLocalUses useTable(translationUnit); useTable(currentFunctionDefinition); |