@@ -9,6 +9,7 @@ import { ReferenceBlockNode } from "../../stageObject/entity/ReferenceBlockNode"
99import { RectangleLittleNoteEffect } from "@/core/service/feedbackService/effectEngine/concrete/RectangleLittleNoteEffect" ;
1010import { SectionReferencePanel } from "@/sub/ReferencesWindow" ;
1111import { loadAllServicesBeforeInit } from "@/core/loadAllServices" ;
12+ import { projectsAtom , store } from "@/state" ;
1213
1314interface parserResult {
1415 /**
@@ -196,12 +197,22 @@ export class ReferenceManager {
196197 ) ;
197198 if ( ! referencedFile ) return ;
198199
199- // 创建被引用文件的Project实例
200- const referencedProject = new Project ( referencedFile . uri ) ;
200+ // 先检查当前是否已经打开了该文件的Project实例
201+ const allProjects = store . get ( projectsAtom ) ;
202+ let referencedProject = allProjects . find ( ( project ) => {
203+ const projectFileName = PathString . getFileNameFromPath ( project . uri . path ) ;
204+ const projectFileNameFs = PathString . getFileNameFromPath ( project . uri . fsPath ) ;
205+ return projectFileName === fileName || projectFileNameFs === fileName ;
206+ } ) ;
201207
202- // 初始化项目
203- loadAllServicesBeforeInit ( referencedProject ) ;
204- await referencedProject . init ( ) ;
208+ // 如果没有打开,则创建新的Project实例
209+ let shouldDisposeProject = false ;
210+ if ( ! referencedProject ) {
211+ referencedProject = new Project ( referencedFile . uri ) ;
212+ loadAllServicesBeforeInit ( referencedProject ) ;
213+ await referencedProject . init ( ) ;
214+ shouldDisposeProject = true ;
215+ }
205216
206217 // 更新引用
207218 if ( sectionName ) {
@@ -232,9 +243,10 @@ export class ReferenceManager {
232243 }
233244 }
234245
235- // 关闭项目
236- await referencedProject . dispose ( ) ;
237- // TODO: 存在隐患,欠考虑如果引用已经被当前软件打开的情况。
246+ // 只有在我们创建的情况下才需要dispose
247+ if ( shouldDisposeProject ) {
248+ await referencedProject . dispose ( ) ;
249+ }
238250 } catch ( error ) {
239251 toast . error ( "更新reference.msgpack失败:" + String ( error ) ) ;
240252 }
0 commit comments