File indexing completed on 2024-05-12 04:39:26
0001 /* 0002 SPDX-FileCopyrightText: 2014 Aleix Pol <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "declarationbuilder.h" 0008 #include <cmakeduchaintypes.h> 0009 #include <language/duchain/types/functiontype.h> 0010 #include <language/duchain/types/delayedtype.h> 0011 0012 using namespace KDevelop; 0013 0014 void DeclarationBuilder::startVisiting(CMakeContentIterator* node) 0015 { 0016 for(; node->hasNext(); ) { 0017 const CMakeFunctionDesc& func = node->next(); 0018 0019 if (func.name == QLatin1String("add_executable") || func.name == QLatin1String("add_library")) { 0020 if (func.arguments.isEmpty()) { 0021 continue; 0022 } 0023 CMakeFunctionArgument arg = func.arguments.first(); 0024 0025 DUChainWriteLocker lock; 0026 auto* decl = openDeclaration<Declaration>(Identifier(arg.value), arg.range(), DeclarationIsDefinition); 0027 decl->setAbstractType(AbstractType::Ptr(new TargetType)); 0028 closeDeclaration(); 0029 } else if(func.name == QLatin1String("macro") || func.name == QLatin1String("function")) { 0030 if (func.arguments.isEmpty()) { 0031 continue; 0032 } 0033 CMakeFunctionArgument arg = func.arguments.first(); 0034 FunctionType::Ptr funcType(new FunctionType); 0035 0036 auto it=func.arguments.constBegin()+1, itEnd = func.arguments.constEnd(); 0037 for (; it!=itEnd; ++it) 0038 { 0039 DelayedType::Ptr delayed(new DelayedType); 0040 delayed->setIdentifier( IndexedTypeIdentifier(it->value) ); 0041 funcType->addArgument(delayed); 0042 } 0043 0044 DUChainWriteLocker lock; 0045 auto* decl = openDeclaration<FunctionDeclaration>(Identifier(arg.value), arg.range(), DeclarationIsDefinition); 0046 decl->setAbstractType( funcType ); 0047 closeDeclaration(); 0048 } 0049 } 0050 }