added wxMethodAccessSpecifier and the logic to extract both public and protected methods from gccXML and doxygenXML
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55922 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -135,7 +135,7 @@ int IfaceCheckApp::OnRun()
|
|||||||
// in any case set basic std preprocessor #defines:
|
// in any case set basic std preprocessor #defines:
|
||||||
m_doxyInterface.AddPreprocessorValue("NULL", "0");
|
m_doxyInterface.AddPreprocessorValue("NULL", "0");
|
||||||
|
|
||||||
g_bLogEnabled = false;
|
//g_bLogEnabled = false;
|
||||||
|
|
||||||
// parse the two XML files which contain the real and the doxygen interfaces
|
// parse the two XML files which contain the real and the doxygen interfaces
|
||||||
// for wxWidgets API:
|
// for wxWidgets API:
|
||||||
@@ -329,8 +329,8 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
|
|||||||
WX_APPEND_ARRAY(overloads, results);
|
WX_APPEND_ARRAY(overloads, results);
|
||||||
|
|
||||||
|
|
||||||
#define HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES 1
|
#define HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES 0
|
||||||
#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
|
#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
|
||||||
for (unsigned int k=0; k<results.GetCount(); k++)
|
for (unsigned int k=0; k<results.GetCount(); k++)
|
||||||
if (results[k]->MatchesExceptForAttributes(m) &&
|
if (results[k]->MatchesExceptForAttributes(m) &&
|
||||||
results[k]->IsPureVirtual() == m.IsPureVirtual())
|
results[k]->IsPureVirtual() == m.IsPureVirtual())
|
||||||
@@ -352,7 +352,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
|
#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
|
||||||
if (!exit)
|
if (!exit)
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
@@ -384,9 +384,9 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
|
|||||||
m.GetName(), searchedclasses);
|
m.GetName(), searchedclasses);
|
||||||
|
|
||||||
// get a list of the prototypes with _all_ possible attributes:
|
// 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++)
|
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");
|
wxPrint(warning + "\n");
|
||||||
count++;
|
count++;
|
||||||
@@ -414,7 +414,7 @@ int IfaceCheckApp::CompareClasses(const wxClass* iface, const wxClassPtrArray& a
|
|||||||
|
|
||||||
count++;
|
count++;
|
||||||
|
|
||||||
#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
|
#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@@ -145,6 +145,18 @@ void wxArgumentType::SetDefaultValue(const wxString& defval, const wxString& def
|
|||||||
// to a single form:
|
// to a single form:
|
||||||
if (m_strDefaultValueForCmp == "0u")
|
if (m_strDefaultValueForCmp == "0u")
|
||||||
m_strDefaultValueForCmp = "0";
|
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())
|
if (IsPointer())
|
||||||
m_strDefaultValueForCmp.Replace("0", "NULL");
|
m_strDefaultValueForCmp.Replace("0", "NULL");
|
||||||
@@ -280,14 +292,16 @@ bool wxMethod::operator==(const wxMethod& m) const
|
|||||||
IsStatic() != m.IsStatic() ||
|
IsStatic() != m.IsStatic() ||
|
||||||
IsVirtual() != m.IsVirtual() ||
|
IsVirtual() != m.IsVirtual() ||
|
||||||
IsPureVirtual() != m.IsPureVirtual() ||
|
IsPureVirtual() != m.IsPureVirtual() ||
|
||||||
IsDeprecated() != m.IsDeprecated())
|
IsDeprecated() != m.IsDeprecated() ||
|
||||||
|
GetAccessSpecifier() != m.GetAccessSpecifier())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// check everything else
|
// check everything else
|
||||||
return MatchesExceptForAttributes(m);
|
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;
|
wxString ret;
|
||||||
|
|
||||||
@@ -308,7 +322,7 @@ wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDepre
|
|||||||
if (bWithArgumentNames && !name.IsEmpty())
|
if (bWithArgumentNames && !name.IsEmpty())
|
||||||
ret += " " + name;
|
ret += " " + name;
|
||||||
|
|
||||||
const wxString& def = bClean ?
|
const wxString& def = bCleanDefaultValues ?
|
||||||
m_args[i].GetDefaultCleanValue() : m_args[i].GetDefaultValue();
|
m_args[i].GetDefaultCleanValue() : m_args[i].GetDefaultValue();
|
||||||
if (!def.IsEmpty())
|
if (!def.IsEmpty())
|
||||||
ret += " = " + def;
|
ret += " = " + def;
|
||||||
@@ -332,6 +346,22 @@ wxString wxMethod::GetAsString(bool bWithArgumentNames, bool bClean, bool bDepre
|
|||||||
if (m_bDeprecated && bDeprecated)
|
if (m_bDeprecated && bDeprecated)
|
||||||
ret += " [deprecated]";
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -903,10 +933,10 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
|
|||||||
child = doc.GetRoot()->GetChildren();
|
child = doc.GetRoot()->GetChildren();
|
||||||
while (child)
|
while (child)
|
||||||
{
|
{
|
||||||
wxString n = child->GetName();
|
wxString n = child->GetName(), acc = child->GetAttribute("access");
|
||||||
|
|
||||||
// only register public methods
|
// only register public&protected methods
|
||||||
if (child->GetAttribute("access") == "public" &&
|
if ((acc == "public" || acc == "protected") &&
|
||||||
(n == "Method" || n == "Constructor" || n == "Destructor" || n == "OperatorMethod"))
|
(n == "Method" || n == "Constructor" || n == "Destructor" || n == "OperatorMethod"))
|
||||||
{
|
{
|
||||||
unsigned long id = 0;
|
unsigned long id = 0;
|
||||||
@@ -928,6 +958,8 @@ bool wxXmlGccInterface::Parse(const wxString& filename)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// do some additional check that we can do only here:
|
||||||
|
|
||||||
if (newfunc.IsCtor() && !p->IsValidCtorForThisClass(newfunc)) {
|
if (newfunc.IsCtor() && !p->IsValidCtorForThisClass(newfunc)) {
|
||||||
LogError("The method '%s' does not seem to be a ctor for '%s'",
|
LogError("The method '%s' does not seem to be a ctor for '%s'",
|
||||||
newfunc.GetName(), p->GetName());
|
newfunc.GetName(), p->GetName());
|
||||||
@@ -1036,6 +1068,14 @@ bool wxXmlGccInterface::ParseMethod(const wxXmlNode *p,
|
|||||||
m.SetPureVirtual(p->GetAttribute("pure_virtual") == "1");
|
m.SetPureVirtual(p->GetAttribute("pure_virtual") == "1");
|
||||||
m.SetDeprecated(p->GetAttribute("attributes") == "deprecated");
|
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()) {
|
if (!m.IsOk()) {
|
||||||
LogError("The prototype '%s' is not valid!", m.GetAsString());
|
LogError("The prototype '%s' is not valid!", m.GetAsString());
|
||||||
return false;
|
return false;
|
||||||
@@ -1249,8 +1289,11 @@ bool wxXmlDoxygenInterface::ParseCompoundDefinition(const wxString& filename)
|
|||||||
wxXmlNode *subchild = child->GetChildren();
|
wxXmlNode *subchild = child->GetChildren();
|
||||||
while (subchild)
|
while (subchild)
|
||||||
{
|
{
|
||||||
|
wxString kind = subchild->GetAttribute("kind");
|
||||||
|
|
||||||
|
// parse only public&protected functions:
|
||||||
if (subchild->GetName() == "sectiondef" &&
|
if (subchild->GetName() == "sectiondef" &&
|
||||||
subchild->GetAttribute("kind") == "public-func")
|
(kind == "public-func" || kind == "protected-func"))
|
||||||
{
|
{
|
||||||
|
|
||||||
wxXmlNode *membernode = subchild->GetChildren();
|
wxXmlNode *membernode = subchild->GetChildren();
|
||||||
@@ -1267,6 +1310,13 @@ bool wxXmlDoxygenInterface::ParseCompoundDefinition(const wxString& filename)
|
|||||||
return false;
|
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())
|
if (absoluteFile.IsEmpty())
|
||||||
absoluteFile = header;
|
absoluteFile = header;
|
||||||
else if (header != absoluteFile)
|
else if (header != absoluteFile)
|
||||||
|
@@ -144,6 +144,13 @@ extern wxArgumentType wxEmptyArgumentType;
|
|||||||
WX_DECLARE_OBJARRAY(wxArgumentType, wxArgumentTypeArray);
|
WX_DECLARE_OBJARRAY(wxArgumentType, wxArgumentTypeArray);
|
||||||
|
|
||||||
|
|
||||||
|
enum wxMethodAccessSpecifier
|
||||||
|
{
|
||||||
|
wxMAS_PUBLIC,
|
||||||
|
wxMAS_PROTECTED,
|
||||||
|
wxMAS_PRIVATE
|
||||||
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Represents a single prototype of a class' member.
|
// Represents a single prototype of a class' member.
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -152,7 +159,7 @@ class wxMethod
|
|||||||
public:
|
public:
|
||||||
wxMethod()
|
wxMethod()
|
||||||
{ m_bConst=m_bVirtual=m_bPureVirtual=m_bStatic=m_bDeprecated=false;
|
{ 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,
|
wxMethod(const wxType& rettype, const wxString& name,
|
||||||
const wxArgumentTypeArray& arguments,
|
const wxArgumentTypeArray& arguments,
|
||||||
@@ -165,11 +172,15 @@ public:
|
|||||||
public: // getters
|
public: // getters
|
||||||
|
|
||||||
// bWithArgumentNames = output argument names?
|
// 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?
|
// 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,
|
wxString GetAsString(bool bWithArgumentNames = true,
|
||||||
bool bClean = false,
|
bool bCleanDefaultValues = false,
|
||||||
bool bDeprecated = false) const;
|
bool bDeprecated = false,
|
||||||
|
bool bAccessSpec = false) const;
|
||||||
|
|
||||||
// parser of the prototype:
|
// parser of the prototype:
|
||||||
// all these functions return strings with spaces stripped
|
// all these functions return strings with spaces stripped
|
||||||
@@ -183,6 +194,8 @@ public: // getters
|
|||||||
{ return m_nLine; }
|
{ return m_nLine; }
|
||||||
int GetAvailability() const
|
int GetAvailability() const
|
||||||
{ return m_nAvailability; }
|
{ return m_nAvailability; }
|
||||||
|
wxMethodAccessSpecifier GetAccessSpecifier() const
|
||||||
|
{ return m_access; }
|
||||||
|
|
||||||
bool IsConst() const
|
bool IsConst() const
|
||||||
{ return m_bConst; }
|
{ return m_bConst; }
|
||||||
@@ -228,6 +241,8 @@ public: // setters
|
|||||||
{ m_nLine=lineNumber; }
|
{ m_nLine=lineNumber; }
|
||||||
void SetAvailability(int nAvail)
|
void SetAvailability(int nAvail)
|
||||||
{ m_nAvailability=nAvail; }
|
{ m_nAvailability=nAvail; }
|
||||||
|
void SetAccessSpecifier(wxMethodAccessSpecifier spec)
|
||||||
|
{ m_access=spec; }
|
||||||
|
|
||||||
public: // misc
|
public: // misc
|
||||||
|
|
||||||
@@ -264,6 +279,9 @@ protected:
|
|||||||
// NOTE: this is not used for comparing wxMethod objects
|
// NOTE: this is not used for comparing wxMethod objects
|
||||||
// (gccXML never gives this kind of info).
|
// (gccXML never gives this kind of info).
|
||||||
int m_nAvailability;
|
int m_nAvailability;
|
||||||
|
|
||||||
|
// the access specifier for this method
|
||||||
|
wxMethodAccessSpecifier m_access;
|
||||||
};
|
};
|
||||||
|
|
||||||
WX_DECLARE_OBJARRAY(wxMethod, wxMethodArray);
|
WX_DECLARE_OBJARRAY(wxMethod, wxMethodArray);
|
||||||
|
Reference in New Issue
Block a user