language/duchain
classdeclaration.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CLASSDECLARATION_H
00021 #define CLASSDECLARATION_H
00022
00023 #include <language/duchain/declaration.h>
00024 #include <language/duchain/declarationdata.h>
00025 #include <language/duchain/types/structuretype.h>
00026 #include <language/duchain/classmemberdeclarationdata.h>
00027 #include <language/duchain/classmemberdeclaration.h>
00028
00029 namespace KDevelop {
00030 class QualifiedIdentifier;
00031 class DUContext;
00032 class TopDUContext;
00033 class HashedString;
00034 class SimpleRange;
00035 }
00036
00037 namespace KDevelop {
00038
00039 struct KDEVPLATFORMLANGUAGE_EXPORT BaseClassInstance
00040 {
00041 KDevelop::IndexedType baseClass;
00042 KDevelop::Declaration::AccessPolicy access;
00043 bool virtualInheritance;
00044 };
00045
00046 KDEVPLATFORMLANGUAGE_EXPORT DECLARE_LIST_MEMBER_HASH(ClassDeclarationData, baseClasses, BaseClassInstance)
00047
00048 class KDEVPLATFORMLANGUAGE_EXPORT ClassDeclarationData : public KDevelop::ClassMemberDeclarationData
00049 {
00050 public:
00051 enum ClassType {
00052 Class,
00053 Struct,
00054 Union,
00055 Interface
00056 };
00057
00058 enum ClassModifier {
00059 Final,
00060 Abstract,
00061 None
00062 };
00063
00064 ClassDeclarationData() : m_classType(Class), m_classModifier(None) {
00065 initializeAppendedLists();
00066 }
00067
00068 ~ClassDeclarationData() {
00069 freeAppendedLists();
00070 }
00071
00072 ClassDeclarationData(const ClassDeclarationData& rhs) : KDevelop::ClassMemberDeclarationData(rhs) {
00073 initializeAppendedLists();
00074 copyListsFrom(rhs);
00075 m_classType = rhs.m_classType;
00076 m_classModifier = rhs.m_classModifier;
00077 }
00078
00080 ClassType m_classType;
00082 ClassModifier m_classModifier;
00083
00084 START_APPENDED_LISTS_BASE(ClassDeclarationData, KDevelop::ClassMemberDeclarationData);
00085 APPENDED_LIST_FIRST(ClassDeclarationData, BaseClassInstance, baseClasses);
00086 END_APPENDED_LISTS(ClassDeclarationData, baseClasses);
00087 };
00088
00092 class KDEVPLATFORMLANGUAGE_EXPORT ClassDeclaration : public KDevelop::ClassMemberDeclaration
00093 {
00094 public:
00095
00096 ClassDeclaration(const ClassDeclaration& rhs);
00097 ClassDeclaration(ClassDeclarationData& data);
00098 ClassDeclaration(const KDevelop::SimpleRange& range, KDevelop::DUContext* context);
00099 ClassDeclaration(ClassDeclarationData& data, const KDevelop::SimpleRange& range, KDevelop::DUContext* context);
00100 ~ClassDeclaration();
00101
00102 void clearBaseClasses();
00104 uint baseClassesSize() const;
00106 const BaseClassInstance* baseClasses() const;
00107 void addBaseClass(BaseClassInstance klass);
00108
00109 void replaceBaseClass(uint n, BaseClassInstance klass);
00110
00114 bool isPublicBaseClass( ClassDeclaration* base, const KDevelop::TopDUContext* topContext, int* baseConversionLevels = 0 ) const;
00115
00116 QString toString() const;
00117
00118 void setClassType(ClassDeclarationData::ClassType type);
00119
00120 ClassDeclarationData::ClassType classType() const;
00121
00122 void setClassModifier(ClassDeclarationData::ClassModifier modifier);
00123
00124 ClassDeclarationData::ClassModifier classModifier() const;
00125
00126 enum {
00127 Identity = 17
00128 };
00129
00130 private:
00131 virtual KDevelop::Declaration* clonePrivate() const;
00132 DUCHAIN_DECLARE_DATA(ClassDeclaration)
00133 };
00134
00135 }
00136
00137 #endif // CLASSDECLARATION_H
00138