1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
#include "PHPSetterGetterEntry.h"
#include <wx/tokenzr.h>
#include "PHPEntityVariable.h"
PHPSetterGetterEntry::PHPSetterGetterEntry() {}
PHPSetterGetterEntry::PHPSetterGetterEntry(PHPEntityBase::Ptr_t entry)
: m_entry(entry)
{
}
PHPSetterGetterEntry::~PHPSetterGetterEntry() {}
wxString PHPSetterGetterEntry::GetGetter(size_t flags) const
{
wxString nameNoDollar = m_entry->Cast<PHPEntityVariable>()->GetNameNoDollar();
wxString nameWithDollar = m_entry->GetShortName();
wxString prefix;
if(!(flags & kSG_NoPrefix)) {
prefix = (flags & kSG_StartWithLowercase) ? "get" : "Get";
if(m_entry->Cast<PHPEntityVariable>()->IsBoolean()) {
// A boolean member, use "is" as the prefix for the getter
prefix = (flags & kSG_StartWithLowercase) ? "is" : "Is";
}
}
// Remove user prefixes
wxString functionName = nameNoDollar;
FormatName(functionName, flags);
functionName.Prepend(prefix);
if(flags & kSG_NameOnly) {
return functionName;
}
wxString body;
body << "\n"
<< " /**\n"
<< " * @return " << m_entry->Cast<PHPEntityVariable>()->GetTypeHint() << "\n"
<< " */\n"
<< " public function " << functionName << "()\n"
<< " {\n"
<< " return $this->" << nameNoDollar << ";\n"
<< " }";
return body;
}
wxString PHPSetterGetterEntry::GetSetter(const wxString& scope, size_t flags) const
{
wxString nameNoDollar = m_entry->Cast<PHPEntityVariable>()->GetNameNoDollar();
wxString nameWithDollar = m_entry->GetShortName();
// Remove user prefixes
wxString functionName = nameNoDollar;
FormatName(functionName, flags);
wxString prefix;
prefix = (flags & kSG_StartWithLowercase) ? "set" : "Set";
functionName.Prepend(prefix);
if(flags & kSG_NameOnly) {
return functionName;
}
wxString body;
body << "\n"
<< " /**\n"
<< " * @param " << m_entry->Cast<PHPEntityVariable>()->GetTypeHint() << " " << m_entry->GetShortName()
<< "\n";
if(flags & kSG_ReturnThis) {
body << " *\n";
body << " * @return " << scope << "\n";
}
body << " */\n"
<< " public function " << functionName << "(" << nameWithDollar << ")\n"
<< " {\n"
<< " $this->" << nameNoDollar << " = " << nameWithDollar << ";\n";
if(flags & kSG_ReturnThis) {
body << "\n"
<< " return $this;\n";
}
body << " }";
return body;
}
void PHPSetterGetterEntry::FormatName(wxString& name, size_t flags) const
{
if(name.StartsWith(wxT("m_"))) {
name = name.Mid(2);
} else if(name.StartsWith(wxT("_"))) {
name = name.Mid(1);
}
bool startWithUppercase = !(flags & kSG_StartWithLowercase);
bool usingPrefix = !(flags & kSG_NoPrefix);
wxStringTokenizer tkz(name, wxT("_"));
name.Clear();
size_t count = 0;
while(tkz.HasMoreTokens()) {
wxString token = tkz.NextToken();
wxString pre = token.Mid(0, 1);
token.Remove(0, 1);
if(usingPrefix) {
pre.MakeUpper();
} else {
// No prefix
if(startWithUppercase && count == 0) {
pre.MakeUpper();
} else if(count) {
pre.MakeUpper();
}
}
token.Prepend(pre);
name << token;
++count;
}
}
|