File indexing completed on 2024-05-12 04:37:44

0001 /*
0002     SPDX-FileCopyrightText: 2007-2008 David Nolden <david.nolden.kdevelop@art-master.de>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "codecompletionitem.h"
0008 
0009 #include <QModelIndex>
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <KTextEditor/CodeCompletionModel>
0014 #include <KTextEditor/Range>
0015 #include <KTextEditor/View>
0016 #include <KTextEditor/Document>
0017 
0018 #include <debug.h>
0019 #include "../duchain/declaration.h"
0020 #include "../duchain/duchainutils.h"
0021 
0022 using namespace KTextEditor;
0023 namespace KDevelop {
0024 ///Intermediate nodes
0025 struct CompletionTreeNode;
0026 ///Leaf items
0027 class CompletionTreeItem;
0028 
0029 CompletionTreeElement::CompletionTreeElement() : m_parent(nullptr)
0030     , m_rowInParent(0)
0031 {
0032 }
0033 
0034 CompletionTreeElement::~CompletionTreeElement()
0035 {
0036 }
0037 
0038 CompletionTreeElement* CompletionTreeElement::parent() const
0039 {
0040     return m_parent;
0041 }
0042 
0043 void CompletionTreeElement::setParent(CompletionTreeElement* parent)
0044 {
0045     Q_ASSERT(m_parent == nullptr);
0046 
0047     m_parent = parent;
0048     auto node = parent ? parent->asNode() : nullptr;
0049     if (node) {
0050         m_rowInParent = node->children.count();
0051     }
0052 }
0053 
0054 void CompletionTreeNode::appendChildren(
0055     const QList<QExplicitlySharedDataPointer<KDevelop::CompletionTreeElement>>& children)
0056 {
0057     for (const auto& child : children) {
0058         appendChild(child);
0059     }
0060 }
0061 
0062 void CompletionTreeNode::appendChildren(
0063     const QList<QExplicitlySharedDataPointer<KDevelop::CompletionTreeItem>>& children)
0064 {
0065     for (const auto& child : children) {
0066         appendChild(CompletionTreeElementPointer(child.data()));
0067     }
0068 }
0069 
0070 void CompletionTreeNode::appendChild(QExplicitlySharedDataPointer<KDevelop::CompletionTreeElement> child)
0071 {
0072     child->setParent(this);
0073     children << child;
0074 }
0075 
0076 int CompletionTreeElement::columnInParent() const
0077 {
0078     return 0;
0079 }
0080 
0081 CompletionTreeNode::CompletionTreeNode() : CompletionTreeElement()
0082     , role(( KTextEditor::CodeCompletionModel::ExtraItemDataRoles )Qt::DisplayRole)
0083 {}
0084 
0085 CompletionTreeNode::~CompletionTreeNode()
0086 {
0087 }
0088 
0089 CompletionTreeNode* CompletionTreeElement::asNode()
0090 {
0091     return dynamic_cast<CompletionTreeNode*>(this);
0092 }
0093 
0094 CompletionTreeItem* CompletionTreeElement::asItem()
0095 {
0096     return dynamic_cast<CompletionTreeItem*>(this);
0097 }
0098 
0099 const CompletionTreeNode* CompletionTreeElement::asNode() const
0100 {
0101     return dynamic_cast<const CompletionTreeNode*>(this);
0102 }
0103 
0104 const CompletionTreeItem* CompletionTreeElement::asItem() const
0105 {
0106     return dynamic_cast<const CompletionTreeItem*>(this);
0107 }
0108 
0109 int CompletionTreeElement::rowInParent() const
0110 {
0111     return m_rowInParent;
0112 }
0113 
0114 void CompletionTreeItem::execute(KTextEditor::View* view, const KTextEditor::Range& word)
0115 {
0116     Q_UNUSED(view)
0117     Q_UNUSED(word)
0118     qCWarning(LANGUAGE) << "doing nothing";
0119 }
0120 
0121 QVariant CompletionTreeItem::data(const QModelIndex& index, int role, const CodeCompletionModel* model) const
0122 {
0123     Q_UNUSED(index)
0124     Q_UNUSED(model)
0125     if (role == Qt::DisplayRole)
0126         return i18n("not implemented");
0127     return QVariant();
0128 }
0129 
0130 int CompletionTreeItem::inheritanceDepth() const
0131 {
0132     return 0;
0133 }
0134 
0135 int CompletionTreeItem::argumentHintDepth() const
0136 {
0137     return 0;
0138 }
0139 
0140 KTextEditor::CodeCompletionModel::CompletionProperties CompletionTreeItem::completionProperties() const
0141 {
0142     Declaration* dec = declaration().data();
0143     if (!dec) {
0144         return {};
0145     }
0146 
0147     return DUChainUtils::completionProperties(dec);
0148 }
0149 
0150 DeclarationPointer CompletionTreeItem::declaration() const
0151 {
0152     return DeclarationPointer();
0153 }
0154 
0155 QList<IndexedType> CompletionTreeItem::typeForArgumentMatching() const
0156 {
0157     return QList<IndexedType>();
0158 }
0159 
0160 CompletionCustomGroupNode::CompletionCustomGroupNode(const QString& groupName, int _inheritanceDepth)
0161 {
0162     role = ( KTextEditor::CodeCompletionModel::ExtraItemDataRoles )Qt::DisplayRole;
0163     roleValue = groupName;
0164     inheritanceDepth = _inheritanceDepth;
0165 }
0166 
0167 bool CompletionTreeItem::dataChangedWithInput() const
0168 {
0169     return false;
0170 }
0171 }