1. @Domain行标记修改
Halo框架所创建的应用需要管中台可视化纳管,因此当应用启动的时候会判断当前应用是否属于某个域,不属于某个域将停止启动,HaloTools提供一个快速修改编辑的功能。如下图所示:
如上图所示,可以成功进行行标记代码修改,但是会出现报错信息,下面将对报错信息进行分析Fix。
2.报错分析
java.lang.Throwable: Assertion failed: Write access is allowed inside write-action only (see com.intellij.openapi.application.Application.runWriteAction())
at com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:180)
at com.intellij.openapi.application.impl.ApplicationImpl.assertWriteAccessAllowed(ApplicationImpl.java:1344)
at
- 大致意思是写的权限只能在Application.runWriteAction()里面是允许的
- 查询官网资料解释如下图所示:
IDEA行标记修改用到了写文件操作,因此需要在线程中操作,不然会出现文章开头出现的错误。
3. Bug Fix
定位到出错代码,如下所示:
processor.executeCommand(project, new DocumentReplace(document, startOffset, endOffset, domain), "", document)
将上述代码放入写操作中,修改如下所示:
@Override
public void navigate(MouseEvent mouseEvent, PsiElement psiElement) {
Application applicationManager = ApplicationManager.getApplication();
applicationManager.runWriteAction(() -> ➊
processor.executeCommand(project, new DocumentReplace(document, startOffset, endOffset, domain), "", document) ➋
);
DomainModelContext.clearAllSet();
}
➊ 在applicationManager.runWriteAction线程中开启写操作
➋ 进行行标记代码替换操作