⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javadeclmanager.h

📁 用bcg库编写的java IDE 源码
💻 H
字号:
// JavaDeclManager.h: interface for the CJavaDeclManager class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_JAVADECLMANAGER_H__88EDEB74_8F99_4793_9510_A35F97F85F96__INCLUDED_)
#define AFX_JAVADECLMANAGER_H__88EDEB74_8F99_4793_9510_A35F97F85F96__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "JavaParser.h"



#define DECL_PTRLIST CList<CJavaDeclManager*,CJavaDeclManager*>
class CJavaTextBuffer;
class CImportDecl;
class CJavaInterfaceDecl;
class CVisualJavaView;
struct __CEditContext;

#define MSG_INSERTEDIT _T("{67028EE5-C953-4e55-8421-51065E78B122}")
#define MSG_DELETEEDIT _T("{3A20BC93-DBB3-46db-A86F-15FAE6AAE630}")
#define MSG_ADDLINEEDIT _T("{A365C684-5855-4565-9C7B-41A3ECCED174}")

static const UINT m_msgAddNewDeclMgr       = ::RegisterWindowMessage(_T("{AE882EA7-B04A-425c-9F2D-7FA51794164A}"));
static const UINT m_msgAddHeaderItem       = ::RegisterWindowMessage(_T("{D4094E7C-89DEDMONDKEMOKAI_EFFE5F466C}"));
static const UINT m_msgRemoveHeaderItem    = ::RegisterWindowMessage(_T("{D4094E7CKEMOKAIMAMAWAKOKIEKOFE5F466C}"));
static const UINT m_msgInsertEdit          = ::RegisterWindowMessage(MSG_INSERTEDIT);
static const UINT m_msgDeleteEdit          = ::RegisterWindowMessage(MSG_DELETEEDIT);
static const UINT m_msgAddLineEdit         = ::RegisterWindowMessage(MSG_ADDLINEEDIT);
static const UINT m_msgFileLoaded          = ::RegisterWindowMessage(_T("{77134C38-19E1-4175-A8C5-91F62D37E02A}"));
static const UINT m_msgInit                = ::RegisterWindowMessage(_T("{30339A51-CBF8-40ca-BBCD-8A57A8FB2BA3}"));
static const UINT m_msgSuspendThread       = ::RegisterWindowMessage(_T("{7B94E07F-3611-484b-A078-F5C3D649B73D}"));
static const UINT m_msgResumeThread        = ::RegisterWindowMessage("{D3E32AB2-8AE3-406c-98B8-810C7A94FFFB}");

struct threadInitInfo
{
   char* m_szpSourceFile;
   char* m_szpApiPath;
   bool  m_bTotalParse;
   threadInitInfo()
   {
     m_szpSourceFile = NULL;
     m_szpApiPath = NULL;
   }
   ~threadInitInfo()
   {
      if(m_szpSourceFile)
     delete m_szpSourceFile;
	  if(m_szpApiPath)
	 delete m_szpApiPath;
   }
};


class CJavaDeclManager : public CDeclManager  
{
   DECLARE_DYNCREATE(CJavaDeclManager)
protected:
   HTREEITEM         m_hImports;
   HTREEITEM         m_hSource;

   CString           m_strSource;
   CString           m_strAPIPath;
   CString           m_strFilePath;
   CJavaTextBuffer*  m_pParserTextBuffer;

   DECL_PTRLIST      m_lExports;


   CList<CJavaDeclManager*,CJavaDeclManager*> m_lImports;

public:
   DWORD             m_nMainThreadID;
   CJavaParser*      m_pJavaParser;
   CBlockDecl        *m_pCCBlock;
   int               m_nImportCount;
   CString           m_strProject;
   DECL_LIST*        m_pCurDeclList; 
   HTREEITEM         m_hProject;

   HTREEITEM (*m_fnPtrAddMethod)(CString pszItem,HTREEITEM hParent,UINT naccess,DWORD dwData = 0);
   HTREEITEM (*m_fnPtrAddVar)(CString pszItem,HTREEITEM hParent,UINT naccess,DWORD dwData = 0);
   void (*m_fnPtrRemoveItem)(HTREEITEM hItem,UINT nType = -1);
   HTREEITEM (*m_fnPtrAddItem)(CString pszItem,HTREEITEM hParent = 0,UINT ntype = 0,UINT naccess=0,DWORD dwData = 0);
   void (*m_fnPtrPrintBound)(int nStartIndex, int nStartLine,int nEndIndex,int nEndLine,CString strLabel = "");

   HTREEITEM (*m_fnPtrAddProject)(CString strProject);
   HTREEITEM (*m_fnPtrAddImport)(HTREEITEM,CString strImports);
   HTREEITEM (*m_fnPtrAddSource)(HTREEITEM,CString strSources);

   HTREEITEM (*m_fnPtrRemoveOnContainZero)(HTREEITEM);


   CJavaDeclManager();
   CJavaDeclManager(CString strFile);
   virtual ~CJavaDeclManager();

   void      setSourceFile(CString strSrcFile){m_strFilePath = strSrcFile;}
   CString   getSourceFile(){return m_strFilePath;}
   CString   getSource(){return m_strSource;}

   void      LoadImport(CImportDecl*,CString strImport);

   

   HTREEITEM addItem(CString pszItem,HTREEITEM hParent = 0,int ntype = 0,int naccess=0,DWORD dwData = 0);
   void      removeItem(HTREEITEM hItem,int nType = -1);

   

   long   addPackage(__CBaseDecl* pDecl);
   //void  removePackage(long nPos);
   //bool  pointInPackageDecl(long nIndex,long nLineIndex);

   void  InitParse(CString strPathName);   
   virtual bool  canHaveRelationship(__CBaseDecl* pWouldBeChild,__CBaseDecl* pWouldBeParent);

   DECL_PTRLIST* getExportList(){return &m_lExports;}
   CJavaTextBuffer* getTextBuffer();

   void         OnInfoRequestChar(int,int,char,CVisualJavaView*);

   void LoadCCFrame(CTypeDecl*,int,int,CVisualJavaView*);

   void  addImport(CJavaDeclManager*);
   void  removeImport(CJavaDeclManager*);
   CJavaDeclManager* findImport(CString);
   
   void  addExport(CJavaDeclManager*);
   void  removeExport(CJavaDeclManager*);
   CJavaDeclManager* findExport(CString);





   virtual CTypeDecl* FindType(CStringList&,CBlockDecl* =NULL);

   CJavaParser* getParser(){return m_pJavaParser;}


   void setImportTreeItem(HTREEITEM hitem){m_hImports = hitem;}
   void setSourceTreeItem(HTREEITEM hitem){m_hSource  = hitem;}
   void setProjectTreeItem(HTREEITEM hitem){m_hProject = hitem;}

   HTREEITEM getImportTreeItem(){return m_hImports;}
   HTREEITEM getSourceTreeItem(){return m_hSource;}
   HTREEITEM getProjectTreeItem(){return m_hProject;}


   void OpenCompilationUnit(CImportDecl* pImportDecl,CString strFile);

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


   void OnInit(threadInitInfo* pInitInfo);
   void OnInitSingleThreaded(CJavaTextBuffer* pTextBuffer,bool bTotalParse);
   void OnInsertEdit(__CEditContext*);
   void OnDeleteEdit(__CEditContext*);

   CTypeDecl* FindType(TYPE_LIST* pTypeList,CStringList&,CBlockDecl* =NULL);
   CJavaDeclManager* LoadCompilationUnit(CString);
   void SetNewParent(CBlockDecl* pNewParent,__CBaseDecl* pFrom);


   DECLARE_MESSAGE_MAP()
 };


class CJavaFieldDecl : public CFieldDecl
{
public:
	CJavaFieldDecl();
	CJavaFieldDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
	~CJavaFieldDecl();

    virtual void   moveVariables(HTREEITEM hParent,BOOL bInit = FALSE);
	virtual bool IsNamed(CString);

	
	int     getVarCount(){return m_lVars.GetSize();}

	virtual void move(HTREEITEM,bool = false);
};

class CJavaMethodDecl : public CMethodDecl
{
  CStringList                      m_lstrExceptions;
public:
  CJavaMethodDecl();
  CJavaMethodDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  virtual ~CJavaMethodDecl();
  virtual BOOL Match(CStringList lstrArgs);
};


class CJavaClassDecl  : public CClassDecl
{
protected:
   CStringList                        m_lstrImplementedinterfaces;
   CString                            m_strSuperClass;
   
   //pointer to direct super class
   CTypeDecl*                         m_pSuperDecl;
   //pointers to implemented interfaces
   TYPE_LIST                          m_lImplIntfs;

   
public:
   CList<CJavaInterfaceDecl*,CJavaInterfaceDecl*> m_lImplinterfaces;
   CJavaClassDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CJavaClassDecl();

   CStringList* getImplInterfaces(){return&m_lstrImplementedinterfaces;}

   void  AddImplIntfs(CStringList*);
   CString getSuper(){return m_strSuperClass;}
   void setSuper(CString strSuper){m_strSuperClass = strSuper;}


   virtual void PackSimilarMethods(CString strName,int,
	                              CList<CMethodDecl*,CMethodDecl*>&lMethods);

   virtual void move(HTREEITEM,bool = false);

   void SetSuper(CTypeDecl* pSuper){m_pSuperDecl = pSuper;}
   CTypeDecl* GetSuper(){return m_pSuperDecl;}

   void AddImplInterface(CJavaInterfaceDecl*);

   //this would be call by server,when they're not valid anymore
   void RemoveImplIntf(CJavaInterfaceDecl*);
   void RemoveSuperClient(CJavaClassDecl*);

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

   TYPE_LIST* getImplementedInterfaces();
   virtual BOOL FindReturnType(CString&,CStringList&);
};

class CJavaInterfaceDecl : public CInterfaceDecl
{
protected:
   CStringList                       m_lstrSuperinterfaces;

   //pointers to direct super interfaces
   TYPE_LIST                         m_lSuperTypes;

             /*****clients*****/
   //classes that implement this interface;for reflection.
   TYPE_LIST                         m_lImplClients;


public:
   CJavaInterfaceDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CJavaInterfaceDecl();
   CStringList* getSupers(){return &m_lstrSuperinterfaces;}

   void addSuperIntfs(CStringList*);

   


   void AddSuper(CTypeDecl*);
   

   void AddImplClient(CJavaClassDecl*);
   
   //clients would call these to remove themselfs from this
   void RemoveSuper(CTypeDecl*);

   //servers would call thier clients when they're no longer valid
   void RemoveImplClient(CJavaClassDecl*);

   virtual  bool   FindMethod(CStringList&,CString& strReturn);

   TYPE_LIST*  getSuperInterfaces();
   virtual BOOL FindReturnType(CString&,CStringList&);
};

class CPackageDecl  : public __CBaseDecl
{
   //CArray<CPackageDecl*,CPackageDecl*> m_lSubPackages;
	CString m_strQualifiedName;
public:
   CPackageDecl();
   CPackageDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CPackageDecl();

   CString getQualifiedName();
   void setQualifiedName(CString);
   /**
  //base member
  virtual bool PointInDeclBlock(__DeclPoint& declPt)
  {
	  return __CBaseDecl::PointInDeclBlock(declPt);
  }
  **/
};

class CImportDecl : public __CBaseDecl
{
   CJavaDeclManager* m_pJavaDeclMgr;
public:
   CImportDecl();
   CImportDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
   virtual ~CImportDecl();

  //base member
  virtual bool PointInDeclBlock(__DeclPoint& declPt)
  {
	  return false;
  }

  void setJavaDeclMgr(CJavaDeclManager* pd){m_pJavaDeclMgr =pd; }
  CJavaDeclManager* getJavaDeclMgr(){return m_pJavaDeclMgr;}
};

class CJavaBlockDecl : public CBlockDecl
{
public:
  CJavaBlockDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine);
  virtual~CJavaBlockDecl();
  virtual void move(HTREEITEM,bool = false);

  virtual CString FindTypeOfLocalVar(CStringList&);
};
#endif // !defined(AFX_JAVADECLMANAGER_H__88EDEB74_8F99_4793_9510_A35F97F85F96__INCLUDED_)

⌨️ 快捷键说明

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