Commit 8389c41f authored by Dimitri van Heesch's avatar Dimitri van Heesch

Merge pull request #193 from codemaximus/csprops

Added support for C# property accessors visibility modifiers
parents 070c3554 54ac45bd
......@@ -2766,7 +2766,11 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
addProperty("isExplicit", this,&Private::isExplicit);
addProperty("isMutable", this,&Private::isMutable);
addProperty("isGettable", this,&Private::isGettable);
addProperty("isPrivateGettable", this,&Private::isPrivateGettable);
addProperty("isProtectedGettable", this,&Private::isProtectedGettable);
addProperty("isSettable", this,&Private::isSettable);
addProperty("isPrivateSettable", this,&Private::isPrivateSettable);
addProperty("isProtectedSettable", this,&Private::isProtectedSettable);
addProperty("isReadable", this,&Private::isReadable);
addProperty("isWritable", this,&Private::isWritable);
addProperty("isAddable", this,&Private::isAddable);
......@@ -2855,8 +2859,12 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
m_cache.propertyAttrs.reset(TemplateList::alloc());
if (md && md->isProperty())
{
if (md->isGettable()) m_cache.propertyAttrs->append("get");
if (md->isSettable()) m_cache.propertyAttrs->append("set");
if (md->isGettable()) m_cache.propertyAttrs->append("get");
if (md->isPrivateGettable()) m_cache.propertyAttrs->append("private get");
if (md->isProtectedGettable()) m_cache.propertyAttrs->append("protected get");
if (md->isSettable()) m_cache.propertyAttrs->append("set");
if (md->isPrivateSettable()) m_cache.propertyAttrs->append("private set");
if (md->isProtectedSettable()) m_cache.propertyAttrs->append("protected set");
}
m_cache.eventAttrs.reset(TemplateList::alloc());
if (md && md->isEvent())
......@@ -2948,12 +2956,28 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant isGettable() const
{
return m_memberDef->isSettable();
return m_memberDef->isGettable();
}
TemplateVariant isPrivateGettable() const
{
return m_memberDef->isPrivateGettable();
}
TemplateVariant isProtectedGettable() const
{
return m_memberDef->isProtectedGettable();
}
TemplateVariant isSettable() const
{
return m_memberDef->isSettable();
}
TemplateVariant isPrivateSettable() const
{
return m_memberDef->isPrivateSettable();
}
TemplateVariant isProtectedSettable() const
{
return m_memberDef->isProtectedSettable();
}
TemplateVariant isReadable() const
{
return m_memberDef->isReadable();
......
......@@ -135,6 +135,10 @@ class Entry
static const uint64 Singleton = (1ULL<<14); // UNO IDL
// member specifiers (add new items to the beginning)
static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
static const uint64 ProtectedGettable = (1ULL<<21); // C# protected getter
static const uint64 PrivateSettable = (1ULL<<22); // C# private setter
static const uint64 ProtectedSettable = (1ULL<<23); // C# protected setter
static const uint64 Inline = (1ULL<<24);
static const uint64 Explicit = (1ULL<<25);
static const uint64 Mutable = (1ULL<<26);
......
......@@ -1729,15 +1729,27 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.docify(" [implementation]");
ol.endTypewriter();
}
bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
if (isProperty() && (isSettable() || isGettable()))
if (isProperty() && (isSettable() || isGettable() ||
isPrivateSettable() || isPrivateGettable() ||
isProtectedSettable() || isProtectedGettable()))
{
ol.writeLatexSpacing();
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
if (isGettable()) sl.append("get");
if (isSettable()) sl.append("set");
if (isGettable()) sl.append("get");
if (isProtectedGettable()) sl.append("protected get");
if (isSettable()) sl.append("set");
if (isProtectedSettable()) sl.append("protected set");
if (extractPrivate)
{
if (isPrivateGettable()) sl.append("private get");
if (isPrivateSettable()) sl.append("private set");
}
const char *s=sl.first();
while (s)
{
......@@ -1940,6 +1952,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
//ol.docify(" [");
SrcLangExt lang = getLanguage();
bool optVhdl = lang==SrcLangExt_VHDL;
bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
if (optVhdl)
{
sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers()));
......@@ -1955,7 +1968,14 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
if (isMutable()) sl.append("mutable");
if (isStatic()) sl.append("static");
if (isGettable()) sl.append("get");
if (isProtectedGettable()) sl.append("protected get");
if (isSettable()) sl.append("set");
if (isProtectedSettable()) sl.append("protected set");
if (extractPrivate)
{
if (isPrivateGettable()) sl.append("private get");
if (isPrivateSettable()) sl.append("private set");
}
if (isAddable()) sl.append("add");
if (!isUNOProperty() && isRemovable()) sl.append("remove");
if (isRaisable()) sl.append("raise");
......@@ -4193,11 +4213,31 @@ bool MemberDef::isGettable() const
return (m_impl->memSpec&Entry::Gettable)!=0;
}
bool MemberDef::isPrivateGettable() const
{
return (m_impl->memSpec&Entry::PrivateGettable)!=0;
}
bool MemberDef::isProtectedGettable() const
{
return (m_impl->memSpec&Entry::ProtectedGettable)!=0;
}
bool MemberDef::isSettable() const
{
return (m_impl->memSpec&Entry::Settable)!=0;
}
bool MemberDef::isPrivateSettable() const
{
return (m_impl->memSpec&Entry::PrivateSettable)!=0;
}
bool MemberDef::isProtectedSettable() const
{
return (m_impl->memSpec&Entry::ProtectedSettable)!=0;
}
bool MemberDef::isAddable() const
{
return (m_impl->memSpec&Entry::Addable)!=0;
......
......@@ -123,7 +123,11 @@ class MemberDef : public Definition
bool isExplicit() const;
bool isMutable() const;
bool isGettable() const;
bool isPrivateGettable() const;
bool isProtectedGettable() const;
bool isSettable() const;
bool isPrivateSettable() const;
bool isProtectedSettable() const;
bool isReadable() const;
bool isWritable() const;
bool isAddable() const;
......
......@@ -6129,6 +6129,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FindMembers);
}
}
<CSAccessorDecl>"private "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::PrivateSettable; }
<CSAccessorDecl>"protected "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::ProtectedSettable; }
<CSAccessorDecl>"private "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::PrivateGettable; }
<CSAccessorDecl>"protected "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::ProtectedGettable; }
<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
......
......@@ -727,10 +727,26 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (md->isGettable()) t << "yes"; else t << "no";
t << "\"";
t << " privategettable=\"";
if (md->isPrivateGettable()) t << "yes"; else t << "no";
t << "\"";
t << " protectedgettable=\"";
if (md->isProtectedGettable()) t << "yes"; else t << "no";
t << "\"";
t << " settable=\"";
if (md->isSettable()) t << "yes"; else t << "no";
t << "\"";
t << " privatesettable=\"";
if (md->isPrivateSettable()) t << "yes"; else t << "no";
t << "\"";
t << " protectedsettable=\"";
if (md->isProtectedSettable()) t << "yes"; else t << "no";
t << "\"";
if (md->isAssign() || md->isCopy() || md->isRetain() || md->isStrong() || md->isWeak())
{
t << " accessor=\"";
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment