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

📄 javadeclmanager.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
   {
	   POSITION nStrPos = lstrTypes.GetHeadPosition();
       CString strName = lstrTypes.GetNext(nStrPos);
       for(POSITION pos = pTypeList->GetHeadPosition(); pos != NULL;)
	   {
          CTypeDecl* pType = pTypeList->GetNext(pos);
	      if(pType->getDeclName().Compare(strName) == 0)
		  {
            if(nStrPos)
			{
              CTypeDecl* pFoundType = pType->FindType(lstrTypes,nStrPos);
		      if(pFoundType)return pFoundType;
			}else return pType;
		  }
	   }
   }return NULL;
}



void  CJavaDeclManager::addImport(CJavaDeclManager* pDeclMgr)
{
  if(findImport(pDeclMgr->getSourceFile()) == NULL)
      m_lImports.AddTail(pDeclMgr);
}

void  CJavaDeclManager::removeImport(CJavaDeclManager* pDeclMgr)
{
  POSITION nPos = m_lImports.Find(pDeclMgr);
  if(nPos != NULL)
  m_lImports.RemoveAt(nPos);
}

CJavaDeclManager* CJavaDeclManager::findImport(CString strSource)
{  
  for(POSITION nPos = m_lImports.GetHeadPosition(); nPos != NULL;)
  {
     CJavaDeclManager *pDeclMgr = m_lImports.GetNext(nPos);
	 if(pDeclMgr->getSourceFile().Compare(strSource) == 0)
	     return pDeclMgr;
  }return NULL;
}


void CJavaDeclManager::addExport(CJavaDeclManager* pDeclMgr)
{
   if(findExport(pDeclMgr->getSourceFile()) == NULL)//don't duplicate
     m_lExports.AddTail(pDeclMgr);
}

void CJavaDeclManager::removeExport(CJavaDeclManager* pDeclMgr)
{
  POSITION nPos = m_lExports.Find(pDeclMgr);
  if(nPos != NULL)
	  m_lExports.RemoveAt(nPos);
}

CJavaDeclManager* CJavaDeclManager::findExport(CString strSource)
{
  for(POSITION nPos = m_lExports.GetHeadPosition(); nPos != NULL;)
  {
     CJavaDeclManager *pDeclMgr = m_lExports.GetNext(nPos);
	 if(pDeclMgr->getSourceFile().Compare(strSource) == 0)
	     return pDeclMgr;
  }
  return NULL;
}




BEGIN_MESSAGE_MAP(CJavaDeclManager,CDeclManager)
	//{{AFX_MSG_MAP(CJavaDeclManager)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
		ON_REGISTERED_THREAD_MESSAGE(m_msgInit,OnInit)
		ON_REGISTERED_THREAD_MESSAGE(m_msgInsertEdit,OnInsertEdit)
		ON_REGISTERED_THREAD_MESSAGE(m_msgDeleteEdit,OnDeleteEdit)
END_MESSAGE_MAP()




void CJavaDeclManager::OnInit(threadInitInfo* pInitInfo)
{
  m_pJavaParser                      = new CJavaParser(this,pInitInfo->m_bTotalParse);
  m_pParser                          = m_pJavaParser;
  m_pParserTextBuffer                = new CJavaTextBuffer(NULL);///this is internal buffer for parser
  m_pTextBuffer                      = (CBaseTextBuffer*)m_pParserTextBuffer;

  
  m_strAPIPath = pInitInfo->m_szpApiPath;
  //add source file header.
  TCHAR* pszFile;
  if(createText(pszFile,pInitInfo->m_szpSourceFile))
  ::PostThreadMessage(m_nMainThreadID,m_msgAddHeaderItem,(WPARAM)this,(LPARAM)pszFile);

  //load and parse file.
  CString strFile(pInitInfo->m_szpSourceFile);
  if(m_pParserTextBuffer->LoadFromFile(strFile))
  {    
    InitParse(strFile);
	::PostThreadMessage(m_nMainThreadID,m_msgAddNewDeclMgr,(WPARAM)this,0);
  }
  //int debug = 0;
  delete pInitInfo;
}

void CJavaDeclManager::OnInitSingleThreaded(CJavaTextBuffer* pTextBuffer,
											bool bTotalParse)
{
  m_pJavaParser          = new CJavaParser(this,bTotalParse);
  m_pParser              = m_pJavaParser;
  m_pParserTextBuffer    = pTextBuffer;//internal buffer is same as external
}



CJavaTextBuffer* CJavaDeclManager::getTextBuffer()
{
	return (CJavaTextBuffer*)m_pParserTextBuffer;
}



void CJavaDeclManager::OnInsertEdit(__CEditContext* pEditContext)
{
  TRACE0("START_INSERTEDIT_PARSE: "+CTime::GetCurrentTime ().Format (_T("%H:%M:%S"))+"\n");
  getTextBuffer()->InsertParserText(pEditContext->m_nStartLine,
	  pEditContext->m_nStartChar,pEditContext->m_pszText,
	  pEditContext->m_nEndLine,pEditContext->m_nEndChar);
  
  __DeclBound editBound(pEditContext->m_nStartChar,pEditContext->m_nStartLine,
	                             pEditContext->m_nEndChar,pEditContext->m_nEndLine);
  UpdateDeclsOnInsert(editBound);
  delete pEditContext;
  TRACE0("END_INSERTEDIT_PARSE: "+CTime::GetCurrentTime ().Format (_T("%H:%M:%S"))+"\n");
}

void CJavaDeclManager::OnDeleteEdit(__CEditContext* pEditContext)
{
  TRACE0("START_DELETEEDIT_PARSE: "+CTime::GetCurrentTime ().Format (_T("%H:%M:%S"))+"\n");

  getTextBuffer()->DeleteParserText(pEditContext->m_nStartLine,
	  pEditContext->m_nStartChar,pEditContext->m_nEndLine,pEditContext->m_nEndChar);

  __DeclBound editBound(pEditContext->m_nStartChar,pEditContext->m_nStartLine,
	                             pEditContext->m_nEndChar,pEditContext->m_nEndLine);
  UpdateDeclsOnDelete(editBound);
  delete pEditContext;
  TRACE0("END_DELETEEDIT_PARSE: "+CTime::GetCurrentTime ().Format (_T("%H:%M:%S"))+"\n");
}




BOOL CJavaDeclManager::InitInstance()
{
	return CDeclManager::InitInstance();
}

int CJavaDeclManager::ExitInstance()
{
	return CDeclManager::ExitInstance();
}

void CJavaDeclManager::SetNewParent(CBlockDecl* pNewParent,__CBaseDecl* pFrom)
{

   if(pNewParent)
   {
       if(pFrom->getParent())
	    pFrom->getParent()->RemoveMemsFrom(pFrom);

       for(POSITION pos = pFrom->getMainPos(); pos != NULL;)
       {
           __CBaseDecl* pDecl = m_lDecls.GetNext(pos);
           if((pDecl->getKind() != ENDBRACE_DECL))
           {
              pNewParent->AddMember(pDecl);
		      //add to view
	       }
	       else
	       if((pDecl->getKind() == ENDBRACE_DECL))
	       {  
              pNewParent->SetEndBrace(pDecl);pDecl->setParent(pNewParent);
		      if(pos)
		      {
                 pDecl = m_lDecls.GetNext(pos);
			     SetNewParent(pNewParent->getParent(),pDecl);return;
		      }
	       }else ASSERT(FALSE);
        }
   }
   else
   {
      for(POSITION pos = pFrom->getMainPos(); pos != NULL;)
	  {
	 
	  }
   }
}


bool  CJavaDeclManager::canHaveRelationship(__CBaseDecl* pWouldBeChild,
										__CBaseDecl* pWouldBeParent)
{
   if(pWouldBeParent == NULL)
   {
      if((pWouldBeChild->getKind() == CLASS_DECL) ||
		 (pWouldBeChild->getKind() == INTERFACE_DECL))
			  return true;
      if((pWouldBeChild->getKind() == PACKAGE_DECL)||
	     (pWouldBeChild->getKind() == IMPORT_DECL)
	    )
			  return true;
	  return false;
   }
   else
   if(pWouldBeParent->getKind() == METHOD_DECL)
   {
      switch(pWouldBeChild->getKind())
	  {
	    case(FIELD_DECL||LOCAL_FIELD_DECL||BLOCK_DECL||CLASS_DECL):
			     return true;
	  }return false;
   }
   else
   if(pWouldBeParent->getKind() == PACKAGE_DECL)
   {
      if((pWouldBeChild->getKind() == CLASS_DECL) ||
		 (pWouldBeChild->getKind() == INTERFACE_DECL)||
		 (pWouldBeChild->getKind() == PACKAGE_DECL)
		 )
			  return true;
	  return false;
   }
   else
   if((pWouldBeParent->getKind() == CLASS_DECL)||
	   (pWouldBeParent->getKind() == INTERFACE_DECL))
   {
       if((pWouldBeChild->getKind() == PACKAGE_DECL)||
			  (pWouldBeChild->getKind() == IMPORT_DECL))
			  return false; 
	  return true;
   }
   else
   if(pWouldBeParent->getKind() == BLOCK_DECL)
   {
      if((pWouldBeChild->getKind() == PACKAGE_DECL)||
		  (pWouldBeChild->getKind() == IMPORT_DECL)||
		  (pWouldBeChild->getKind() == METHOD_DECL)||
		  (pWouldBeChild->getKind() == INTERFACE_DECL)
	    )
			  return false;
      return true;
   }
   return false;
}


//*********************************java field declaration*************************//
CJavaFieldDecl::CJavaFieldDecl()
{

}

CJavaFieldDecl::CJavaFieldDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine):
CFieldDecl(nStartIndex,nStartLine,nEndIndex,nEndLine)
{


}

CJavaFieldDecl::~CJavaFieldDecl()
{
  long nSize = m_lVars.GetSize();
  for(long nPos = 0; nPos<nSize; nPos++)
  {
	 CJavaDeclManager* pDeclMgr = (CJavaDeclManager*)m_pDeclMgr;

	 if(m_lVars[nPos]->m_hLoc != NULL)
//doagain_0:       	
	   //if(m_bTotalParse)
	   //{
         BOOL bResult = ::PostThreadMessage(pDeclMgr->m_nMainThreadID,m_msgRemoveFromProjView,(WPARAM)m_lVars[nPos]->m_hLoc,0);
	     //if(!bResult)
		 //{
		   //::Sleep(500);	
		   //goto doagain_0;
		 //}
	   //}
	 //**pDeclMgr->m_fnPtrRemoveItem(m_lVars[nPos]->m_hLoc);
	 //TRACE("DELETING DECLARATION:"+m_lVars[nPos]->m_strName+"...\n");
	 delete m_lVars[nPos];
  }
}

bool CJavaFieldDecl::IsNamed(CString strName)
{
  int nCount = m_lVars.GetSize();
  for(int I=0; I<nCount; I++)
    if(m_lVars[I]->m_strName.Compare(strName) == 0)
		return true;
  return false;
}




void CJavaFieldDecl::moveVariables(HTREEITEM hParent,BOOL bInit /*=FALSE*/)
{
  int nSize = m_lVars.GetSize();
  for(int nPos = 0; nPos<nSize; nPos++)
  {
	 CString strDecl = m_lVars[nPos]->m_strName;
     CJavaDeclManager* pDeclMgr = (CJavaDeclManager*)m_pDeclMgr;
	 

	  if(bInit)
	 pDeclMgr->m_fnPtrRemoveItem(m_lVars[nPos]->m_hLoc);
	  if(m_nDeclKind == FIELD_DECL)
     m_lVars[nPos]->m_hLoc = pDeclMgr->m_fnPtrAddVar(strDecl,hParent,getAccess(),(DWORD)this);
	  else
	 m_lVars[nPos]->m_hLoc = pDeclMgr->m_fnPtrAddItem(strDecl,hParent,IS_LOCAL,0,(DWORD)this);
  }
}

void CJavaFieldDecl::move(HTREEITEM hItem,bool bInit)
{
  moveVariables(hItem,bInit);
}

//*******************************java method declaration**********************//
CJavaMethodDecl::CJavaMethodDecl(int nStartIndex,int nStartLine,int nEndIndex,int nEndLine):
CMethodDecl(nStartIndex,nStartLine,nEndIndex,nEndLine)
{


}

CJavaMethodDecl::CJavaMethodDecl()
{


}

CJavaMethodDecl::~CJavaMethodDecl()
{
  CJavaDeclManager* pDeclMgr = (CJavaDeclManager*)m_pDeclMgr;

  if(m_hTreeLoc != NULL)
  {

//doagain_0:       	
	   //if(m_bTotalParse)
	   //{
         BOOL bResult = ::PostThreadMessage(pDeclMgr->m_nMainThreadID,m_msgRemoveFromProjView,(WPARAM)m_hTreeLoc,0);
	     //if(!bResult)
		 //{
		 //  ::Sleep(500);	
		   //goto doagain_0;
		 //}
	   //}

    //**pDeclMgr->m_fnPtrRemoveItem(m_hTreeLoc,IS_FUNC);
  }
  if(m_pParent != NULL)
  {

	  m_pParent->RemoveMember(m_nPos);
  }
//  pDeclMgr->removeBlock(m_nStoragePos);
  //TRACE("DELETING DECLARATION:"+m_strDeclName+"...\n");
}
LPCTSTR   m_lszpBasicTypes[]=
{
  _T("byte"),
  _T("short"),
  _T("char"),
  _T("long"),
  _T("float"),
  _T("double"),
  _T("boolean"),
  _T("int"),
  NULL
};

#define NUMTYPE(x)\
((x == "byte")||(x == "short")||(x == "char")||(x == "long")||(x == "float")\
||(x == "double")||(x == "boolean")||(x == "int"))


BOOL CJavaMethodDecl::Match(CStringList lstrArgs)
{
   POSITION pos = lstrArgs.GetHeadPosition();
   CString strParam = m_strParameterizedName;
   strParam.TrimLeft('(');strParam.TrimRight(')');

⌨️ 快捷键说明

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