Skip to content

Commit f9df8a6

Browse files
committed
Swift: fix potential name conflict on schema class fields
1 parent 8813aea commit f9df8a6

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

swift/codegen/lib/schema/defs.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,10 @@ def modify(self, prop: _schema.Property):
4646

4747
def __call__(self, cls: type) -> type:
4848
""" use this pragma as a decorator on classes """
49-
if "pragmas" in cls.__dict__: # not using hasattr as we don't want to land on inherited pragmas
50-
cls.pragmas.append(self.pragma)
49+
if "_pragmas" in cls.__dict__: # not using hasattr as we don't want to land on inherited pragmas
50+
cls._pragmas.append(self.pragma)
5151
else:
52-
cls.pragmas = [self.pragma]
53-
return cls
54-
55-
56-
@_dataclass
57-
class _DefaultDocNameClassModifier:
58-
doc_name: str
59-
60-
def __call__(self, cls: type) -> type:
61-
cls._doc_name = self.doc_name
52+
cls._pragmas = [self.pragma]
6253
return cls
6354

6455

@@ -106,7 +97,7 @@ def __init__(self, **kwargs):
10697
def _annotate(**kwargs) -> _ClassDecorator:
10798
def f(cls: type) -> type:
10899
for k, v in kwargs.items():
109-
setattr(cls, k, v)
100+
setattr(cls, f"_{k}", v)
110101
return cls
111102

112103
return f
@@ -131,7 +122,7 @@ def f(cls: type) -> type:
131122
)
132123

133124
ql = _Namespace(
134-
default_doc_name=_DefaultDocNameClassModifier,
125+
default_doc_name=lambda doc: _annotate(doc_name=doc)
135126
)
136127

137128
cpp = _Namespace(

swift/codegen/lib/schema/schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,16 @@ def _get_class(cls: type) -> Class:
193193
raise Error(f"Only class definitions allowed in schema, found {cls}")
194194
if cls.__name__[0].islower():
195195
raise Error(f"Class name must be capitalized, found {cls.__name__}")
196-
if len({b.group for b in cls.__bases__ if hasattr(b, "group")}) > 1:
196+
if len({b._group for b in cls.__bases__ if hasattr(b, "_group")}) > 1:
197197
raise Error(f"Bases with mixed groups for {cls.__name__}")
198198
return Class(name=cls.__name__,
199199
bases=[b.__name__ for b in cls.__bases__ if b is not object],
200200
derived={d.__name__ for d in cls.__subclasses__()},
201201
# getattr to inherit from bases
202-
group=getattr(cls, "group", ""),
202+
group=getattr(cls, "_group", ""),
203203
# in the following we don't use `getattr` to avoid inheriting
204-
pragmas=cls.__dict__.get("pragmas", []),
205-
ipa=cls.__dict__.get("ipa", None),
204+
pragmas=cls.__dict__.get("_pragmas", []),
205+
ipa=cls.__dict__.get("_ipa", None),
206206
properties=[
207207
a | _PropertyNamer(n)
208208
for n, a in cls.__dict__.get("__annotations__", {}).items()

0 commit comments

Comments
 (0)