diff --git a/language/duchain/identifier.h b/language/duchain/identifier.h --- a/language/duchain/identifier.h +++ b/language/duchain/identifier.h @@ -127,6 +127,23 @@ }; /** + * Flags to control the string representation of identifiers. + */ +enum IdentifierStringFormattingOption { + NoOptions = 0x0, + + /// Removes explicit global prefix from the result. + /// When enabled, global identifiers will be formatted as "globalIdentifierFormattedString" + /// instead "::globalIdentifierFormattedString". + RemoveExplicitlyGlobalPrefix = 0x1, + + /// Removes template information from the result. + /// When enabled, TemplateClass< someDataType > will be formatted as plain "TemplateClass". + RemoveTemplateInformation = 0x2 +}; +Q_DECLARE_FLAGS(IdentifierStringFormattingOptions, IdentifierStringFormattingOption) + +/** * Represents a single unqualified identifier */ class KDEVPLATFORMLANGUAGE_EXPORT Identifier @@ -191,7 +208,7 @@ void clearTemplateIdentifiers(); void setTemplateIdentifiers(const QList& templateIdentifiers); - QString toString() const; + QString toString(IdentifierStringFormattingOptions options = NoOptions) const; bool operator==(const Identifier& rhs) const; bool operator!=(const Identifier& rhs) const; @@ -297,8 +314,8 @@ */ void setIsExpression(bool); - QString toString(bool ignoreExplicitlyGlobal = false) const; - QStringList toStringList() const; + QString toString(IdentifierStringFormattingOptions options = NoOptions) const; + QStringList toStringList(IdentifierStringFormattingOptions options = NoOptions) const; QualifiedIdentifier operator+(const QualifiedIdentifier& rhs) const; QualifiedIdentifier& operator+=(const QualifiedIdentifier& rhs); @@ -403,7 +420,7 @@ bool isConstPointer(int depthNumber) const; void setIsConstPointer(int depthNumber, bool constant); - QString toString(bool ignoreExplicitlyGlobal = false) const; + QString toString(IdentifierStringFormattingOptions options = NoOptions) const; uint hash() const; diff --git a/language/duchain/identifier.cpp b/language/duchain/identifier.cpp --- a/language/duchain/identifier.cpp +++ b/language/duchain/identifier.cpp @@ -588,14 +588,14 @@ dd->templateIdentifiersList.append(id); } -QString Identifier::toString() const +QString Identifier::toString(IdentifierStringFormattingOptions options) const { QString ret = identifier().str(); - if (templateIdentifiersCount()) { + if (!options.testFlag(RemoveTemplateInformation) && templateIdentifiersCount()) { ret.append("< "); for (uint i = 0; i < templateIdentifiersCount(); ++i) { - ret.append(templateIdentifier(i).toString()); + ret.append(templateIdentifier(i).toString(options)); if (i != templateIdentifiersCount() - 1) ret.append(", "); } @@ -772,30 +772,30 @@ delete dd; } -QStringList QualifiedIdentifier::toStringList() const +QStringList QualifiedIdentifier::toStringList(IdentifierStringFormattingOptions options) const { QStringList ret; ret.reserve(explicitlyGlobal() + count()); if (explicitlyGlobal()) ret.append(QString()); if(m_index) { FOREACH_FUNCTION_STATIC(const IndexedIdentifier& index, cd->identifiers) - ret << index.identifier().toString(); + ret << index.identifier().toString(options); }else{ FOREACH_FUNCTION_STATIC(const IndexedIdentifier& index, dd->identifiers) - ret << index.identifier().toString(); + ret << index.identifier().toString(options); } return ret; } -QString QualifiedIdentifier::toString(bool ignoreExplicitlyGlobal) const +QString QualifiedIdentifier::toString(IdentifierStringFormattingOptions options) const { const QString doubleColon = QStringLiteral("::"); - + QString ret; - if( !ignoreExplicitlyGlobal && explicitlyGlobal() ) + if( !options.testFlag(RemoveExplicitlyGlobalPrefix) && explicitlyGlobal() ) ret = doubleColon; bool first = true; @@ -807,7 +807,7 @@ else first = false; - ret += index.identifier().toString(); + ret += index.identifier().toString(options); } }else{ FOREACH_FUNCTION_STATIC(const IndexedIdentifier& index, dd->identifiers) @@ -817,7 +817,7 @@ else first = false; - ret += index.identifier().toString(); + ret += index.identifier().toString(options); } } @@ -1247,15 +1247,15 @@ m_pointerConstMask &= (~(1 << depthNumber)); } -QString IndexedTypeIdentifier::toString(bool ignoreExplicitlyGlobal) const +QString IndexedTypeIdentifier::toString(IdentifierStringFormattingOptions options) const { QString ret; if(isConstant()) ret += QLatin1String("const "); if(isVolatile()) ret += QLatin1String("volatile "); - ret += m_identifier.identifier().toString(ignoreExplicitlyGlobal); + ret += m_identifier.identifier().toString(options); for(int a = 0; a < pointerDepth(); ++a) { ret += '*'; if( isConstPointer(a) )