aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-12-08 13:01:25 +0100
committerNikolai Kosjar <nikolai.kosjar@theqtcompany.com>2015-12-08 13:05:02 +0000
commit0af0bd8e3603b547e1af4396fc5cc60ec208a3f8 (patch)
tree9fe02e113f705b5e68c7b418560705dcf588d3cd
parent69cf6b536e79605dd10c4a441fa3a75496a6138d (diff)
Clang: Show type icon for usings/typedefs
...in the completion widget. Task-number: QTCREATORBUG-15078 Change-Id: I1309b628e1f060fa68bdcf13838037728207b035 Reviewed-by: Marco Bubke <marco.bubke@theqtcompany.com>
-rw-r--r--src/libs/clangbackendipc/codecompletion.cpp1
-rw-r--r--src/libs/clangbackendipc/codecompletion.h1
-rw-r--r--src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp2
-rw-r--r--src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp4
-rw-r--r--tests/unit/unittest/codecompletionsextractortest.cpp22
-rw-r--r--tests/unit/unittest/data/complete_extractor_class.cpp2
6 files changed, 31 insertions, 1 deletions
diff --git a/src/libs/clangbackendipc/codecompletion.cpp b/src/libs/clangbackendipc/codecompletion.cpp
index f67f7dad04..e2f4753982 100644
--- a/src/libs/clangbackendipc/codecompletion.cpp
+++ b/src/libs/clangbackendipc/codecompletion.cpp
@@ -177,6 +177,7 @@ static const char *completionKindToString(CodeCompletion::Kind kind)
case CodeCompletion::DestructorCompletionKind: return "Destructor";
case CodeCompletion::VariableCompletionKind: return "Variable";
case CodeCompletion::ClassCompletionKind: return "Class";
+ case CodeCompletion::TypeAliasCompletionKind: return "TypeAlias";
case CodeCompletion::TemplateClassCompletionKind: return "TemplateClass";
case CodeCompletion::EnumerationCompletionKind: return "Enumeration";
case CodeCompletion::EnumeratorCompletionKind: return "Enumerator";
diff --git a/src/libs/clangbackendipc/codecompletion.h b/src/libs/clangbackendipc/codecompletion.h
index 059496bc54..5d29a22576 100644
--- a/src/libs/clangbackendipc/codecompletion.h
+++ b/src/libs/clangbackendipc/codecompletion.h
@@ -62,6 +62,7 @@ public:
DestructorCompletionKind,
VariableCompletionKind,
ClassCompletionKind,
+ TypeAliasCompletionKind,
TemplateClassCompletionKind,
EnumerationCompletionKind,
EnumeratorCompletionKind,
diff --git a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
index fe437f52fc..0cd362d4da 100644
--- a/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangcompletionassistprocessor.cpp
@@ -118,6 +118,7 @@ QList<AssistProposalItem *> toAssistProposalItems(const CodeCompletions &complet
switch (ccr.completionKind()) {
case CodeCompletion::ClassCompletionKind:
case CodeCompletion::TemplateClassCompletionKind:
+ case CodeCompletion::TypeAliasCompletionKind:
item->setIcon(m_icons.iconForType(Icons::ClassIconType)); break;
case CodeCompletion::EnumerationCompletionKind: item->setIcon(m_icons.iconForType(Icons::EnumIconType)); break;
case CodeCompletion::EnumeratorCompletionKind: item->setIcon(m_icons.iconForType(Icons::EnumeratorIconType)); break;
@@ -178,6 +179,7 @@ QList<AssistProposalItem *> toAssistProposalItems(const CodeCompletions &complet
break;
case CodeCompletion::Other:
+ item->setIcon(m_icons.iconForType(Icons::UnknownIconType));
break;
}
}
diff --git a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp
index 311cde61ae..3e56090f83 100644
--- a/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp
+++ b/src/tools/clangbackend/ipcsource/codecompletionsextractor.cpp
@@ -126,6 +126,10 @@ void CodeCompletionsExtractor::extractCompletionKind()
case CXCursor_TemplateTypeParameter:
currentCodeCompletion_.setCompletionKind(CodeCompletion::ClassCompletionKind);
break;
+ case CXCursor_TypedefDecl:
+ case CXCursor_TypeAliasDecl:
+ currentCodeCompletion_.setCompletionKind(CodeCompletion::TypeAliasCompletionKind);
+ break;
case CXCursor_ClassTemplatePartialSpecialization:
case CXCursor_ClassTemplate:
case CXCursor_TemplateTemplateParameter:
diff --git a/tests/unit/unittest/codecompletionsextractortest.cpp b/tests/unit/unittest/codecompletionsextractortest.cpp
index cf31413085..d9f070a3ba 100644
--- a/tests/unit/unittest/codecompletionsextractortest.cpp
+++ b/tests/unit/unittest/codecompletionsextractortest.cpp
@@ -281,6 +281,28 @@ TEST_F(CodeCompletionsExtractor, Union)
CodeCompletion::Available));
}
+TEST_F(CodeCompletionsExtractor, Typedef)
+{
+ ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20));
+
+ ::CodeCompletionsExtractor extractor(completeResults.data());
+
+ ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("TypeDef"),
+ CodeCompletion::TypeAliasCompletionKind,
+ CodeCompletion::Available));
+}
+
+TEST_F(CodeCompletionsExtractor, UsingAsTypeAlias)
+{
+ ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20));
+
+ ::CodeCompletionsExtractor extractor(completeResults.data());
+
+ ASSERT_THAT(extractor, HasCompletion(Utf8StringLiteral("UsingClass"),
+ CodeCompletion::TypeAliasCompletionKind,
+ CodeCompletion::Available));
+}
+
TEST_F(CodeCompletionsExtractor, TemplateTypeParameter)
{
ClangCodeCompleteResults completeResults(getResults(classTranslationUnit, 20));
diff --git a/tests/unit/unittest/data/complete_extractor_class.cpp b/tests/unit/unittest/data/complete_extractor_class.cpp
index becfdc3292..218b5fbe25 100644
--- a/tests/unit/unittest/data/complete_extractor_class.cpp
+++ b/tests/unit/unittest/data/complete_extractor_class.cpp
@@ -2,6 +2,7 @@ class Class {};
struct Struct{};
union Union{};
typedef Class TypeDef;
+using UsingClass = Class;
template<class T> class TemplateClass{};
template<class T> class ClassTemplatePartialSpecialization;
template<class T> class ClassTemplatePartialSpecialization<T*>;
@@ -13,7 +14,6 @@ template<class T> class ClassTemplatePartialSpecialization<T*>;
-
template<class TemplateTypeParameter, template<class> class TemplateTemplateParameter>
void function()
{