QString declaratorToString( DeclaratorAST* declarator, const QString& scope, bool skipPtrOp ) { if( !declarator ) return QString(); QString text; if( !skipPtrOp ){ QList<AST*> ptrOpList = declarator->ptrOpList(); for( int i = 0; i < ptrOpList.size(); ++i ) { text += ptrOpList.at(i)->text(); } text += ' '; } text += scope; if( declarator->subDeclarator() ) text += QString::fromLatin1("(") + declaratorToString(declarator->subDeclarator()) + QString::fromLatin1(")"); if( declarator->declaratorId() ) text += declarator->declaratorId()->text(); QList<AST*> arrays = declarator->arrayDimensionList(); for( int i = 0; i < arrays.size(); ++i ) { text += "[]"; } if( declarator->parameterDeclarationClause() ){ text += "( "; ParameterDeclarationListAST* l = declarator->parameterDeclarationClause()->parameterDeclarationList(); if( l != 0 ){ QList<ParameterDeclarationAST*> params = l->parameterList(); for( int i = 0; i < params.size(); ++i ) { QString type = typeSpecToString( params.at(i)->typeSpec() ); text += type; if( !type.isEmpty() ) text += ' '; text += declaratorToString( params.at(i)->declarator() ); if( params.at(i) ) text += ", "; } } text += " )"; if( declarator->constant() != 0 ) text += " const"; } return text.replace( QRegExp(" :: "), "::" ).simplified(); }
void CppTree2Uml::parseFunctionArguments(DeclaratorAST* declarator, UMLOperation* method) { if (!declarator) return; ParameterDeclarationClauseAST* clause = declarator->parameterDeclarationClause(); if (clause && clause->parameterDeclarationList()){ ParameterDeclarationListAST* params = clause->parameterDeclarationList(); QList<ParameterDeclarationAST*> l(params->parameterList()); for (int i = 0; i < l.size(); ++i) { ParameterDeclarationAST* param = l.at(i); QString name; if (param->declarator()) name = declaratorToString(param->declarator(), QString(), true); QString tp = typeOfDeclaration(param->typeSpec(), param->declarator()); if (tp != QLatin1String("void")) Import_Utils::addMethodParameter(method, tp, name); } } }