browser.h

来自「用bcg库编写的java IDE 源码」· C头文件 代码 · 共 476 行

H
476
字号

#include "editlibExp.h"
#define ACCESS(strMod) (strMod.Compare((LPCTSTR)"private") == 0)? IS_PRIVATE\
:(strMod.Compare((LPCTSTR)"protected") == 0)? IS_PROTECTED:\
(strMod.Compare((LPCTSTR)"public") == 0)? IS_PUBLIC: IS_PRIVATE



#define FIELD_DECL       1
#define METHOD_DECL      2
#define INTERFACE_DECL   3
#define CLASS_DECL       4
#define LOCAL_FIELD_DECL 5
#define BLOCK_DECL       6
#define PACKAGE_DECL     7
#define IMPORT_DECL      8
#define ENDBRACE_DECL    9

#define IS_PUBLIC               0x62
#define IS_PRIVATE              0x63
#define IS_PROTECTED            0x64

#define IS_CLASS                0x58
#define IS_FUNC                 0x59
#define IS_VAR                  0x60
#define IS_LOCAL                0x61
#define IS_BLOCK                0x17

#define IS_INTERFACE            0x65
#define IS_IMPORT               0x66
#define IS_PACKAGE              0x67

#define OPEN_BRACE              0x68
#define END_BRACE               0x69

#define ISBLOCK(x) ((x == BLOCK_DECL)||(x == CLASS_DECL)||\
(x == METHOD_DECL)||(x == INTERFACE_DECL))
//forward refrencing






class CBaseTextBuffer;

#define DECLARATION_SYSTEM_DLLEXPORT EDITPADC_CLASS

struct DECLARATION_SYSTEM_DLLEXPORT __DeclPoint;
struct DECLARATION_SYSTEM_DLLEXPORT __DeclBound;
class  DECLARATION_SYSTEM_DLLEXPORT __CBaseDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CFieldDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CBlockDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CMethodDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CClassDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CinterfaceDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CTypeDecl;
class  DECLARATION_SYSTEM_DLLEXPORT CDeclManager;
class  DECLARATION_SYSTEM_DLLEXPORT CBaseParser;
//template<typename TYPE>
//class genStack;

#define DECL_LIST CList<__CBaseDecl*,__CBaseDecl*>
#define TYPE_LIST CList<CTypeDecl*,CTypeDecl*>

struct DECLARATION_SYSTEM_DLLEXPORT __DeclPoint
{
  int            m_nIndex;
  int            m_nLine;

  __DeclPoint()
  {
	m_nIndex = -1; 
	m_nLine = -1;
  }
  __DeclPoint(int nIndex,int nLineIndex)
  {
     m_nIndex = nIndex;
	 m_nLine  = nLineIndex;
  }

  void Set(int nIndex,int nLineIndex)
  {
	m_nIndex = nIndex; 
	m_nLine = nLineIndex;
  }

  ~__DeclPoint()
  {


  }
};

struct DECLARATION_SYSTEM_DLLEXPORT __DeclBound
{
  __DeclPoint m_ptTopLeft;
  __DeclPoint m_ptBottomRight;
  __DeclPoint m_ptBlockEnd;

  int            m_nStartIndex;
  int            m_nStartLine;
  int            m_nEndIndex;
  int            m_nEndLine;

  __DeclBound();
  __DeclBound(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  bool operator>(__DeclBound dBound);
  bool operator<(__DeclBound dBound);
  bool operator>(__DeclPoint dPt);
  bool operator<(__DeclPoint dPt);
  void operator=(__DeclBound dBound);
  bool operator==(__DeclBound declBound);

  bool PointInDecl(__DeclPoint& declPt);
  bool BoundInDecl(__DeclBound& declBound);
  bool BoundInDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  bool PointInDeclBlock(__DeclPoint& declPt);
  void Set(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);

  int  height(){return (m_nEndLine-m_nStartLine);}
  int  width(){return (m_nEndIndex-m_nStartIndex);}
};



class DECLARATION_SYSTEM_DLLEXPORT __CBaseDecl
{
protected:
  __DeclBound*   m_pBound;
  CString        m_strDeclName;
  CStringList    m_lstrModifiers;
  CString        m_strAccessModifier;
  HTREEITEM      m_hTreeLoc;
  CBlockDecl*    m_pParent;
  int            m_nDeclKind;
  CString        m_strType;
  POSITION       m_nPos;
  POSITION       m_nMainPos;
public:
  
  __CBaseDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  __CBaseDecl();
  virtual~__CBaseDecl();
  
  virtual int getMemberCount(){return 0;}

  CStringList* getModList(){return &m_lstrModifiers;}
  __DeclBound* GetBound(){return m_pBound;}

  bool       update(__DeclBound& declBound,CDeclManager* pDeclMgr);
  bool       update(int,int,CDeclManager* pDeclMgr);


  HTREEITEM  getTreeLoc(){return m_hTreeLoc;}
  void       setTreeLoc(HTREEITEM hLoc){m_hTreeLoc = hLoc;}

  CString    getDeclName(){return m_strDeclName;}
  void       setDeclName(CString strName){m_strDeclName = strName;}
  virtual    bool IsNamed(CString);


  void       setType(CString strType){m_strType = strType;}
  CString    getType(){return m_strType;}

  void       setAccessModifier(CString strMod){m_strAccessModifier = strMod;}
  CString    getAccessModifier(){return m_strAccessModifier;}

  void       setParent(CBlockDecl* pParent){m_pParent = pParent;}
  CBlockDecl* getParent(){return m_pParent;}

  int       getKind(){return m_nDeclKind;}
  void      setKind(int);
  int       getAccess(){return ACCESS(m_strAccessModifier);}

  virtual   void move(HTREEITEM,bool = false);
  POSITION  getPos(){return m_nPos;}
  void      setPos(POSITION p){m_nPos =p;}

  POSITION  getMainPos(){return m_nMainPos;}
  void      setMainPos(POSITION p){m_nMainPos = p;}


  virtual   POSITION skipBlock();

  
  CDeclManager*                            m_pDeclMgr;
  POSITION                                 m_nStoragePos;
};

class DECLARATION_SYSTEM_DLLEXPORT CFieldDecl : public __CBaseDecl
{
protected:
  POSITION     m_nFieldPos;
  struct _var
  {
    HTREEITEM m_hLoc;
	CString   m_strName;

	_var(CString strName,HTREEITEM hLoc)
	{
      m_strName = strName;
	  m_hLoc    = hLoc;
	}
  };
  CArray<_var*,_var*> m_lVars;
public:
  CFieldDecl();
  CFieldDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  virtual~CFieldDecl();
  void addVarName(CString strName,HTREEITEM hLoc);

  //base member
  virtual bool PointInDeclScope(__DeclPoint& declPt);
  virtual void    moveVariables(HTREEITEM hParent,BOOL bInit = FALSE);
  void    setKind(long nkind){m_nDeclKind = nkind;}
  void    setLoc(int i,HTREEITEM);
  HTREEITEM getLoc(int i);
  int getcount();
  POSITION  getFieldPos();
  void      setFieldPos(POSITION);
  CString getVar(int);
  //CString getType();
};

class DECLARATION_SYSTEM_DLLEXPORT CBlockDecl : public __CBaseDecl
{
protected:
   CList<__CBaseDecl*,__CBaseDecl*> m_lMembers;

   CList<CFieldDecl*,CFieldDecl*>   m_lFields;
   CList<CMethodDecl*,CMethodDecl*> m_lMethods;

   TYPE_LIST     m_lMemberTypes;
   bool          m_bBalance;

  void addField(CFieldDecl*);
  void addMethod(CMethodDecl*);
  void removeField(POSITION);
  void removeMethod(POSITION);

  void     addType(CTypeDecl*);
  void     removeType(POSITION);
public:

  __CBaseDecl*   m_pEndBrace;
  CBlockDecl();
  CBlockDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  virtual~CBlockDecl();

  bool m_bExpanded;
  virtual  void  RemoveMembers();
  virtual  POSITION  AddMember(__CBaseDecl*);
  virtual  void  RemoveMember(POSITION);

  //base member
  virtual bool PointInDeclBlock(__DeclPoint& declPt);

  virtual int       getMemberCount();
  virtual DECL_LIST* getMembers();
  virtual TYPE_LIST* getMemberTypeList(){return &m_lMemberTypes;}
  


  virtual POSITION skipBlock();
  __CBaseDecl* GetMemberAfter(__CBaseDecl*);
  bool balance();
  void SetEndBrace(__CBaseDecl*);
  __CBaseDecl* GetEndBrace();

  DECL_LIST* GetMemberList();
  CTypeDecl* FindType(CStringList& lstrTypes,POSITION nStrPos);
  CTypeDecl* FindFieldType(CStringList& lstrNames,POSITION nStrPos);
  CFieldDecl* FindField(CStringList* lstrNames,POSITION nStrPos);

  void RemoveMemsFrom(__CBaseDecl* pFrom);

  virtual BOOL FindReturnType(CString&,CStringList&);
};


class DECLARATION_SYSTEM_DLLEXPORT CTypeDecl : public CBlockDecl
{
protected:
   CString    m_strQualifiedName;
   POSITION m_nTypePos;

             /*****clients*****/
   //classes/interface that have this type as a super
   TYPE_LIST                          m_lKnownSubTypes;
public:
   CTypeDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   CTypeDecl();
   virtual ~CTypeDecl();
  //base member
   virtual void PackSimilarMethods(CString strName,int,
	                              CList<CMethodDecl*,CMethodDecl*>&lMethods);
   CMethodDecl* FindMethodImpl(CList<CMethodDecl*,CMethodDecl*>&lMethods,
	   CStringList& lstrArgs);
  
   CString getQualifiedName(){return m_strQualifiedName;}
   void    setQualifiedName(CString strName){m_strQualifiedName = strName;}


   void setTypePos(POSITION pos){m_nTypePos = pos;}
   POSITION getTypePos(){return m_nTypePos;}

   virtual  CString FindTypeOf(CStringList& lstrNames,POSITION nPos);
   virtual  bool    FindMethod(CStringList&,CString& strReturn);
   bool IsImplemented();

   void AddSubType(CTypeDecl*);
   void RemoveSubType(CTypeDecl*);
};

class DECLARATION_SYSTEM_DLLEXPORT CMethodDecl : public CBlockDecl
{
protected:
  CString                          m_strParameterizedName;
  CString                          m_strReturnType;
  bool                             m_bImplemented;
  POSITION                         m_nMethodPos;
public:
  CStringList                      m_lstrInfo;
  CMethodDecl();
  CMethodDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  virtual ~CMethodDecl();


  //base member
  CString getParameterizedName();
  void    setParameterizedName(CString strPname);

  void setReturnType(CString strType);
  CString getReturnType();
  virtual bool PointInDeclBlock(__DeclPoint& declPt);
  void BuildInfo(CStringList&);
  bool IsImplemented();
  void SetImplemented(bool bImplemented);
  POSITION getMethodPos();
  void     setMethodPos(POSITION pos);
  virtual BOOL Match(CStringList&);
};



class DECLARATION_SYSTEM_DLLEXPORT CClassDecl : public CTypeDecl
{
   
public:
   CClassDecl();
   CClassDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CClassDecl();
};



class DECLARATION_SYSTEM_DLLEXPORT CInterfaceDecl : public CTypeDecl
{
   CStringList                        m_lstrSuperinterfaces;
public:
   CInterfaceDecl();
   CInterfaceDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CInterfaceDecl();
};

static UINT  m_nMainAppThreadID = NULL;
static const UINT m_msgMainThreadID          = ::RegisterWindowMessage(_T("{2073A282-6F00-4902-9B6F-F0274A487433}"));
static const UINT m_msgAddToProjView         = ::RegisterWindowMessage(_T("{F5346187-5123-4a20-ADE4-09B22AA0DE81}"));
static const UINT m_msgMoveBlockInView       = ::RegisterWindowMessage(_T("{2E96DA42-FB40-4fc2-90AF-38A8C2C9C168}"));

static const UINT m_msgRemoveFromProjView    = ::RegisterWindowMessage(_T("{D4094E7C-89D6-4cb8-A186-A2CFFE5F466C}"));


class DECLARATION_SYSTEM_DLLEXPORT CDeclManager : public CWinThread
{
   DECLARE_DYNCREATE(CDeclManager)
protected:
   CList<__CBaseDecl*,__CBaseDecl*> m_lDecls;  
   CList<CBlockDecl*,CBlockDecl*> m_lBlockDecls;
   CList<CTypeDecl*,CTypeDecl*> m_lTypeDecls;
   CBaseTextBuffer*    m_pTextBuffer;
   
   
   
   POSITION            m_nLastAddedPos;

   CBaseParser*        m_pParser;
   
   CString             m_strPathName;
public:
   bool                m_bInitParse;
   //***************base functional***************************//
   //CDeclManager(CBaseTextBuffer*);
   CDeclManager();
   virtual ~CDeclManager();

   __CBaseDecl* FindDecl(__DeclBound nBound);
   __CBaseDecl* FindBlock(__DeclPoint&);

   void  UpdateDeclsOnInsert(__DeclBound editContext);
   void  UpdateDeclsOnDelete(__DeclBound& nBound);
   void  UpdateCoordsOnInsert(POSITION nPos,__DeclBound& nBound);
   void  UpdateCoordsOnDelete(POSITION nPos,__DeclBound& nBound);

   //void  UpdateCoordsOnInsertExt(DECL_LIST*,__DeclBound& nBound);
   //void  UpdateCoordsOnDeleteExt(DECL_LIST*,__DeclBound& nBound);
   
   POSITION  AddDecl(__CBaseDecl* pDecl);


// Overrides
	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CDeclManager)
	public:
	virtual BOOL InitInstance();
	virtual int ExitInstance();
	//}}AFX_VIRTUAL


   POSITION   PointInDecl(int nIndex,int nLineIndex,POSITION startPos);
   
   DECL_LIST* getDeclList(){return &m_lDecls;}

   CBlockDecl* getParentBlock(__DeclPoint&);

   void  RemoveDecl(POSITION);
   void    updateBlock(__CBaseDecl* pDecl);
   virtual void  validateScope(POSITION nStartPos);

   
   bool  PointInBlockDecl(int nIndex,int nLineIndex,BOOL &bRoot);
   POSITION   addBlock(CBlockDecl* pDecl);
   void  removeBlock(POSITION nPos);

   void  addNode(CBlockDecl* pDcl);

   void  x_expand(int nLine,int nKeyIndex);
   void  x_colapse(int nLine,int nKeyIndex);
   BOOL  validDoc();
   void  removeNode(CBlockDecl*);


   CBaseTextBuffer* getTextBuffer();
   void             setTextBuffer(CBaseTextBuffer* pBuffer);

   bool m_bValidDoc;

   virtual bool  canHaveRelationship(__CBaseDecl* pWouldBeChild,__CBaseDecl* pWouldBeParent);

   TYPE_LIST* getTypeList(){return &m_lTypeDecls;}

   POSITION AddType(CTypeDecl*);
   void RemoveType(POSITION);

   CString GetPathName(){return m_strPathName;}
   void    SetPathName(CString strPathName){m_strPathName = strPathName;}
   __CBaseDecl* GetItem(POSITION);
   void DeleteAndReParse(__CBaseDecl*);

   void DeleteAndReParse(__CBaseDecl*,CBlockDecl*);
   void OnMainThreadId(UINT);
   virtual CTypeDecl* FindType(CStringList&,CBlockDecl* =NULL);
   DECLARE_MESSAGE_MAP()
};

class DECLARATION_SYSTEM_DLLEXPORT CBaseParser
{
public:
  CBaseParser();
  virtual ~CBaseParser();
  virtual void dynamicParse(int,int,CBlockDecl* = NULL);
  virtual void UpdateBlock(CBlockDecl*);
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?