diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/docparser.cpp | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/src/docparser.cpp b/src/docparser.cpp index be0d60b..4ef9de6 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -101,6 +101,7 @@ static QCString g_relPath; static bool g_hasParamCommand; static bool g_hasReturnCommand; +static QDict<void> g_retvalsFound; static QDict<void> g_paramsFound; static const MemberDef * g_memberDef; static bool g_isExample; @@ -136,6 +137,7 @@ struct DocParserContext bool hasParamCommand; bool hasReturnCommand; const MemberDef * memberDef; + QDict<void> retvalsFound; QDict<void> paramsFound; bool isExample; QCString exampleName; @@ -183,6 +185,7 @@ static void docParserPushContext(bool saveParamInfo=TRUE) ctx->hasParamCommand = g_hasParamCommand; ctx->hasReturnCommand = g_hasReturnCommand; ctx->paramsFound = g_paramsFound; + ctx->retvalsFound = g_retvalsFound; } ctx->memberDef = g_memberDef; @@ -223,6 +226,7 @@ static void docParserPopContext(bool keepParamInfo=FALSE) { g_hasParamCommand = ctx->hasParamCommand; g_hasReturnCommand = ctx->hasReturnCommand; + g_retvalsFound = ctx->retvalsFound; g_paramsFound = ctx->paramsFound; } g_memberDef = ctx->memberDef; @@ -396,13 +400,13 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type, bool return result; } -/*! Collects the parameters found with \@param or \@retval commands - * in a global list g_paramsFound. If \a isParam is set to TRUE - * and the parameter is not an actual parameter of the current +/*! Collects the parameters found with \@param command + * in a global list g_paramsFound. If + * the parameter is not an actual parameter of the current * member g_memberDef, then a warning is raised (unless warnings * are disabled altogether). */ -static void checkArgumentName(const QCString &name,bool isParam) +static void checkArgumentName(const QCString &name) { if (!Config_getBool(WARN_IF_DOC_ERROR)) return; if (g_memberDef==0) return; // not a member @@ -430,14 +434,14 @@ static void checkArgumentName(const QCString &name,bool isParam) argName=argName.stripWhiteSpace(); //printf("argName=`%s' aName=%s\n",argName.data(),aName.data()); if (argName.right(3)=="...") argName=argName.left(argName.length()-3); - if (aName==argName && isParam) + if (aName==argName) { g_paramsFound.insert(aName,(void *)(0x8)); found=TRUE; break; } } - if (!found && isParam) + if (!found) { //printf("member type=%d\n",g_memberDef->memberType()); QCString scope=g_memberDef->getScopeString(); @@ -465,6 +469,23 @@ static void checkArgumentName(const QCString &name,bool isParam) p=i+l; } } +/*! Collects the return values found with \@retval command + * in a global list g_retvalsFound. + */ +static void checkRetvalName(const QCString &name) +{ + if (!Config_getBool(WARN_IF_DOC_ERROR)) return; + if (g_memberDef==0) return; // not a member + if (g_retvalsFound.find(name)) + { + warn_doc_error(g_memberDef->getDefFileName(), + g_memberDef->getDefLine(), + "return value '" + name + "' of " + + QCString(g_memberDef->qualifiedName()) + + " has multiple documentation sections"); + } + g_retvalsFound.insert(name,(void *)(0x8)); +} /*! Checks if the parameters that have been specified using \@param are * indeed all parameters and that a parameter does not have multiple @@ -4575,19 +4596,19 @@ int DocParamList::parse(const QCString &cmdName) handleParameterType(this,m_paramTypes,g_token->name.left(typeSeparator)); g_token->name = g_token->name.mid(typeSeparator+1); g_hasParamCommand=TRUE; - checkArgumentName(g_token->name,TRUE); + checkArgumentName(g_token->name); ((DocParamSect*)parent())->m_hasTypeSpecifier=TRUE; } else { g_hasParamCommand=TRUE; - checkArgumentName(g_token->name,TRUE); + checkArgumentName(g_token->name); } } else if (m_type==DocParamSect::RetVal) { g_hasReturnCommand=TRUE; - checkArgumentName(g_token->name,FALSE); + checkRetvalName(g_token->name); } //m_params.append(g_token->name); handleLinkedWord(this,m_params); @@ -4632,12 +4653,12 @@ int DocParamList::parseXml(const QCString ¶mName) if (m_type==DocParamSect::Param) { g_hasParamCommand=TRUE; - checkArgumentName(g_token->name,TRUE); + checkArgumentName(g_token->name); } else if (m_type==DocParamSect::RetVal) { g_hasReturnCommand=TRUE; - checkArgumentName(g_token->name,FALSE); + checkRetvalName(g_token->name); } handleLinkedWord(this,m_params); @@ -7594,6 +7615,8 @@ DocRoot *validatingParseDoc(const char *fileName,int startLine, g_exampleName = exampleName; g_hasParamCommand = FALSE; g_hasReturnCommand = FALSE; + g_retvalsFound.setAutoDelete(FALSE); + g_retvalsFound.clear(); g_paramsFound.setAutoDelete(FALSE); g_paramsFound.clear(); g_sectionDict = 0; //sections; @@ -7664,6 +7687,8 @@ DocText *validatingParseText(const char *input) g_exampleName = ""; g_hasParamCommand = FALSE; g_hasReturnCommand = FALSE; + g_retvalsFound.setAutoDelete(FALSE); + g_retvalsFound.clear(); g_paramsFound.setAutoDelete(FALSE); g_paramsFound.clear(); g_searchUrl=""; |