]> git.saurik.com Git - wxWidgets.git/commitdiff
add deprecation tags/attributes parsing
authorFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sun, 23 Mar 2008 23:20:14 +0000 (23:20 +0000)
committerFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sun, 23 Mar 2008 23:20:14 +0000 (23:20 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52750 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

utils/ifacecheck/src/xmlparser.cpp
utils/ifacecheck/src/xmlparser.h

index 8a74a8e8dff125777ac827b12e1d70fa70b39c12..d5513341f61bf2da17c32232b3a001c0e655b859 100644 (file)
 
 #include "wx/xml/xml.h"
 #include "wx/wfstream.h"
-#include "wx/arrimpl.cpp"
 #include "wx/hashmap.h"
 #include "wx/filename.h"
-
-#include <errno.h>
-
 #include "xmlparser.h"
+#include <errno.h>
 
-#define PROGRESS_RATE             1000     // each PROGRESS_RATE nodes processed print a dot
-#define ESTIMATED_NUM_CLASSES     600      // used by both wxXmlInterface-derived classes to prealloc mem
-
+#include <wx/arrimpl.cpp>
 WX_DEFINE_OBJARRAY(wxTypeArray)
 WX_DEFINE_OBJARRAY(wxMethodArray)
 WX_DEFINE_OBJARRAY(wxClassArray)
 
 
-// declared in ifacecheck.cpp
+#define PROGRESS_RATE             1000     // each PROGRESS_RATE nodes processed print a dot
+#define ESTIMATED_NUM_CLASSES     600      // used by both wxXmlInterface-derived classes to prealloc mem
+
+
+// defined in ifacecheck.cpp
 extern bool g_verbose;
 
 
@@ -149,7 +148,8 @@ bool wxMethod::operator==(const wxMethod& m) const
         GetName() != m.GetName() ||
         IsConst() != m.IsConst() ||
         IsStatic() != m.IsStatic() ||
-        IsVirtual() != m.IsVirtual())
+        IsVirtual() != m.IsVirtual() ||
+        IsDeprecated() != m.IsDeprecated())
         return false;
 
     if (m_args.GetCount()!=m.m_args.GetCount())
@@ -192,6 +192,9 @@ wxString wxMethod::GetAsString() const
     if (m_bVirtual)
         ret = "virtual " + ret;
 
+    if (m_bDeprecated)
+        ret = "wxDEPRECATED( " + ret + " )";
+
     return ret;
 }
 
@@ -209,6 +212,8 @@ void wxMethod::Dump(wxTextOutputStream& stream) const
         stream << " STATIC";
     if (IsVirtual())
         stream << " VIRTUAL";
+    if (IsDeprecated())
+        stream << " DEPRECATED";
 
     // no final newline
 }
@@ -543,16 +548,26 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
         }
         else if (n == "FunctionType" || n == "MethodType")
         {
-            /* TODO: incomplete */
-
-            unsigned long ret = 0;
-            if (!getID(&ret, child->GetAttribute("returns")) || ret == 0) {
-                LogError("Invalid empty returns value for '%s' node", n);
-                return false;
+            /*
+                 TODO: parsing FunctionType and MethodType nodes is not as easy
+                       as for other "simple" types.
+            */
+
+            wxString argstr;
+            wxXmlNode *arg = child->GetChildren();
+            while (arg)
+            {
+                if (arg->GetName() == "Argument")
+                    argstr += arg->GetAttribute("type") + ", ";
+                arg = arg->GetNext();
             }
 
+            if (argstr.Len() > 0)
+                argstr = argstr.Left(argstr.Len()-2);
+
             // these nodes make reference to other types... we'll resolve them later
-            toResolveTypes[id] = toResolveTypeItem(ret, 0);
+            //toResolveTypes[id] = toResolveTypeItem(ret, 0);
+            types[id] = child->GetAttribute("returns") + "(" + argstr + ")";
         }
         else if (n == "File")
         {
@@ -650,19 +665,8 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
                 }
                 else
                 {
-#if 1
                     LogError("Cannot solve '%s' reference type!", referenced);
                     return false;
-#else
-                    typeIds.Add(toResolveTypeIds[i]);
-                    typeNames.Add("TOFIX");
-
-                    // this one has been resolved!
-                    toResolveTypeIds.RemoveAt(i);
-                    toResolveRefType.RemoveAt(i);
-                    toResolveAttrib.RemoveAt(i);
-                    n--;
-#endif
                 }
             }
         }
@@ -819,6 +823,7 @@ bool wxXmlGccInterface::ParseMethod(const wxXmlNode *p,
     m.SetConst(p->GetAttribute("const") == "1");
     m.SetStatic(p->GetAttribute("static") == "1");
     m.SetVirtual(p->GetAttribute("virtual") == "1");
+    m.SetDeprecated(p->GetAttribute("attributes") == "deprecated");
 
     if (!m.IsOk()) {
         LogError("The prototype '%s' is not valid!", m.GetAsString());
@@ -1012,6 +1017,35 @@ static wxString GetTextFromChildren(const wxXmlNode *n)
     return text;
 }
 
+static bool HasTextNodeContaining(const wxXmlNode *parent, const wxString& name)
+{
+    wxXmlNode *p = parent->GetChildren();
+    while (p)
+    {
+        switch (p->GetType())
+        {
+            case wxXML_TEXT_NODE:
+                if (p->GetContent() == name)
+                    return true;
+                break;
+
+            case wxXML_ELEMENT_NODE:
+                // recurse into this node...
+                if (HasTextNodeContaining(p, name))
+                    return true;
+                break;
+
+            default:
+                // skip it
+                break;
+        }
+
+        p = p->GetNext();
+    }
+
+    return false;
+}
+
 bool wxXmlDoxygenInterface::ParseMethod(const wxXmlNode* p, wxMethod& m, wxString& header)
 {
     wxTypeArray args;
@@ -1058,6 +1092,13 @@ bool wxXmlDoxygenInterface::ParseMethod(const wxXmlNode* p, wxMethod& m, wxStrin
                 m.SetLocation((int)line);
             header = child->GetAttribute("file");
         }
+        else if (child->GetName() == "detaileddescription")
+        {
+            // when a method has a @deprecated tag inside its description,
+            // Doxygen outputs somewhere nested inside <detaileddescription>
+            // a <xreftitle>Deprecated</xreftitle> tag.
+            m.SetDeprecated(HasTextNodeContaining(child, "Deprecated"));
+        }
 
         child = child->GetNext();
     }
index a80b08f547beea5f27f1984d6a8e60a987895812..989aafbfafeb783c1c1c09abd57ea855f1c2decd 100644 (file)
@@ -70,7 +70,9 @@ WX_DECLARE_OBJARRAY(wxType, wxTypeArray);
 class wxMethod
 {
 public:
-    wxMethod() { m_bConst=m_bVirtual=m_bStatic=false; m_nLine=-1; }
+    wxMethod()
+        { m_bConst=m_bVirtual=m_bStatic=m_bDeprecated=false; m_nLine=-1; }
+
     wxMethod(const wxType& rettype, const wxString& name,
              const wxTypeArray& arguments, const wxArrayString& defaults,
              bool isConst, bool isStatic, bool isVirtual)
@@ -110,6 +112,9 @@ public:     // getters
     bool IsDtor() const
         { return m_retType==wxEmptyType && m_strName.StartsWith("~"); }
 
+    bool IsDeprecated() const
+        { return m_bDeprecated; }
+
 
 public:     // setters
 
@@ -124,6 +129,8 @@ public:     // setters
         { m_bStatic=c; }
     void SetVirtual(bool c = true)
         { m_bVirtual=c; }
+    void SetDeprecated(bool c = true)
+        { m_bDeprecated=c; }
     void SetLocation(int lineNumber)
         { m_nLine=lineNumber; }
 
@@ -143,6 +150,7 @@ protected:
     bool m_bConst;
     bool m_bStatic;
     bool m_bVirtual;
+    bool m_bDeprecated;
     int m_nLine;
 };