File: PHPSetterGetterEntry.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 136,244 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (122 lines) | stat: -rw-r--r-- 3,496 bytes parent folder | download | duplicates (5)
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;
    }
}