void ADLHelper::addArgumentType(const AbstractType::Ptr typePtr) { if(m_alreadyProcessed.contains(typePtr.data())) return; if (typePtr) { #ifdef DEBUG_ADL qCDebug(CPPDUCHAIN) << " added argument type " << typePtr->toString() << " to ADL lookup"; #endif // the enumeration and enumerator types are not part of the TypeVisitor interface switch (typePtr->whichType()) { case AbstractType::TypeEnumeration: { EnumerationType* specificType = fastCast<EnumerationType*>(typePtr.data()); if (specificType) { Declaration * enumDecl = specificType->declaration(m_topContext.data()); addDeclarationScopeIdentifier(enumDecl); } break; } case AbstractType::TypeEnumerator: { if (m_templateArgsDepth == 0) { EnumeratorType* specificType = fastCast<EnumeratorType*>(typePtr.data()); if (specificType) { // use the enumeration context for the enumerator value declaration to find out the namespace Declaration * enumeratorDecl = specificType->declaration(m_topContext.data()); if (enumeratorDecl) { DUContext * enumContext = enumeratorDecl->context(); if (enumContext) { addAssociatedNamespace(enumContext->scopeIdentifier(false)); } } } } break; } default: typePtr->accept(&m_typeVisitor); } } m_alreadyProcessed.insert(typePtr.data()); }
//Returns only the name, no template-parameters or scope QString cursorItemText() { KDevelop::DUChainReadLocker lock( DUChain::lock() ); Declaration* decl = cursorDeclaration(); if(!decl) return QString(); IDocument* doc = ICore::self()->documentController()->activeDocument(); if(!doc) return QString(); TopDUContext* context = DUChainUtils::standardContextForUrl( doc->url() ); if( !context ) { qCDebug(PLUGIN_QUICKOPEN) << "Got no standard context"; return QString(); } AbstractType::Ptr t = decl->abstractType(); IdentifiedType* idType = dynamic_cast<IdentifiedType*>(t.data()); if( idType && idType->declaration(context) ) decl = idType->declaration(context); if(!decl->qualifiedIdentifier().isEmpty()) return decl->qualifiedIdentifier().last().identifier().str(); return QString(); }
uint TypeRepository::indexForType(const AbstractType::Ptr input) { if(!input) return 0; uint i = typeRepository()->index(AbstractTypeDataRequest(*input)); #ifdef DEBUG_TYPE_REPOSITORY AbstractType::Ptr t = typeForIndex(i); if(!t->equals(input.data())) { qCWarning(LANGUAGE) << "found type in repository does not equal source type:" << input->toString() << t->toString(); t->equals(input.data()); } #ifdef ASSERT_ON_PROBLEM Q_ASSERT(t->equals(input.data())); Q_ASSERT(input->equals(t.data())); #endif #endif return i; }