blob: 7e39ae98b686d8a1289e5fd0b390c2eae03ad9ed [file] [log] [blame]
Dusan Klinecccaa0d92014-11-09 03:21:31 +01001__author__ = "Dusan (Ph4r05) Klinec"
2__copyright__ = "Copyright (C) 2014 Dusan (ph4r05) Klinec"
3__license__ = "Apache License, Version 2.0"
4__version__ = "1.0"
5
6# Base node
7class SourceElement(object):
8 '''
9 A SourceElement is the base class for all elements that occur in a Java
10 file parsed by plyj.
11 '''
12 def __init__(self):
13 super(SourceElement, self).__init__()
14 self._fields = []
15
16 def __repr__(self):
17 equals = ("{0}={1!r}".format(k, getattr(self, k))
18 for k in self._fields)
19 args = ", ".join(equals)
20 return "{0}({1})".format(self.__class__.__name__, args)
21
22 def __eq__(self, other):
23 try:
24 return self.__dict__ == other.__dict__
25 except AttributeError:
26 return False
27
28 def __ne__(self, other):
29 return not self == other
30
31 def accept(self, visitor):
32 pass
33
34class PackageDeclaration(SourceElement):
35 def __init__(self, name):
36 super(PackageDeclaration, self).__init__()
37 self._fields = ['name']
38 self.name = name
39
40 def accept(self, visitor):
41 visitor.visit_PackageDeclaration(self)
42
43class ImportStatement(SourceElement):
44 def __init__(self, name):
45 super(ImportStatement, self).__init__()
46 self._fields = ['name']
47 self.name = name
48
49 def accept(self, visitor):
50 visitor.visit_ImportStatement(self)
51
52class OptionDefinition(SourceElement):
53 def __init__(self, name, value):
54 super(OptionDefinition, self).__init__()
55 self._fields = ['name', 'value']
56 self.name = name
57 self.value = value
58
59 def accept(self, visitor):
60 visitor.visit_OptionDefinition(self)
61
62class FieldDirectiveDeclaration(SourceElement):
63 def __init__(self, name, value):
64 super(FieldDirectiveDeclaration, self).__init__()
65 self._fields = ['name', 'value']
66 self.name = name
67 self.value = value
68
69 def accept(self, visitor):
70 visitor.visit_FieldDirectiveDeclaration(self)
71
72class FieldPrimitiveType(SourceElement):
73 def __init__(self, name):
74 super(FieldPrimitiveType, self).__init__()
75 self._fields = ['name']
76 self.name = name
77
78 def accept(self, visitor):
79 visitor.visit_FieldPrimitiveType(self)
80
81class FieldDeclaration(SourceElement):
82 def __init__(self, field_modifier, ftype, name, fieldId, fieldDirective):
83 super(FieldDeclaration, self).__init__()
84 self._fields = ['field_modifier', 'ftype', 'name', 'fieldId', 'fieldDirective']
85 self.name = name
86 self.field_modifier = field_modifier
87 self.ftype = ftype
88 self.fieldId = fieldId
89 self.fieldDirective = fieldDirective
90
91 def accept(self, visitor):
92 visitor.visit_FieldDeclaration(self)
93
94class EnumFieldDeclaration(SourceElement):
95 def __init__(self, name, fieldId):
96 super(EnumFieldDeclaration, self).__init__()
97 self._fields = ['name', 'fieldId']
98 self.name = name
99 self.fieldId = fieldId
100
101 def accept(self, visitor):
102 visitor.visit_EnumFieldDeclaration(self)
103
104class EnumDeclaration(SourceElement):
105 def __init__(self, name, body):
106 super(EnumDeclaration, self).__init__()
107 self._fields = ['name', 'body']
108 self.name = name
109 self.body = body
110
111 def accept(self, visitor):
112 if visitor.visit_EnumDeclaration(self):
113 for s in self.body:
114 s.accept(visitor)
115
116class MessageDeclaration(SourceElement):
117 def __init__(self, name, body):
118 super(MessageDeclaration, self).__init__()
119 self._fields = ['name', 'body']
120 self.name = name
121 self.body = body
122
123 def accept(self, visitor):
124 if visitor.visit_MessageDeclaration(self):
125 for s in self.body:
126 s.accept(visitor)
127
128class MessageExtension(SourceElement):
129 def __init__(self, name, body):
130 super(MessageExtension, self).__init__()
131 self._fields = ['name', 'body']
132 self.name = name
133 self.body = body
134
135 def accept(self, visitor):
136 if visitor.visit_MessageExtension(self):
137 for s in self.body:
138 s.accept(visitor)
139
140class MethodDefinition(SourceElement):
141 def __init__(self, name, name2, name3):
142 super(MethodDefinition, self).__init__()
143 self._fields = ['name', 'name2', 'name3']
144 self.name = name
145 self.name2 = name2
146 self.name3 = name3
147
148 def accept(self, visitor):
149 visitor.visit_MethodDefinition(self)
150
151class ServiceDeclaration(SourceElement):
152 def __init__(self, name, body):
153 super(ServiceDeclaration, self).__init__()
154 self._fields = ['name', 'body']
155 self.name = name
156 self.body = body
157
158 def accept(self, visitor):
159 if visitor.visit_ServiceDeclaration(self):
160 for s in self.body:
161 s.accept(visitor)
162
163class ExtensionsMax(SourceElement):
164 pass
165
166class ExtensionsDirective(SourceElement):
167 def __init__(self, fromVal, toVal):
168 super(ExtensionsDirective, self).__init__()
169 self._fields = ['fromVal', 'toVal']
170 self.fromVal = fromVal
171 self.toVal = toVal
172
173 def accept(self, visitor):
174 visitor.visit_ExtensionsDirective(self)
175
176class Literal(SourceElement):
177
178 def __init__(self, value):
179 super(Literal, self).__init__()
180 self._fields = ['value']
181 self.value = value
182
183 def accept(self, visitor):
184 visitor.visit_Literal(self)
185
186class Name(SourceElement):
187
188 def __init__(self, value):
189 super(Name, self).__init__()
190 self._fields = ['value']
191 self.value = value
192
193 def append_name(self, name):
194 try:
195 self.value = self.value + '.' + name.value
196 except:
197 self.value = self.value + '.' + name
198
199 def accept(self, visitor):
200 visitor.visit_Name(self)
201
202
203class Visitor(object):
204
205 def __init__(self, verbose=False):
206 self.verbose = verbose
207
208 def __getattr__(self, name):
209 if not name.startswith('visit_'):
210 raise AttributeError('name must start with visit_ but was {}'
211 .format(name))
212
213 def f(element):
214 if self.verbose:
215 msg = 'unimplemented call to {}; ignoring ({})'
216 print(msg.format(name, element))
217 return True
218 return f