diff --git a/Examples/test-suite/doxygen_basic_translate.i b/Examples/test-suite/doxygen_basic_translate.i index c06cbddc9..9cef037b1 100644 --- a/Examples/test-suite/doxygen_basic_translate.i +++ b/Examples/test-suite/doxygen_basic_translate.i @@ -61,6 +61,7 @@ int function4() /** * Test for default args + * @param a Some parameter, default is 42 */ int function5(int a=42) { diff --git a/Examples/test-suite/java/doxygen_basic_translate_runme.java b/Examples/test-suite/java/doxygen_basic_translate_runme.java index 50d6cedda..4e95b73a7 100644 --- a/Examples/test-suite/java/doxygen_basic_translate_runme.java +++ b/Examples/test-suite/java/doxygen_basic_translate_runme.java @@ -63,6 +63,11 @@ public class doxygen_basic_translate_runme { " \n" + ""); wantedComments.put("doxygen_basic_translate.doxygen_basic_translate.function5(int)", + " Test for default args \n" + + " @param a Some parameter, default is 42" + + " \n" + + ""); + wantedComments.put("doxygen_basic_translate.doxygen_basic_translate.function5()", " Test for default args \n" + " \n" + ""); diff --git a/Examples/test-suite/python/doxygen_basic_translate_runme.py b/Examples/test-suite/python/doxygen_basic_translate_runme.py index 95596c1f3..a952df8b0 100644 --- a/Examples/test-suite/python/doxygen_basic_translate_runme.py +++ b/Examples/test-suite/python/doxygen_basic_translate_runme.py @@ -58,5 +58,7 @@ check(doxygen_basic_translate.function4.__doc__, '' ' }' ) check(doxygen_basic_translate.function5.__doc__, '' -' Test for default args' +' Test for default args \n' +' Arguments: \n' +' a (int) -- Some parameter, default is 42\n' ) \ No newline at end of file diff --git a/Source/CParse/parser.y b/Source/CParse/parser.y index 6aed8c3f9..e331752bf 100644 --- a/Source/CParse/parser.y +++ b/Source/CParse/parser.y @@ -190,6 +190,7 @@ static Node *copy_node(Node *n) { } static void set_comment(Node *n, String *comment) { + String *name; Parm *p; if (!n || !comment) return; @@ -206,6 +207,16 @@ static void set_comment(Node *n, String *comment) { p=nextSibling(p); } } + + /* Append same comment to every generated overload */ + name = Getattr(n, "name"); + if (!name) + return; + n = nextSibling(n); + while (n && Getattr(n, "name") && Strcmp(Getattr(n, "name"), name) == 0) { + Setattr(n, "DoxygenComment", comment); + n = nextSibling(n); + } } /* ----------------------------------------------------------------------------- @@ -1586,10 +1597,6 @@ static void default_arguments(Node *n) { if (throws) Setattr(new_function,"throws",pl); Delete(pl); } - - /* copy doxygen comments if found */ - if(Getattr(function,"DoxygenComment")) - Setattr(new_function,"DoxygenComment",Getattr(function,"DoxygenComment")); /* copy specific attributes for global (or in a namespace) template functions - these are not templated class methods */ if (strcmp(cntype,"template") == 0) { diff --git a/Source/DoxygenTranslator/src/JavaDocConverter.cpp b/Source/DoxygenTranslator/src/JavaDocConverter.cpp index 0856eabf1..421134828 100644 --- a/Source/DoxygenTranslator/src/JavaDocConverter.cpp +++ b/Source/DoxygenTranslator/src/JavaDocConverter.cpp @@ -66,8 +66,8 @@ void JavaDocConverter::fillStaticTables() { tagHandlers["deprecated"] = make_pair(&JavaDocConverter::handleTagSame, ""); tagHandlers["exception"] = make_pair(&JavaDocConverter::handleTagSame, ""); tagHandlers["package"] = make_pair(&JavaDocConverter::handleTagSame, ""); - tagHandlers["param"] = make_pair(&JavaDocConverter::handleTagSame, ""); - tagHandlers["tparam"] = make_pair(&JavaDocConverter::handleTagSame, "param"); + tagHandlers["param"] = make_pair(&JavaDocConverter::handleTagParam, ""); + tagHandlers["tparam"] = make_pair(&JavaDocConverter::handleTagParam, ""); tagHandlers["result"] = make_pair(&JavaDocConverter::handleTagSame, "return"); tagHandlers["return"] = make_pair(&JavaDocConverter::handleTagSame, ""); tagHandlers["returns"] = make_pair(&JavaDocConverter::handleTagSame, "return"); @@ -151,6 +151,23 @@ std::string JavaDocConverter::formatCommand(std::string unformattedLine, int ind return formattedLines; } +bool JavaDocConverter::paramExists(std::string param) { + ParmList *plist = CopyParmList(Getattr(currentNode, "parms")); + Parm *p = NULL; + for (p = plist; p;) { + if (Char(Getattr(p, "name")) == param) + return true; + /* + * doesn't seem to work always: in some cases (especially for 'self' parameters) + * tmap:in is present, but tmap:in:next is not and so this code skips all the parameters + */ + //p = Getattr(p, "tmap:in") ? Getattr(p, "tmap:in:next") : nextSibling(p); + p = nextSibling(p); + } + Delete(plist); + return false; +} + std::string JavaDocConverter::translateSubtree(DoxygenEntity & doxygenEntity) { std::string translatedComment; @@ -250,12 +267,26 @@ void JavaDocConverter::handleTagImage(DoxygenEntity& tag, std::string& translate void JavaDocConverter::handleTagPar(DoxygenEntity& tag, std::string& translatedComment, std::string&) { std::string dummy; translatedComment += "data + "\""; - translatedComment += ">"; + translatedComment += ">"; + tag.entityList.pop_front(); + handleParagraph(tag, translatedComment, dummy); + } + translatedComment += "

"; +} + +void JavaDocConverter::handleTagParam(DoxygenEntity& tag, std::string& translatedComment, std::string&) { + std::string dummy; + if (!tag.entityList.size()) + return; + if (!paramExists(tag.entityList.begin()->data)) + return; + + translatedComment += "@param "; + translatedComment += tag.entityList.begin()->data + " "; tag.entityList.pop_front(); handleParagraph(tag, translatedComment, dummy); - translatedComment += "

"; } String *JavaDocConverter::makeDocumentation(Node *node) { @@ -278,6 +309,9 @@ String *JavaDocConverter::makeDocumentation(Node *node) { std::string javaDocString = "/**\n * "; + // store the current node + // (currently just to handle params) + currentNode = node; for (std::list < DoxygenEntity >::iterator entityIterator = entityList.begin(); entityIterator != entityList.end();) { translateEntity(*entityIterator, javaDocString); entityIterator++; diff --git a/Source/DoxygenTranslator/src/JavaDocConverter.h b/Source/DoxygenTranslator/src/JavaDocConverter.h index 1d51a8d7b..f68a712b9 100644 --- a/Source/DoxygenTranslator/src/JavaDocConverter.h +++ b/Source/DoxygenTranslator/src/JavaDocConverter.h @@ -85,12 +85,19 @@ protected: * Insert

...

*/ void handleTagPar(DoxygenEntity &tag, std::string &translatedComment, std::string &arg); + /* + * Insert @param command, if it is really a function param + */ + void handleTagParam(DoxygenEntity &tag, std::string &translatedComment, std::string &arg); private: + Node *currentNode; // this contains the handler pointer and one string argument static std::map > tagHandlers; void fillStaticTables(); + + bool paramExists(std::string param); }; #endif