summaryrefslogtreecommitdiff
path: root/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2014-07-17 11:39:16 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2014-07-17 12:09:36 +0200
commitdc59d287369d3e0e0ca192a4ef6aafb94752236a (patch)
treea21c78d292b1dfc01fa9a33255d084896bf28948 /src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
parent67a7696e60a90fd1669738e368fd8a3d51efce0e (diff)
downloadqt-creator-dc59d287369d3e0e0ca192a4ef6aafb94752236a.tar.gz
C++: Check for Function::name() before using it
Lambdas do not have a name. Change-Id: Ifda4816c62dcfe19bdbb1649dc1caf408e056b37 Task-number: QTCREATORBUG-12686 Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Diffstat (limited to 'src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp')
-rw-r--r--src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp99
1 files changed, 51 insertions, 48 deletions
diff --git a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
index 9348350af8..7c84817c99 100644
--- a/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
+++ b/src/tools/cplusplus-update-frontend/cplusplus-update-frontend.cpp
@@ -1122,56 +1122,59 @@ void generateAST_cpp(const Snapshot &snapshot, const QDir &cplusplusDir)
TranslationUnitAST *xUnit = AST_cpp_document->translationUnit()->ast()->asTranslationUnit();
for (DeclarationListAST *iter = xUnit->declaration_list; iter; iter = iter->next) {
if (FunctionDefinitionAST *funDef = iter->value->asFunctionDefinition()) {
- if (const QualifiedNameId *qName = funDef->symbol->name()->asQualifiedNameId()) {
- const QString className = oo(qName->base());
- const QString methodName = oo(qName->name());
-
- QTextCursor cursor(&cpp_document);
-
- unsigned line = 0, column = 0;
- AST_cpp_document->translationUnit()->getTokenStartPosition(funDef->firstToken(), &line, &column);
- const int start = cpp_document.findBlockByNumber(line - 1).position() + column - 1;
- cursor.setPosition(start);
- int doxyStart = start;
-
- const bool isGenerated = checkGenerated(cursor, &doxyStart);
-
- AST_cpp_document->translationUnit()->getTokenEndPosition(funDef->lastToken() - 1, &line, &column);
- int end = cpp_document.findBlockByNumber(line - 1).position() + column - 1;
- while (cpp_document.characterAt(end).isSpace())
- ++end;
-
- if (methodName == QLatin1String("firstToken")) {
- ClassSpecifierAST *classAST = classesNeedingFirstToken.value(className, 0);
- GenInfo info;
- info.end = end;
- if (classAST) {
- info.classAST = classAST;
- info.firstToken = true;
- info.start = start;
- classesNeedingFirstToken.remove(className);
- } else {
- info.start = doxyStart;
- info.remove = true;
+ if (const Name *name = funDef->symbol->name()) {
+ if (const QualifiedNameId *qName = name->asQualifiedNameId()) {
+ const QString className = oo(qName->base());
+ const QString methodName = oo(qName->name());
+
+ QTextCursor cursor(&cpp_document);
+
+ unsigned line = 0, column = 0;
+ AST_cpp_document->translationUnit()->getTokenStartPosition(funDef->firstToken(), &line, &column);
+ const int start = cpp_document.findBlockByNumber(line - 1).position() + column - 1;
+ cursor.setPosition(start);
+ int doxyStart = start;
+
+ const bool isGenerated = checkGenerated(cursor, &doxyStart);
+
+ AST_cpp_document->translationUnit()->getTokenEndPosition(funDef->lastToken() - 1, &line, &column);
+ int end = cpp_document.findBlockByNumber(line - 1).position() + column - 1;
+ while (cpp_document.characterAt(end).isSpace())
+ ++end;
+
+ if (methodName == QLatin1String("firstToken")) {
+ ClassSpecifierAST *classAST = classesNeedingFirstToken.value(className, 0);
+ GenInfo info;
+ info.end = end;
+ if (classAST) {
+ info.classAST = classAST;
+ info.firstToken = true;
+ info.start = start;
+ classesNeedingFirstToken.remove(className);
+ } else {
+ info.start = doxyStart;
+ info.remove = true;
+ }
+ if (isGenerated)
+ todo.append(info);
+ } else if (methodName == QLatin1String("lastToken")) {
+ ClassSpecifierAST *classAST = classesNeedingLastToken.value(className, 0);
+ GenInfo info;
+ info.end = end;
+ if (classAST) {
+ info.classAST = classAST;
+ info.start = start;
+ info.lastToken = true;
+ classesNeedingLastToken.remove(className);
+ } else {
+ info.start = doxyStart;
+ info.remove = true;
+ }
+ if (isGenerated)
+ todo.append(info);
}
- if (isGenerated)
- todo.append(info);
- } else if (methodName == QLatin1String("lastToken")) {
- ClassSpecifierAST *classAST = classesNeedingLastToken.value(className, 0);
- GenInfo info;
- info.end = end;
- if (classAST) {
- info.classAST = classAST;
- info.start = start;
- info.lastToken = true;
- classesNeedingLastToken.remove(className);
- } else {
- info.start = doxyStart;
- info.remove = true;
- }
- if (isGenerated)
- todo.append(info);
}
+
}
}
}