void DeclarationBuilder::visitFuncDeclaration(IFunctionDeclaration *node) { TypeBuilder::visitFuncDeclaration(node); DUChainWriteLocker lock; if(inClassScope) { ClassFunctionDeclaration *newMethod = openDefinition<ClassFunctionDeclaration>(node->getName(), node); if(node->getComment()) newMethod->setComment(QString::fromUtf8(node->getComment())); newMethod->setKind(KDevelop::Declaration::Type); lock.unlock(); ContextBuilder::visitFuncDeclaration(node); lock.lock(); closeDeclaration(); newMethod->setInternalContext(lastContext()); newMethod->setType(currentFunctionType); } else { FunctionDeclaration *newMethod = openDefinition<FunctionDeclaration>(node->getName(), node); if(node->getComment()) newMethod->setComment(QString::fromUtf8(node->getComment())); newMethod->setKind(KDevelop::Declaration::Type); lock.unlock(); ContextBuilder::visitFuncDeclaration(node); lock.lock(); closeDeclaration(); newMethod->setInternalContext(lastContext()); newMethod->setType(currentFunctionType); } }
void DeclarationBuilder::visitDestructor(IDestructor *node) { TypeBuilder::visitDestructor(node); DUChainWriteLocker lock; ClassFunctionDeclaration *newMethod = openDefinition<ClassFunctionDeclaration>(QualifiedIdentifier("~this"), editorFindRange(node, node)); if(node->getComment()) newMethod->setComment(QString::fromUtf8(node->getComment())); newMethod->setKind(KDevelop::Declaration::Type); lock.unlock(); ContextBuilder::visitDestructor(node); lock.lock(); closeDeclaration(); newMethod->setInternalContext(lastContext()); newMethod->setType(currentFunctionType); }