// 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_)