doxygen
memberdef.h
1 /******************************************************************************
2  *
3  *
4  *
5  * Copyright (C) 1997-2015 by Dimitri van Heesch.
6  *
7  * Permission to use, copy, modify, and distribute this software and its
8  * documentation under the terms of the GNU General Public License is hereby
9  * granted. No representations are made about the suitability of this software
10  * for any purpose. It is provided "as is" without express or implied warranty.
11  * See the GNU General Public License for more details.
12  *
13  * Documents produced by Doxygen are derivative works derived from the
14  * input used in their production; they are not affected by this license.
15  *
16  */
17 
18 #ifndef MEMBERDEF_H
19 #define MEMBERDEF_H
20 
21 #include <vector>
22 #include <memory>
23 
24 #include <sys/types.h>
25 
26 #include "types.h"
27 #include "definition.h"
28 #include "arguments.h"
29 #include "classdef.h"
30 
31 class NamespaceDef;
32 class GroupDef;
33 class FileDef;
34 class MemberList;
35 class MemberGroup;
36 class ExampleList;
37 class OutputList;
38 class GroupDef;
39 struct TagInfo;
40 class MemberDefMutable;
41 class MemberGroupList;
42 class MemberVector;
43 
45 class MemberDef : public Definition
46 {
47  public:
48  virtual ~MemberDef() {}
49  virtual DefType definitionType() const = 0;
50  // move this member into a different scope
51  virtual MemberDef *deepCopy() const =0;
52  virtual void moveTo(Definition *) = 0;
53 
54  virtual MemberDef *resolveAlias() = 0;
55  virtual const MemberDef *resolveAlias() const = 0;
56 
57  ClassDefMutable *getClassDefMutable() const;
58 
59  //-----------------------------------------------------------------------------------
60  // ---- getters -----
61  //-----------------------------------------------------------------------------------
62 
63  // link id
64  virtual QCString getOutputFileBase() const = 0;
65  virtual QCString getReference() const = 0;
66  virtual QCString anchor() const = 0;
67 
68  virtual QCString declaration() const = 0;
69  virtual QCString definition() const = 0;
70  virtual QCString typeString() const = 0;
71  virtual QCString argsString() const = 0;
72  virtual QCString excpString() const = 0;
73  virtual QCString bitfieldString() const = 0;
74  virtual QCString extraTypeChars() const = 0;
75  virtual const QCString &initializer() const = 0;
76  virtual int initializerLines() const = 0;
77  virtual uint64 getMemberSpecifiers() const = 0;
78  virtual const MemberList *getSectionList(const Definition *container) const = 0;
79  virtual QCString displayDefinition() const = 0;
80 
81  // scope query members
82  virtual const FileDef *getFileDef() const = 0;
83  virtual const ClassDef *getClassDef() const = 0;
84  virtual const NamespaceDef* getNamespaceDef() const = 0;
85  virtual const ClassDef *accessorClass() const = 0;
86 
87  // grabbing the property read/write accessor names
88  virtual QCString getReadAccessor() const = 0;
89  virtual QCString getWriteAccessor() const = 0;
90 
91  // querying the grouping definition
92  virtual const GroupDef *getGroupDef() const = 0;
93  virtual Grouping::GroupPri_t getGroupPri() const = 0;
94  virtual QCString getGroupFileName() const = 0;
95  virtual int getGroupStartLine() const = 0;
96  virtual bool getGroupHasDocs() const = 0;
97 
98  virtual QCString qualifiedName() const = 0;
99  virtual QCString objCMethodName(bool localLink,bool showStatic) const = 0;
100 
101  // direct kind info
102  virtual Protection protection() const = 0;
103  virtual Specifier virtualness(int count=0) const = 0;
104  virtual MemberType memberType() const = 0;
105  virtual QCString memberTypeName() const = 0;
106 
107  // getter methods
108  virtual bool isSignal() const = 0;
109  virtual bool isSlot() const = 0;
110  virtual bool isVariable() const = 0;
111  virtual bool isEnumerate() const = 0;
112  virtual bool isEnumValue() const = 0;
113  virtual bool isTypedef() const = 0;
114  virtual bool isSequence() const = 0;
115  virtual bool isDictionary() const = 0;
116  virtual bool isFunction() const = 0;
117  virtual bool isFunctionPtr() const = 0;
118  virtual bool isDefine() const = 0;
119  virtual bool isFriend() const = 0;
120  virtual bool isDCOP() const = 0;
121  virtual bool isProperty() const = 0;
122  virtual bool isEvent() const = 0;
123  virtual bool isRelated() const = 0;
124  virtual bool isForeign() const = 0;
125  virtual bool isStatic() const = 0;
126  virtual bool isInline() const = 0;
127  virtual bool isExplicit() const = 0;
128  virtual bool isMutable() const = 0;
129  virtual bool isGettable() const = 0;
130  virtual bool isPrivateGettable() const = 0;
131  virtual bool isProtectedGettable() const = 0;
132  virtual bool isSettable() const = 0;
133  virtual bool isPrivateSettable() const = 0;
134  virtual bool isProtectedSettable() const = 0;
135  virtual bool isReadable() const = 0;
136  virtual bool isWritable() const = 0;
137  virtual bool isAddable() const = 0;
138  virtual bool isRemovable() const = 0;
139  virtual bool isRaisable() const = 0;
140  virtual bool isFinal() const = 0;
141  virtual bool isAbstract() const = 0;
142  virtual bool isOverride() const = 0;
143  virtual bool isInitonly() const = 0;
144  virtual bool isOptional() const = 0;
145  virtual bool isRequired() const = 0;
146  virtual bool isNonAtomic() const = 0;
147  virtual bool isCopy() const = 0;
148  virtual bool isAssign() const = 0;
149  virtual bool isRetain() const = 0;
150  virtual bool isWeak() const = 0;
151  virtual bool isStrong() const = 0;
152  virtual bool isEnumStruct() const = 0;
153  virtual bool isUnretained() const = 0;
154  virtual bool isNew() const = 0;
155  virtual bool isSealed() const = 0;
156  virtual bool isImplementation() const = 0;
157  virtual bool isExternal() const = 0;
158  virtual bool isTypeAlias() const = 0;
159  virtual bool isDefault() const = 0;
160  virtual bool isDelete() const = 0;
161  virtual bool isNoExcept() const = 0;
162  virtual bool isAttribute() const = 0; // UNO IDL attribute
163  virtual bool isUNOProperty() const = 0; // UNO IDL property
164  virtual bool isReadonly() const = 0;
165  virtual bool isBound() const = 0;
166  virtual bool isConstrained() const = 0;
167  virtual bool isTransient() const = 0;
168  virtual bool isMaybeVoid() const = 0;
169  virtual bool isMaybeDefault() const = 0;
170  virtual bool isMaybeAmbiguous() const = 0;
171  virtual bool isPublished() const = 0; // UNO IDL published
172  virtual bool isTemplateSpecialization() const = 0;
173  virtual bool isObjCMethod() const = 0;
174  virtual bool isObjCProperty() const = 0;
175  virtual bool isConstructor() const = 0;
176  virtual bool isDestructor() const = 0;
177  virtual bool hasOneLineInitializer() const = 0;
178  virtual bool hasMultiLineInitializer() const = 0;
179  virtual bool showInCallGraph() const = 0;
180  virtual bool isStrongEnumValue() const = 0;
181  virtual bool livesInsideEnum() const = 0;
182  virtual bool isSliceLocal() const = 0;
183  virtual bool isConstExpr() const = 0;
184  virtual int numberOfFlowKeyWords() const = 0;
185 
186  // derived getters
187  virtual bool isFriendToHide() const = 0;
188  virtual bool isNotFriend() const = 0;
189  virtual bool isFunctionOrSignalSlot() const = 0;
190  virtual bool isRelatedOrFriend() const = 0;
191 
192  // output info
193  virtual bool isLinkableInProject() const = 0;
194  virtual bool isLinkable() const = 0;
195  virtual bool hasDocumentation() const = 0; // overrides hasDocumentation in definition.h
196  //bool hasUserDocumentation() const = 0; // overrides hasUserDocumentation
197  virtual bool isDeleted() const = 0;
198  virtual bool isBriefSectionVisible() const = 0;
199  virtual bool isDetailedSectionVisible(MemberListContainer container) const = 0;
200  virtual bool hasDetailedDescription() const = 0;
201  virtual bool isFriendClass() const = 0;
202  virtual bool isDocumentedFriendClass() const = 0;
203 
204  virtual const MemberDef *reimplements() const = 0;
205  virtual const MemberVector &reimplementedBy() const = 0;
206  virtual bool isReimplementedBy(const ClassDef *cd) const = 0;
207 
208  virtual ClassDef *relatedAlso() const = 0;
209 
210  virtual bool hasDocumentedEnumValues() const = 0;
211  virtual const MemberDef *getAnonymousEnumType() const = 0;
212  virtual bool isDocsForDefinition() const = 0;
213  virtual const MemberDef *getEnumScope() const = 0;
214  virtual const MemberVector &enumFieldList() const = 0;
215  virtual QCString enumBaseType() const = 0;
216 
217  virtual bool hasExamples() const = 0;
218  virtual const ExampleList &getExamples() const = 0;
219  virtual bool isPrototype() const = 0;
220 
221  // argument related members
222  virtual const ArgumentList &argumentList() const = 0;
223  virtual const ArgumentList &declArgumentList() const = 0;
224  virtual const ArgumentList &templateArguments() const = 0;
225  virtual const ArgumentLists &definitionTemplateParameterLists() const = 0;
226 
227  // member group related members
228  virtual int getMemberGroupId() const = 0;
229  virtual MemberGroup *getMemberGroup() const = 0;
230 
231  virtual bool fromAnonymousScope() const = 0;
232  virtual bool anonymousDeclShown() const = 0;
233  virtual MemberDef *fromAnonymousMember() const = 0;
234 
235  // callgraph related members
236  virtual bool hasCallGraph() const = 0;
237  virtual bool hasCallerGraph() const = 0;
238  virtual bool visibleMemberGroup(bool hideNoHeader) const = 0;
239  // referenced related members
240  virtual bool hasReferencesRelation() const = 0;
241  virtual bool hasReferencedByRelation() const = 0;
242 
243  virtual const MemberDef *templateMaster() const = 0;
244  virtual QCString getScopeString() const = 0;
245  virtual ClassDef *getClassDefOfAnonymousType() const = 0;
246 
247  // cached typedef functions
248  virtual bool isTypedefValCached() const = 0;
249  virtual const ClassDef *getCachedTypedefVal() const = 0;
250  virtual QCString getCachedTypedefTemplSpec() const = 0;
251  virtual QCString getCachedResolvedTypedef() const = 0;
252 
253  virtual MemberDef *memberDefinition() const = 0;
254  virtual MemberDef *memberDeclaration() const = 0;
255  virtual const MemberDef *inheritsDocsFrom() const = 0;
256  virtual const MemberDef *getGroupAlias() const = 0;
257 
258  virtual ClassDef *category() const = 0;
259  virtual const MemberDef *categoryRelation() const = 0;
260 
261  virtual QCString displayName(bool=TRUE) const = 0;
262  virtual QCString getDeclType() const = 0;
263  virtual StringVector getLabels(const Definition *container) const = 0;
264 
265  virtual const ArgumentList &typeConstraints() const = 0;
266 
267  virtual QCString requiresClause() const = 0;
268 
269  // overrules
270  virtual QCString documentation() const = 0;
271  virtual QCString briefDescription(bool abbr=FALSE) const = 0;
272  virtual QCString fieldType() const = 0;
273  virtual bool isReference() const = 0;
274 
275  virtual QCString getDeclFileName() const = 0;
276  virtual int getDeclLine() const = 0;
277  virtual int getDeclColumn() const = 0;
278 
279  virtual MemberDefMutable *createTemplateInstanceMember(const ArgumentList &formalArgs,
280  const std::unique_ptr<ArgumentList> &actualArgs) const = 0;
281  virtual void writeDeclaration(OutputList &ol,
282  const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,
283  bool inGroup, int indentLevel=0, const ClassDef *inheritFrom=0,const QCString &inheritId=QCString()) const = 0;
284  virtual void writeEnumDeclaration(OutputList &typeDecl, const ClassDef *cd,
285  const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd) const = 0;
286  virtual void detectUndocumentedParams(bool hasParamCommand,bool hasReturnCommand) const = 0;
287  virtual void warnIfUndocumented() const = 0;
288  virtual void warnIfUndocumentedParams() const = 0;
289  virtual bool visibleInIndex() const = 0;
290 
291  // TODO: this is not a getter, should be passed at construction
292  virtual void setMemberGroup(MemberGroup *grp) = 0;
293 
294 };
295 
297 {
298  public:
299 
300  //-----------------------------------------------------------------------------------
301  // ---- setters -----
302  //-----------------------------------------------------------------------------------
303 
304  // set functions
305  virtual void setMemberType(MemberType t) = 0;
306  virtual void setDefinition(const QCString &d) = 0;
307  virtual void setFileDef(const FileDef *fd) = 0;
308  virtual void setAnchor() = 0;
309  virtual void setProtection(Protection p) = 0;
310  virtual void setMemberSpecifiers(uint64 s) = 0;
311  virtual void mergeMemberSpecifiers(uint64 s) = 0;
312  virtual void setInitializer(const QCString &i) = 0;
313  virtual void setBitfields(const QCString &s) = 0;
314  virtual void setMaxInitLines(int lines) = 0;
315  virtual void setMemberClass(const ClassDef *cd) = 0;
316  virtual void setSectionList(const Definition *container,const MemberList *sl) = 0;
317  virtual void setGroupDef(const GroupDef *gd,Grouping::GroupPri_t pri,
318  const QCString &fileName,int startLine,bool hasDocs,
319  MemberDef *member=0) = 0;
320  virtual void setReadAccessor(const QCString &r) = 0;
321  virtual void setWriteAccessor(const QCString &w) = 0;
322  virtual void setTemplateSpecialization(bool b) = 0;
323 
324  virtual void makeRelated() = 0;
325  virtual void makeForeign() = 0;
326  virtual void setInheritsDocsFrom(const MemberDef *md) = 0;
327  virtual void setTagInfo(const TagInfo *i) = 0;
328  virtual void setArgsString(const QCString &as) = 0;
329  virtual void incrementFlowKeyWordCount() = 0;
330  virtual void setEnumBaseType(const QCString &type) = 0;
331 
332  // relation to other members
333  virtual void setReimplements(const MemberDef *md) = 0;
334  virtual void insertReimplementedBy(const MemberDef *md) = 0;
335 
336  virtual void setRelatedAlso(ClassDef *cd) = 0;
337 
338  // enumeration specific members
339  virtual void insertEnumField(const MemberDef *md) = 0;
340  virtual void setEnumScope(const MemberDef *md,bool livesInsideEnum=FALSE) = 0;
341  virtual void setEnumClassScope(const ClassDef *cd) = 0;
342  virtual void setDocumentedEnumValues(bool value) = 0;
343  virtual void setAnonymousEnumType(const MemberDef *md) = 0;
344 
345  // example related members
346  virtual bool addExample(const QCString &anchor,const QCString &name,const QCString &file) = 0;
347 
348  // prototype related members
349  virtual void setPrototype(bool p,const QCString &df,int line, int column) = 0;
350  virtual void setExplicitExternal(bool b,const QCString &df,int line,int column) = 0;
351  virtual void setDeclFile(const QCString &df,int line,int column) = 0;
352 
353  // argument related members
354  virtual void moveArgumentList(std::unique_ptr<ArgumentList> al) = 0;
355  virtual void moveDeclArgumentList(std::unique_ptr<ArgumentList> al) = 0;
356  virtual void resolveUnnamedParameters(const MemberDef *md) = 0;
357  virtual void setDefinitionTemplateParameterLists(const ArgumentLists &lists) = 0;
358  virtual void setTypeConstraints(const ArgumentList &al) = 0;
359  virtual void setType(const QCString &t) = 0;
360  virtual void setAccessorType(ClassDef *cd,const QCString &t) = 0;
361 
362  // namespace related members
363  virtual void setNamespace(const NamespaceDef *nd) = 0;
364 
365  // member group related members
366  virtual void setMemberGroupId(int id) = 0;
367  virtual void makeImplementationDetail() = 0;
368 
369  // anonymous scope members
370  virtual void setFromAnonymousMember(MemberDef *m) = 0;
371 
372  virtual void enableCallGraph(bool e) = 0;
373  virtual void enableCallerGraph(bool e) = 0;
374 
375  virtual void enableReferencedByRelation(bool e) = 0;
376  virtual void enableReferencesRelation(bool e) = 0;
377 
378  virtual void setTemplateMaster(const MemberDef *mt) = 0;
379  virtual void addListReference(Definition *d) = 0;
380  virtual void setDocsForDefinition(bool b) = 0;
381  virtual void setGroupAlias(const MemberDef *md) = 0;
382 
383  virtual void cacheTypedefVal(const ClassDef *val,const QCString &templSpec,const QCString &resolvedType) = 0;
384  virtual void invalidateTypedefValCache() = 0;
385 
386  virtual void invalidateCachedArgumentTypes() = 0;
387 
388  // declaration <-> definition relation
389  virtual void setMemberDefinition(MemberDef *md) = 0;
390  virtual void setMemberDeclaration(MemberDef *md) = 0;
391 
392  virtual void copyArgumentNames(const MemberDef *bmd) = 0;
393 
394  virtual void setCategory(ClassDef *) = 0;
395  virtual void setCategoryRelation(const MemberDef *) = 0;
396 
397  virtual void setDocumentation(const QCString &d,const QCString &docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
398  virtual void setBriefDescription(const QCString &b,const QCString &briefFile,int briefLine) = 0;
399  virtual void setInbodyDocumentation(const QCString &d,const QCString &inbodyFile,int inbodyLine) = 0;
400 
401  virtual void setHidden(bool b) = 0;
402 
403  virtual void setRequiresClause(const QCString &req) = 0;
404 
405  //-----------------------------------------------------------------------------------
406  // --- actions ----
407  //-----------------------------------------------------------------------------------
408 
409  virtual void findSectionsInDocumentation() = 0;
410  //virtual void addToSearchIndex() const = 0;
411 
412  //-----------------------------------------------------------------------------------
413  // --- write output ----
414  //-----------------------------------------------------------------------------------
415 
416  virtual void writeDocumentation(const MemberList *ml,int memCount,int memTotal,OutputList &ol,
417  const QCString &scopeName,const Definition *container,
418  bool inGroup,bool showEnumValues=FALSE,bool
419  showInline=FALSE) const = 0;
420  virtual void writeMemberDocSimple(OutputList &ol,const Definition *container) const = 0;
421  virtual void writeTagFile(TextStream &) const = 0;
422  virtual void writeLink(OutputList &ol,
423  const ClassDef *cd,const NamespaceDef *nd,const FileDef *fd,const GroupDef *gd,
424  bool onlyText=FALSE) const = 0;
425 
426  // write helpers
427  virtual void setAnonymousUsed() const = 0;
428  virtual void setFromAnonymousScope(bool b) const = 0;
429 
430 };
431 
432 inline ClassDefMutable *MemberDef::getClassDefMutable() const
433 {
434  return toClassDefMutable(getClassDef());
435 }
436 
437 // --- Cast functions
438 
439 MemberDef *toMemberDef(Definition *d);
440 MemberDef *toMemberDef(DefinitionMutable *d);
441 const MemberDef *toMemberDef(const Definition *d);
442 MemberDefMutable *toMemberDefMutable(Definition *d);
443 MemberDefMutable *toMemberDefMutable(const Definition *d);
444 
445 //------------------------------------------------------------------------
446 
447 
449 MemberDefMutable *createMemberDef(const QCString &defFileName,int defLine,int defColumn,
450  const QCString &type,const QCString &name,const QCString &args,
451  const QCString &excp,Protection prot,Specifier virt,bool stat,
452  Relationship related,MemberType t,const ArgumentList &tal,
453  const ArgumentList &al,const QCString &metaData);
454 
455 MemberDef *createMemberDefAlias(const Definition *newScope,const MemberDef *aliasMd);
456 
457 void combineDeclarationAndDefinition(MemberDefMutable *mdec,MemberDefMutable *mdef);
458 void addDocCrossReference(MemberDefMutable *src,MemberDefMutable *dst);
459 
460 #endif
This class represents an function or template argument list.
Definition: arguments.h:59
This file contains a number of basic enums and types.
Definition: example.h:36
virtual QCString briefFile() const =0
The common base class of all entity definitions found in the sources.
Definition: definition.h:76
An abstract interface of a namespace symbol.
Definition: namespacedef.h:54
virtual bool isLinkableInProject() const =0
A model of a class/file/namespace member symbol.
Definition: memberdef.h:45
A vector of MemberDef object.
Definition: memberlist.h:32
virtual bool isLinkable() const =0
Definition: classdef.h:384
virtual QCString name() const =0
Text streaming class that buffers data.
Definition: textstream.h:33
virtual bool hasDocumentation() const =0
A model of a file symbol.
Definition: filedef.h:73
GroupPri_t
Grouping priority.
Definition: types.h:67
Definition: memberdef.h:296
This struct is used to capture the tag file information for an Entry.
Definition: entry.h:48
virtual bool isReference() const =0
virtual QCString displayName(bool=TRUE) const =0
virtual QCString documentation() const =0
Definition: membergroup.h:109
virtual int briefLine() const =0
Relationship
Kind of member relationship.
Definition: types.h:38
virtual QCString getOutputFileBase() const =0
A class representing a group of members.
Definition: membergroup.h:41
virtual int inbodyLine() const =0
Definition: definition.h:308
Specifier
Virtualness of a member.
Definition: types.h:29
virtual QCString qualifiedName() const =0
A list of MemberDef objects as shown in documentation sections.
Definition: memberlist.h:81
virtual QCString briefDescription(bool abbr=FALSE) const =0
virtual QCString inbodyFile() const =0
virtual QCString docFile() const =0
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:37
virtual QCString anchor() const =0
Protection
Protection level of members.
Definition: types.h:26
DefType
Definition: definition.h:85
virtual DefType definitionType() const =0
This is an alternative implementation of QCString.
Definition: qcstring.h:108
A model of a group of symbols.
Definition: groupdef.h:49
A abstract class representing of a compound symbol.
Definition: classdef.h:103
virtual QCString getReference() const =0
virtual int docLine() const =0