9d4541e874366c08b748ecbb7fe2ae7e942f01d6
[idea/community.git] / platform / editor-ui-ex / src / com / intellij / openapi / editor / impl / DocumentMarkupModelManager.java
1 // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.editor.impl;
3
4 import com.intellij.openapi.Disposable;
5 import com.intellij.openapi.diagnostic.Logger;
6 import com.intellij.openapi.editor.Document;
7 import com.intellij.openapi.project.Project;
8 import com.intellij.openapi.util.Disposer;
9 import com.intellij.util.containers.WeakList;
10 import org.jetbrains.annotations.NotNull;
11
12 public class DocumentMarkupModelManager {
13   private static final Logger LOG = Logger.getInstance(DocumentMarkupModelManager.class);
14
15   private final WeakList<Document> myDocumentSet = new WeakList<>();
16   private volatile boolean myDisposed;
17
18   public static DocumentMarkupModelManager getInstance(Project project) {
19     return project.getComponent(DocumentMarkupModelManager.class);
20   }
21
22   public DocumentMarkupModelManager(@NotNull Project project) {
23     Disposer.register(project, new Disposable() {
24       @Override
25       public void dispose() {
26         cleanupProjectMarkups(project);
27       }
28     });
29   }
30
31   public void registerDocument(Document document) {
32     LOG.assertTrue(!myDisposed);
33     myDocumentSet.add(document);
34   }
35
36   public boolean isDisposed() {
37     return myDisposed;
38   }
39
40   private void cleanupProjectMarkups(@NotNull Project project) {
41     if (!myDisposed) {
42       myDisposed = true;
43       for (Document document : myDocumentSet.toStrongList()) {
44         DocumentMarkupModel.removeMarkupModel(document, project);
45       }
46     }
47   }
48 }