void ContextBuilder::addBaseType( KDevelop::BaseClassInstance base, BaseSpecifierAST *node ) { DUChainWriteLocker lock(DUChain::lock()); addImportedContexts(); //Make sure the template-contexts are imported first, before any parent-class contexts. Q_ASSERT(currentContext()->type() == DUContext::Class); AbstractType::Ptr baseClass = base.baseClass.abstractType(); IdentifiedType* idType = dynamic_cast<IdentifiedType*>(baseClass.unsafeData()); Declaration* idDecl = 0; if( idType && (idDecl = idType->declaration(currentContext()->topContext())) ) { DUContext* ctx = idDecl->logicalInternalContext(currentContext()->topContext()); if(ctx) { currentContext()->addImportedParentContext( ctx ); }else{ currentContext()->addIndirectImport( DUContext::Import(idType->declarationId()) ); QString text = i18n("Could not resolve base class, adding it indirectly: %1", (base.baseClass ? base.baseClass.abstractType()->toString() : QString())); lock.unlock(); createUserProblem(node, text); } } else if( !baseClass.cast<DelayedType>() ) { QString text = i18n("Invalid base class: %1", (base.baseClass ? base.baseClass.abstractType()->toString() : QString())); lock.unlock(); createUserProblem(node, text); } }