Click here to Skip to main content
15,892,965 members
Articles / Desktop Programming / MFC

A Java Language IDE

Rate me:
Please Sign up or sign in to vote.
4.33/5 (26 votes)
13 May 2004CPOL3 min read 80.6K   3.4K   41  
This is a partially implemented IDE for the Java platform.
// 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_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
biography? I am not that old yet.

Comments and Discussions