// 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:
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())
#endif
}
-#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
+#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
if (!exit)
{
#endif
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++;
count++;
-#if HACK_TO_AUTO_CORRECT_ONLY_VIRTUAL_AND_CONST_ATTRIBUTES
+#if HACK_TO_AUTO_CORRECT_ONLY_METHOD_ATTRIBUTES
}
#endif
}
// 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");
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;
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;
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;
}
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;
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());
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;
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();
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)
WX_DECLARE_OBJARRAY(wxArgumentType, wxArgumentTypeArray);
+enum wxMethodAccessSpecifier
+{
+ wxMAS_PUBLIC,
+ wxMAS_PROTECTED,
+ wxMAS_PRIVATE
+};
+
// ----------------------------------------------------------------------------
// Represents a single prototype of a class' member.
// ----------------------------------------------------------------------------
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,
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
{ return m_nLine; }
int GetAvailability() const
{ return m_nAvailability; }
+ wxMethodAccessSpecifier GetAccessSpecifier() const
+ { return m_access; }
bool IsConst() const
{ return m_bConst; }
{ m_nLine=lineNumber; }
void SetAvailability(int nAvail)
{ m_nAvailability=nAvail; }
+ void SetAccessSpecifier(wxMethodAccessSpecifier spec)
+ { m_access=spec; }
public: // misc
// 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);