forked from qt-creator/qt-creator
Clang: Helper function to get token IconType
Change-Id: I9de562102eded9391ab0d6b895b8d812e259efd6 Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
@@ -28,6 +28,8 @@
|
||||
#include "clangeditordocumentprocessor.h"
|
||||
#include "clangmodelmanagersupport.h"
|
||||
|
||||
#include <clangsupport/tokeninfocontainer.h>
|
||||
|
||||
#include <coreplugin/icore.h>
|
||||
#include <coreplugin/idocument.h>
|
||||
#include <cpptools/baseeditordocumentparser.h>
|
||||
@@ -38,6 +40,8 @@
|
||||
#include <cpptools/cppcodemodelsettings.h>
|
||||
#include <cpptools/cpptoolsreuse.h>
|
||||
#include <projectexplorer/projectexplorerconstants.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QDir>
|
||||
@@ -201,5 +205,104 @@ int clangColumn(const QTextBlock &line, int cppEditorColumn)
|
||||
return line.text().left(cppEditorColumn).toUtf8().size() + 1;
|
||||
}
|
||||
|
||||
CPlusPlus::Icons::IconType iconTypeForToken(const ClangBackEnd::TokenInfoContainer &token)
|
||||
{
|
||||
const ClangBackEnd::ExtraInfo &extraInfo = token.extraInfo();
|
||||
if (extraInfo.signal)
|
||||
return CPlusPlus::Icons::SignalIconType;
|
||||
|
||||
ClangBackEnd::AccessSpecifier access = extraInfo.accessSpecifier;
|
||||
if (extraInfo.slot) {
|
||||
switch (access) {
|
||||
case ClangBackEnd::AccessSpecifier::Public:
|
||||
case ClangBackEnd::AccessSpecifier::Invalid:
|
||||
return CPlusPlus::Icons::SlotPublicIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Protected:
|
||||
return CPlusPlus::Icons::SlotProtectedIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Private:
|
||||
return CPlusPlus::Icons::SlotPrivateIconType;
|
||||
}
|
||||
}
|
||||
|
||||
ClangBackEnd::HighlightingType mainType = token.types().mainHighlightingType;
|
||||
|
||||
if (mainType == ClangBackEnd::HighlightingType::Keyword)
|
||||
return CPlusPlus::Icons::KeywordIconType;
|
||||
|
||||
if (mainType == ClangBackEnd::HighlightingType::QtProperty)
|
||||
return CPlusPlus::Icons::PropertyIconType;
|
||||
|
||||
if (mainType == ClangBackEnd::HighlightingType::PreprocessorExpansion
|
||||
|| mainType == ClangBackEnd::HighlightingType::PreprocessorDefinition) {
|
||||
return CPlusPlus::Icons::MacroIconType;
|
||||
}
|
||||
|
||||
if (mainType == ClangBackEnd::HighlightingType::Enumeration)
|
||||
return CPlusPlus::Icons::EnumeratorIconType;
|
||||
|
||||
if (mainType == ClangBackEnd::HighlightingType::Type) {
|
||||
const ClangBackEnd::MixinHighlightingTypes &types = token.types().mixinHighlightingTypes;
|
||||
if (types.contains(ClangBackEnd::HighlightingType::Enum))
|
||||
return CPlusPlus::Icons::EnumIconType;
|
||||
if (types.contains(ClangBackEnd::HighlightingType::Struct))
|
||||
return CPlusPlus::Icons::StructIconType;
|
||||
if (types.contains(ClangBackEnd::HighlightingType::Namespace))
|
||||
return CPlusPlus::Icons::NamespaceIconType;
|
||||
return CPlusPlus::Icons::ClassIconType;
|
||||
}
|
||||
|
||||
ClangBackEnd::StorageClass storageClass = extraInfo.storageClass;
|
||||
if (mainType == ClangBackEnd::HighlightingType::VirtualFunction
|
||||
|| mainType == ClangBackEnd::HighlightingType::Function) {
|
||||
if (storageClass != ClangBackEnd::StorageClass::Static) {
|
||||
switch (access) {
|
||||
case ClangBackEnd::AccessSpecifier::Public:
|
||||
case ClangBackEnd::AccessSpecifier::Invalid:
|
||||
return CPlusPlus::Icons::FuncPublicIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Protected:
|
||||
return CPlusPlus::Icons::FuncProtectedIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Private:
|
||||
return CPlusPlus::Icons::FuncPrivateIconType;
|
||||
}
|
||||
} else {
|
||||
switch (access) {
|
||||
case ClangBackEnd::AccessSpecifier::Public:
|
||||
case ClangBackEnd::AccessSpecifier::Invalid:
|
||||
return CPlusPlus::Icons::FuncPublicStaticIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Protected:
|
||||
return CPlusPlus::Icons::FuncProtectedStaticIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Private:
|
||||
return CPlusPlus::Icons::FuncPrivateStaticIconType;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mainType == ClangBackEnd::HighlightingType::GlobalVariable
|
||||
|| mainType == ClangBackEnd::HighlightingType::Field) {
|
||||
if (storageClass != ClangBackEnd::StorageClass::Static) {
|
||||
switch (access) {
|
||||
case ClangBackEnd::AccessSpecifier::Public:
|
||||
case ClangBackEnd::AccessSpecifier::Invalid:
|
||||
return CPlusPlus::Icons::VarPublicIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Protected:
|
||||
return CPlusPlus::Icons::VarProtectedIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Private:
|
||||
return CPlusPlus::Icons::VarPrivateIconType;
|
||||
}
|
||||
} else {
|
||||
switch (access) {
|
||||
case ClangBackEnd::AccessSpecifier::Public:
|
||||
case ClangBackEnd::AccessSpecifier::Invalid:
|
||||
return CPlusPlus::Icons::VarPublicStaticIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Protected:
|
||||
return CPlusPlus::Icons::VarProtectedStaticIconType;
|
||||
case ClangBackEnd::AccessSpecifier::Private:
|
||||
return CPlusPlus::Icons::VarPrivateStaticIconType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return CPlusPlus::Icons::UnknownIconType;
|
||||
}
|
||||
|
||||
} // namespace Utils
|
||||
} // namespace Clang
|
||||
|
||||
Reference in New Issue
Block a user