]> git.saurik.com Git - wxWidgets.git/commitdiff
added wxMethodAccessSpecifier and the logic to extract both public and protected...
authorFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 27 Sep 2008 18:57:51 +0000 (18:57 +0000)
committerFrancesco Montorsi <f18m_cpp217828@yahoo.it>
Sat, 27 Sep 2008 18:57:51 +0000 (18:57 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55922 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

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

index 09e89fd79b2b7f357bf5eaee25cde8df8d7e5964..e69414ad339182eab635561effcd0c1de5f006c1 100644 (file)
@@ -135,7 +135,7 @@ int IfaceCheckApp::OnRun()
             // in any case set basic std preprocessor #defines:
             m_doxyInterface.AddPreprocessorValue("NULL", "0");
 
-            g_bLogEnabled = false;
+            //g_bLogEnabled = false;
 
             // parse the two XML files which contain the real and the doxygen interfaces
             // for wxWidgets API:
@@ -329,8 +329,8 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
                 WX_APPEND_ARRAY(overloads, results);
 
 
-#define HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES        1
-#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
+#define HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES        0
+#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
                 for (unsigned int k=0; k<results.GetCount(); k++)
                     if (results[k]->MatchesExceptForAttributes(m) &&
                         results[k]->IsPureVirtual() == m.IsPureVirtual())
@@ -352,7 +352,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
 #endif
             }
 
-#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
+#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
             if (!exit)
             {
 #endif
@@ -384,9 +384,9 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
                                                 m.GetName(), searchedclasses);
 
                 // get a list of the prototypes with _all_ possible attributes:
-                warning += "\tdoxy header: " + m.GetAsString(true, true, true);
+                warning += "\tdoxy header: " + m.GetAsString(true, true, true, true);
                 for (unsigned int j=0; j<overloads.GetCount(); j++)
-                    warning += "\n\treal header: " + overloads[j]->GetAsString(true, true, true);
+                    warning += "\n\treal header: " + overloads[j]->GetAsString(true, true, true, true);
 
                 wxPrint(warning + "\n");
                 count++;
@@ -414,7 +414,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
 
             count++;
 
-#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
+#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
             }
 #endif
         }
index 018a4045bba42cfb94875f12f24ca0122487f535..54522205f1e6cd131aa78e853b4e581b1bcb9e1c 100644 (file)
@@ -145,6 +145,18 @@ void wxArgumentType::SetDefaultValue(const wxString& defval, const wxString& def
     // to a single form:
     if (m_strDefaultValueForCmp == "0u")
         m_strDefaultValueForCmp = "0";
+
+    // fix for unicode strings:
+    m_strDefaultValueForCmp.Replace("\\000\\000\\000", "");
+
+    if (m_strDefaultValueForCmp.StartsWith("wxT(") &&
+        m_strDefaultValueForCmp.EndsWith(")"))
+    {
+        // get rid of the wxT() part
+        unsigned int len = m_strDefaultValueForCmp.Len();
+        m_strDefaultValueForCmp = m_strDefaultValueForCmp.Mid(4,len-5);
+    }
+
 /*
     if (IsPointer())
         m_strDefaultValueForCmp.Replace("0", "NULL");
@@ -280,14 +292,16 @@ bool wxMethod::operator==(const wxMethod& m) const
         IsStatic() != m.IsStatic() ||
         IsVirtual() != m.IsVirtual() ||
         IsPureVirtual() != m.IsPureVirtual() ||
-        IsDeprecated() != m.IsDeprecated())
+        IsDeprecated() != m.IsDeprecated() ||
+        GetAccessSpecifier() != m.GetAccessSpecifier())
         return false;
 
     // check everything else
     return MatchesExceptForAttributes(m);
 }
 
-wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDeprecated) const
+wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bCleanDefaultValues,
+                               bool bDeprecated, bool bAccessSpec) const
 {
     wxString ret;
 
@@ -308,7 +322,7 @@ wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDepre
         if (bWithArgumentNames && !name.IsEmpty())
             ret += " " + name;
 
-        const wxString& def = bClean ?
+        const wxString& def = bCleanDefaultValues ?
             m_args[i].GetDefaultCleanValue() : m_args[i].GetDefaultValue();
         if (!def.IsEmpty())
             ret += " = " + def;
@@ -332,6 +346,22 @@ wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDepre
     if (m_bDeprecated && bDeprecated)
         ret += " [deprecated]";
 
+    if (bAccessSpec)
+    {
+        switch (m_access)
+        {
+        case wxMAS_PUBLIC:
+            ret += " [public]";
+            break;
+        case wxMAS_PROTECTED:
+            ret += " [protected]";
+            break;
+        case wxMAS_PRIVATE:
+            ret += " [private]";
+            break;
+        }
+    }
+
     return ret;
 }
 
@@ -903,10 +933,10 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
     child = doc.GetRoot()->GetChildren();
     while (child)
     {
-        wxString n = child->GetName();
+        wxString n = child->GetName(), acc = child->GetAttribute("access");
 
-        // only register public methods
-        if (child->GetAttribute("access") == "public" &&
+        // only register public&protected methods
+        if ((acc == "public" || acc == "protected") &&
             (n == "Method" || n == "Constructor" || n == "Destructor" || n == "OperatorMethod"))
         {
             unsigned long id = 0;
@@ -928,6 +958,8 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
                     return false;
                 }
 
+                // do some additional check that we can do only here:
+
                 if (newfunc.IsCtor() && !p->IsValidCtorForThisClass(newfunc)) {
                     LogError("The method '%s' does not seem to be a ctor for '%s'",
                              newfunc.GetName(), p->GetName());
@@ -1036,6 +1068,14 @@ bool wxXmlGccInterface::ParseMethod(const wxXmlNode *p,
     m.SetPureVirtual(p->GetAttribute("pure_virtual") == "1");
     m.SetDeprecated(p->GetAttribute("attributes") == "deprecated");
 
+    // decode access specifier
+    if (p->GetAttribute("access") == "public")
+        m.SetAccessSpecifier(wxMAS_PUBLIC);
+    else if (p->GetAttribute("access") == "protected")
+        m.SetAccessSpecifier(wxMAS_PROTECTED);
+    else if (p->GetAttribute("access") == "private")
+        m.SetAccessSpecifier(wxMAS_PRIVATE);
+
     if (!m.IsOk()) {
         LogError("The prototype '%s' is not valid!", m.GetAsString());
         return false;
@@ -1249,8 +1289,11 @@ bool wxXmlDoxygenInterface::ParseCompoundDefinition(const wxString& filename)
             wxXmlNode *subchild = child->GetChildren();
             while (subchild)
             {
+                wxString kind = subchild->GetAttribute("kind");
+
+                // parse only public&protected functions:
                 if (subchild->GetName() == "sectiondef" &&
-                    subchild->GetAttribute("kind") == "public-func")
+                    (kind == "public-func" || kind == "protected-func"))
                 {
 
                     wxXmlNode *membernode = subchild->GetChildren();
@@ -1267,6 +1310,13 @@ bool wxXmlDoxygenInterface::ParseCompoundDefinition(const wxString& filename)
                                 return false;
                             }
 
+                            if (kind == "public-func")
+                                m.SetAccessSpecifier(wxMAS_PUBLIC);
+                            else if (kind == "protected-func")
+                                m.SetAccessSpecifier(wxMAS_PROTECTED);
+                            else if (kind == "private-func")
+                                m.SetAccessSpecifier(wxMAS_PRIVATE);
+
                             if (absoluteFile.IsEmpty())
                                 absoluteFile = header;
                             else if (header != absoluteFile)
index 3d4825b5db738fe0cb6a584928ed48e58a46d3ff..b103cb2c39db5cf47c6e0aa27c24e11ea1501076 100644 (file)
@@ -144,6 +144,13 @@ extern wxArgumentType wxEmptyArgumentType;
 WX_DECLARE_OBJARRAY(wxArgumentType, wxArgumentTypeArray);
 
 
+enum wxMethodAccessSpecifier
+{
+    wxMAS_PUBLIC,
+    wxMAS_PROTECTED,
+    wxMAS_PRIVATE
+};
+
 // ----------------------------------------------------------------------------
 // Represents a single prototype of a class' member.
 // ----------------------------------------------------------------------------
@@ -152,7 +159,7 @@ class wxMethod
 public:
     wxMethod()
         { m_bConst=m_bVirtual=m_bPureVirtual=m_bStatic=m_bDeprecated=false;
-          m_nLine=-1; m_nAvailability=wxPORT_UNKNOWN; }
+          m_nLine=-1; m_nAvailability=wxPORT_UNKNOWN; m_access=wxMAS_PUBLIC; }
 
     wxMethod(const wxType& rettype, const wxString& name,
              const wxArgumentTypeArray& arguments,
@@ -165,11 +172,15 @@ public:
 public:     // getters
 
     // bWithArgumentNames = output argument names?
-    // bClean = output type names or type _clean_ names (see wxType::GetAsCleanString)
+    // bCleanDefaultValues = output clean argument default values?
     // bDeprecated = output [deprecated] next to deprecated methods?
+    // bAccessSpec = output [public], [protected] or [private] next to method?
+    //
+    // TODO: convert to readable flags this set of bools
     wxString GetAsString(bool bWithArgumentNames = true,
-                         bool bClean = false,
-                         bool bDeprecated = false) const;
+                         bool bCleanDefaultValues = false,
+                         bool bDeprecated = false,
+                         bool bAccessSpec = false) const;
 
     // parser of the prototype:
     // all these functions return strings with spaces stripped
@@ -183,6 +194,8 @@ public:     // getters
         { return m_nLine; }
     int GetAvailability() const
         { return m_nAvailability; }
+    wxMethodAccessSpecifier GetAccessSpecifier() const
+        { return m_access; }
 
     bool IsConst() const
         { return m_bConst; }
@@ -228,6 +241,8 @@ public:     // setters
         { m_nLine=lineNumber; }
     void SetAvailability(int nAvail)
         { m_nAvailability=nAvail; }
+    void SetAccessSpecifier(wxMethodAccessSpecifier spec)
+        { m_access=spec; }
 
 public:     // misc
 
@@ -264,6 +279,9 @@ protected:
     // NOTE: this is not used for comparing wxMethod objects
     //       (gccXML never gives this kind of info).
     int m_nAvailability;
+
+    // the access specifier for this method
+    wxMethodAccessSpecifier m_access;
 };
 
 WX_DECLARE_OBJARRAY(wxMethod, wxMethodArray);