📄 javadeclmanager.cpp
字号:
{
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 + -