doxygen
definition.h
1 /******************************************************************************
2  *
3  * Copyright (C) 1997-2023 by Dimitri van Heesch.
4  *
5  * Permission to use, copy, modify, and distribute this software and its
6  * documentation under the terms of the GNU General Public License is hereby
7  * granted. No representations are made about the suitability of this software
8  * for any purpose. It is provided "as is" without express or implied warranty.
9  * See the GNU General Public License for more details.
10  *
11  * Documents produced by Doxygen are derivative works derived from the
12  * input used in their production; they are not affected by this license.
13  *
14  */
15 
16 #ifndef DEFINITION_H
17 #define DEFINITION_H
18 
19 #include <vector>
20 
21 #include "types.h"
22 #include "reflist.h"
23 
24 #ifdef _MSC_VER
25 // To disable 'inherits via dominance' warnings with MSVC.
26 // See also https://stackoverflow.com/a/14487243/784672
27 #pragma warning( disable: 4250 )
28 #endif
29 
30 class FileDef;
31 class OutputList;
32 class SectionRefs;
33 class MemberDef;
34 class MemberVector;
35 class GroupDef;
36 class GroupList;
37 class SectionInfo;
38 class Definition;
39 class DefinitionMutable;
40 class DefinitionImpl;
41 class TextStream;
42 
44 struct DocInfo
45 {
46  QCString doc;
47  int line = -1;
48  QCString file;
49 };
50 
52 struct BriefInfo
53 {
54  QCString doc;
55  QCString tooltip;
56  int line = -1;
57  QCString file;
58 };
59 
61 struct BodyInfo
62 {
63  int defLine = -1;
64  int startLine = -1;
65  int endLine = -1;
66  const FileDef *fileDef = nullptr;
67 };
68 
75 {
76  public:
78  enum DefType
79  {
80  TypeClass = 0,
81  TypeFile = 1,
82  TypeNamespace = 2,
83  TypeModule = 3,
84  TypeMember = 4,
85  TypeGroup = 5,
86  TypePackage = 6,
87  TypePage = 7,
88  TypeDir = 8,
89  TypeConcept = 9,
90  };
91 
92 
93  //-----------------------------------------------------------------------------------
94  // ---- getters -----
95  //-----------------------------------------------------------------------------------
96 
98  virtual DefType definitionType() const = 0;
99 
101  virtual CodeSymbolType codeSymbolType() const = 0;
102 
104  virtual bool isAlias() const = 0;
105 
107  virtual const QCString &name() const = 0;
108 
112  virtual bool isAnonymous() const = 0;
113 
115  virtual QCString displayName(bool includeScope=TRUE) const = 0;
116 
118  virtual const QCString &localName() const = 0;
119 
122  virtual QCString qualifiedName() const = 0;
123 
126  virtual QCString symbolName() const = 0;
127 
131  virtual QCString getOutputFileBase() const = 0;
132 
134  virtual QCString anchor() const = 0;
135 
137  virtual QCString getSourceFileBase() const = 0;
138 
140  virtual QCString getSourceAnchor() const = 0;
141 
143  virtual QCString documentation() const = 0;
144 
146  virtual int docLine() const = 0;
147 
151  virtual QCString docFile() const = 0;
152 
154  virtual QCString briefDescription(bool abbreviate=FALSE) const = 0;
155 
159  virtual QCString briefDescriptionAsTooltip() const = 0;
160 
162  virtual int briefLine() const = 0;
163 
165  virtual QCString inbodyDocumentation() const = 0;
166 
168  virtual QCString inbodyFile() const = 0;
169 
172  virtual int inbodyLine() const = 0;
173 
177  virtual QCString briefFile() const = 0;
178 
180  virtual QCString getDefFileName() const = 0;
181 
183  virtual QCString getDefFileExtension() const = 0;
184 
186  virtual int getDefLine() const = 0;
187 
189  virtual int getDefColumn() const = 0;
190 
195  virtual bool hasDocumentation() const = 0;
196 
198  virtual bool hasUserDocumentation() const = 0;
199 
203  virtual bool isLinkableInProject() const = 0;
204 
208  virtual bool isLinkable() const = 0;
209 
213  virtual bool isVisibleInProject() const = 0;
214 
216  virtual bool isVisible() const = 0;
217 
219  virtual bool isHidden() const = 0;
220 
224  virtual bool isArtificial() const = 0;
225 
227  virtual bool isExported() const = 0;
228 
234  virtual QCString getReference() const = 0;
235 
237  virtual bool isReference() const = 0;
238 
240  virtual QCString externalReference(const QCString &relPath) const = 0;
241 
243  virtual int getStartDefLine() const = 0;
244 
248  virtual int getStartBodyLine() const = 0;
249 
253  virtual int getEndBodyLine() const = 0;
254 
258  virtual const FileDef *getBodyDef() const = 0;
259 
261  virtual SrcLangExt getLanguage() const = 0;
262 
263  virtual const GroupList &partOfGroups() const = 0;
264  virtual bool isLinkableViaGroup() const = 0;
265 
266  virtual const RefItemVector &xrefListItems() const = 0;
267 
268  virtual const Definition *findInnerCompound(const QCString &name) const = 0;
269  virtual Definition *getOuterScope() const = 0;
270 
271  virtual const MemberVector &getReferencesMembers() const = 0;
272  virtual const MemberVector &getReferencedByMembers() const = 0;
273 
274  virtual bool hasSections() const = 0;
275  virtual bool hasSources() const = 0;
276 
278  virtual bool hasBriefDescription() const = 0;
279 
280  virtual QCString id() const = 0;
281 
283  virtual const SectionRefs &getSectionRefs() const = 0;
284 
285  virtual QCString navigationPathAsString() const = 0;
286  virtual QCString pathFragment() const = 0;
287 
288  //-----------------------------------------------------------------------------------
289  // --- symbol name ----
290  //-----------------------------------------------------------------------------------
291  virtual void _setSymbolName(const QCString &name) = 0;
292  virtual QCString _symbolName() const = 0;
293 
294  // ---------------------------------
295  virtual ~Definition() = default;
296 
297  private:
298  friend class DefinitionImpl;
299  friend DefinitionMutable* toDefinitionMutable(Definition *);
300  friend DefinitionMutable* toDefinitionMutable(const Definition *);
301  virtual DefinitionMutable *toDefinitionMutable_() = 0;
302  virtual const DefinitionImpl *toDefinitionImpl_() const = 0;
303 };
304 
306 {
307  public:
308 
309 
310  //-----------------------------------------------------------------------------------
311  // ---- setters -----
312  //-----------------------------------------------------------------------------------
313 
315  virtual void setName(const QCString &name) = 0;
316 
318  virtual void setId(const QCString &name) = 0;
319 
321  virtual void setDefFile(const QCString& df,int defLine,int defColumn) = 0;
322 
324  virtual void setDocumentation(const QCString &d,const QCString &docFile,int docLine,bool stripWhiteSpace=TRUE) = 0;
325 
329  virtual void setBriefDescription(const QCString &b,const QCString &briefFile,int briefLine) = 0;
330 
335  virtual void setInbodyDocumentation(const QCString &d,const QCString &docFile,int docLine) = 0;
336 
338  virtual void setReference(const QCString &r) = 0;
339 
340  // source references
341  virtual void setBodySegment(int defLine, int bls,int ble) = 0;
342  virtual void setBodyDef(const FileDef *fd) = 0;
343 
344  virtual void setRefItems(const RefItemVector &sli) = 0;
345  virtual void setOuterScope(Definition *d) = 0;
346 
347  virtual void setHidden(bool b) = 0;
348 
349  virtual void setArtificial(bool b) = 0;
350  virtual void setExported(bool b) = 0;
351  virtual void setLanguage(SrcLangExt lang) = 0;
352  virtual void setLocalName(const QCString &name) = 0;
353 
354  //-----------------------------------------------------------------------------------
355  // --- actions ----
356  //-----------------------------------------------------------------------------------
357 
358  virtual void makePartOfGroup(GroupDef *gd) = 0;
359 
363  virtual void addSectionsToDefinition(const std::vector<const SectionInfo*> &anchorList) = 0;
364  virtual void addSourceReferencedBy(MemberDef *d) = 0;
365  virtual void addSourceReferences(MemberDef *d) = 0;
366  virtual void mergeRefItems(Definition *d) = 0;
367  virtual void addInnerCompound(Definition *d) = 0;
368  virtual void addSectionsToIndex() = 0;
369  virtual void mergeReferences(const Definition *other) = 0;
370  virtual void mergeReferencedBy(const Definition *other) = 0;
371  virtual void computeTooltip() = 0;
372 
373  //-----------------------------------------------------------------------------------
374  // --- writing output ----
375  //-----------------------------------------------------------------------------------
376  virtual void writeSourceDef(OutputList &ol,const QCString &scopeName) const = 0;
377  virtual void writeInlineCode(OutputList &ol,const QCString &scopeName) const = 0;
378  virtual bool hasSourceRefs() const = 0;
379  virtual bool hasSourceReffedBy() const = 0;
380  virtual void writeSourceRefs(OutputList &ol,const QCString &scopeName) const = 0;
381  virtual void writeSourceReffedBy(OutputList &ol,const QCString &scopeName) const = 0;
382  virtual void writeNavigationPath(OutputList &ol) const = 0;
383  virtual void writeQuickMemberLinks(OutputList &,const MemberDef *) const = 0;
384  virtual void writeSummaryLinks(OutputList &) const = 0;
385  virtual void writeDocAnchorsToTagFile(TextStream &) const = 0;
386  virtual void writeToc(OutputList &ol, const LocalToc &lt) const = 0;
387 
388  // ---------------------------------
389  virtual ~DefinitionMutable() = default;
390 
391  private:
392  friend Definition* toDefinition(DefinitionMutable *);
393  virtual Definition *toDefinition_() = 0;
394 };
395 
396 Definition *toDefinition(DefinitionMutable *dm);
397 DefinitionMutable *toDefinitionMutable(Definition *d);
398 
404 bool readCodeFragment(const QCString &fileName,bool isMacro,
405  int &startLine,int &endLine,
406  QCString &result);
407 #endif
This file contains a number of basic enums and types.
The common base class of all entity definitions found in the sources.
Definition: definition.h:74
A model of a class/file/namespace member symbol.
Definition: memberdef.h:47
A vector of MemberDef object.
Definition: memberlist.h:32
Text streaming class that buffers data.
Definition: textstream.h:34
A model of a file symbol.
Definition: filedef.h:98
SrcLangExt
Language as given by extension.
Definition: types.h:41
class that represents a list of constant references to sections.
Definition: section.h:104
std::string_view stripWhiteSpace(std::string_view s)
Given a string view s, returns a new, narrower view on that string, skipping over any leading or trai...
Definition: stringutil.h:72
Definition: types.h:308
Definition: definition.h:305
Data associated with description found in the body.
Definition: definition.h:61
Data associated with a brief description.
Definition: definition.h:52
Definition: definitionimpl.h:27
class that provide information about a section.
Definition: section.h:55
Class representing a list of output generators that are written to in parallel.
Definition: outputlist.h:530
Data associated with a detailed description.
Definition: definition.h:44
Definition: groupdef.h:134
DefType
Definition: definition.h:78
This is an alternative implementation of QCString.
Definition: qcstring.h:93
A model of a group of symbols.
Definition: groupdef.h:51