Java 类com.intellij.psi.impl.PsiDocumentManagerBase 实例源码

项目:intellij-ce-playground    文件:UsageViewImpl.java   
private void updateLater() {
  myUpdateAlarm.cancelAllRequests();
  myUpdateAlarm.addRequest(new Runnable() {
    @Override
    public void run() {
      if (myProject.isDisposed()) return;
      PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject);
      documentManager.cancelAndRunWhenAllCommitted("UpdateUsageView", new Runnable() {
        @Override
        public void run() {
          updateImmediately();
        }
      });
    }
  }, 300);
}
项目:intellij-ce-playground    文件:MultiHostRegistrarImpl.java   
private static boolean cacheEverything(@NotNull Place place,
                                       @NotNull DocumentWindowImpl documentWindow,
                                       @NotNull InjectedFileViewProvider viewProvider,
                                       @NotNull PsiFile psiFile,
                                       @NotNull SmartPsiElementPointer<PsiLanguageInjectionHost> pointer) {
  FileDocumentManagerImpl.registerDocument(documentWindow, viewProvider.getVirtualFile());

  DebugUtil.startPsiModification("MultiHostRegistrar cacheEverything");
  try {
    viewProvider.forceCachedPsi(psiFile);
  }
  finally {
    DebugUtil.finishPsiModification();
  }

  psiFile.putUserData(FileContextUtil.INJECTED_IN_ELEMENT, pointer);
  PsiDocumentManagerBase.cachePsi(documentWindow, psiFile);

  keepTreeFromChameleoningBack(psiFile);

  return viewProvider.setShreds(place, psiFile.getProject());
}
项目:consulo    文件:SelfElementInfo.java   
@Override
@Nullable
Segment getRange() {
  if (hasRange()) {
    Document document = getDocumentToSynchronize();
    if (document != null) {
      PsiDocumentManagerBase documentManager = myManager.getPsiDocumentManager();
      List<DocumentEvent> events = documentManager.getEventsSinceCommit(document);
      if (!events.isEmpty()) {
        SmartPointerTracker tracker = myManager.getTracker(getVirtualFile());
        if (tracker != null) {
          return tracker.getUpdatedRange(this, (FrozenDocument)documentManager.getLastCommittedDocument(document), events);
        }
      }
    }
  }
  return calcPsiRange();
}
项目:consulo    文件:InjectionRegistrarImpl.java   
@Override
public void doneInjecting() {
  checkThreading();
  try {
    if (myLanguageVersion == null) {
      throw new IllegalStateException("Seems you haven't called startInjecting()");
    }
    if (placeInfos.isEmpty()) {
      throw new IllegalStateException("Seems you haven't called addPlace()");
    }
    Language forcedLanguage = myContextElement.getUserData(InjectedFileViewProvider.LANGUAGE_FOR_INJECTED_COPY_KEY);
    checkForCorrectContextElement(placeInfos, myContextElement, myLanguageVersion, myHostPsiFile, myHostVirtualFile, myHostDocument);

    synchronized (InjectedLanguageManagerImpl.ourInjectionPsiLock) {
      PsiFile psiFile = createInjectedFile(myLanguageVersion, forcedLanguage, myHostDocument, myHostVirtualFile, myHostPsiFile, fileExtension, placeInfos);
      addFileToResults(psiFile);

      PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject);
      DocumentWindowImpl documentWindow = (DocumentWindowImpl)documentManager.getDocument(psiFile);
      assertEverythingIsAllright(documentManager, documentWindow, psiFile);
    }
  }
  finally {
    clear();
  }
}
项目:intellij-ce-playground    文件:SelfElementInfo.java   
@Override
@Nullable
public Segment getRange() {
  if (myHasRange) {
    Document document = getDocumentToSynchronize();
    if (document != null) {
      PsiDocumentManagerBase documentManager = myManager.getPsiDocumentManager();
      List<DocumentEvent> events = documentManager.getEventsSinceCommit(document);
      if (!events.isEmpty()) {
        return myMarkerCache.getUpdatedRange(markerCacheKey(), (FrozenDocument)documentManager.getLastCommittedDocument(document), events);
      }
    }
  }
  return calcPsiRange();
}
项目:intellij-ce-playground    文件:FileElementInfo.java   
@Nullable
@Override
public Segment getPsiRange() {
  Document currentDoc = FileDocumentManager.getInstance().getCachedDocument(myVirtualFile);
  Document committedDoc = currentDoc == null ? null :
                                ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).getLastCommittedDocument(currentDoc);
  return committedDoc == null ? getRange() : new TextRange(0, committedDoc.getTextLength());
}
项目:intellij-ce-playground    文件:DaemonCodeAnalyzerImpl.java   
@NotNull
private Runnable createUpdateRunnable() {
  return new Runnable() {
    @Override
    public void run() {
      ApplicationManager.getApplication().assertIsDispatchThread();

      if (myDisposed || !myProject.isInitialized() || PowerSaveMode.isEnabled()) {
        return;
      }
      if (HeavyProcessLatch.INSTANCE.isRunning()) {
        if (myAlarm.isEmpty()) {
          // wait for heavy processing to stop, re-schedule daemon but not too soon
          myAlarm.addRequest(myUpdateRunnable, Math.max(mySettings.AUTOREPARSE_DELAY,100));
        }
        return;
      }
      Editor activeEditor = FileEditorManager.getInstance(myProject).getSelectedTextEditor();

      if (activeEditor == null) {
        submitPassesRunnable.run();
      }
      else {
        ((PsiDocumentManagerBase)myPsiDocumentManager).cancelAndRunWhenAllCommitted("start daemon when all committed",
                                                                                    submitPassesRunnable);
      }
    }
  };
}
项目:intellij-ce-playground    文件:MultiHostRegistrarImpl.java   
@NotNull
public static DocumentWindow freezeWindow(@NotNull DocumentWindowImpl window) {
  Place shreds = window.getShreds();
  Project project = shreds.getHostPointer().getProject();
  DocumentEx delegate = ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).getLastCommittedDocument(window.getDelegate());
  Place place = new Place(ContainerUtil.map(shreds, new Function<PsiLanguageInjectionHost.Shred, PsiLanguageInjectionHost.Shred>() {
    @Override
    public PsiLanguageInjectionHost.Shred fun(final PsiLanguageInjectionHost.Shred shred) {
      return ((ShredImpl) shred).withPsiRange();
    }
  }));
  return new DocumentWindowImpl(delegate, window.isOneLine(), place);
}
项目:intellij-ce-playground    文件:XmlTagNameSynchronizer.java   
public TagNameSynchronizer(Editor editor, Project project, Language language) {
  myEditor = editor;
  myLanguage = language;
  final Disposable disposable = ((EditorImpl)editor).getDisposable();
  final Document document = editor.getDocument();
  document.addDocumentListener(this, disposable);
  editor.putUserData(SYNCHRONIZER_KEY, this);
  myDocumentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project);
}
项目:consulo    文件:UsageViewImpl.java   
private void updateLater() {
  myUpdateAlarm.cancelAllRequests();
  myUpdateAlarm.addRequest(() -> {
    if (myProject.isDisposed()) return;
    PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject);
    documentManager.cancelAndRunWhenAllCommitted("UpdateUsageView", this::updateImmediately);
  }, 300);
}
项目:consulo    文件:SelfElementInfo.java   
public static Segment calcActualRangeAfterDocumentEvents(@Nonnull PsiFile containingFile, @Nonnull Document document, @Nonnull Segment segment, boolean isSegmentGreedy) {
  Project project = containingFile.getProject();
  PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(project);
  List<DocumentEvent> events = documentManager.getEventsSinceCommit(document);
  if (!events.isEmpty()) {
    SmartPointerManagerImpl pointerManager = (SmartPointerManagerImpl)SmartPointerManager.getInstance(project);
    SmartPointerTracker tracker = pointerManager.getTracker(containingFile.getViewProvider().getVirtualFile());
    if (tracker != null) {
      return tracker.getUpdatedRange(containingFile, segment, isSegmentGreedy, (FrozenDocument)documentManager.getLastCommittedDocument(document), events);
    }
  }
  return null;
}
项目:consulo    文件:FileElementInfo.java   
@Nullable
@Override
public Segment getPsiRange() {
  Document currentDoc = FileDocumentManager.getInstance().getCachedDocument(myVirtualFile);
  Document committedDoc = currentDoc == null ? null :
                          ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).getLastCommittedDocument(currentDoc);
  return committedDoc == null ? getRange() : new TextRange(0, committedDoc.getTextLength());
}
项目:consulo    文件:DaemonCodeAnalyzerImpl.java   
@Override
public void run() {
  ApplicationManager.getApplication().assertIsDispatchThread();
  Project project = myProject;
  DaemonCodeAnalyzerImpl daemonCodeAnalyzer;
  if (project == null ||
      !project.isInitialized() ||
      project.isDisposed() ||
      PowerSaveMode.isEnabled() ||
      (daemonCodeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project)).myDisposed) {
    return;
  }

  // wait for heavy processing to stop, re-schedule daemon but not too soon
  if (HeavyProcessLatch.INSTANCE.isRunning()) {
    HeavyProcessLatch.INSTANCE.executeOutOfHeavyProcess(() ->
                                                                daemonCodeAnalyzer.stopProcess(true, "re-scheduled to execute after heavy processing finished"));
    return;
  }
  Editor activeEditor = FileEditorManager.getInstance(project).getSelectedTextEditor();

  if (activeEditor == null) {
    AutoPopupController.runTransactionWithEverythingCommitted(project, daemonCodeAnalyzer.submitPassesRunnable);
  }
  else {
    ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).cancelAndRunWhenAllCommitted("start daemon when all committed", daemonCodeAnalyzer.submitPassesRunnable);
  }
}
项目:consulo    文件:InjectionRegistrarImpl.java   
private static void assertEverythingIsAllright(@Nonnull PsiDocumentManagerBase documentManager, @Nonnull DocumentWindowImpl documentWindow, @Nonnull PsiFile psiFile) {
  InjectedFileViewProvider injectedFileViewProvider = (InjectedFileViewProvider)psiFile.getViewProvider();
  assert injectedFileViewProvider.isValid() : "Invalid view provider: " + injectedFileViewProvider;
  DocumentEx frozenWindow = documentManager.getLastCommittedDocument(documentWindow);
  assert psiFile.textMatches(frozenWindow.getText()) : "Document window text mismatch";
  assert injectedFileViewProvider.getDocument() == documentWindow : "Provider document mismatch";
  assert documentManager.getCachedDocument(psiFile) == documentWindow : "Cached document mismatch";
  assert Comparing.equal(psiFile.getVirtualFile(), injectedFileViewProvider.getVirtualFile()) : "Virtual file mismatch: " +
                                                                                                psiFile.getVirtualFile() +
                                                                                                "; " +
                                                                                                injectedFileViewProvider.getVirtualFile();
  PsiDocumentManagerBase.checkConsistency(psiFile, frozenWindow);
}
项目:consulo    文件:InjectedLanguageManagerImpl.java   
@Nonnull
@Override
public DocumentWindow freezeWindow(@Nonnull DocumentWindow document) {
  Place shreds = ((DocumentWindowImpl)document).getShreds();
  Project project = shreds.getHostPointer().getProject();
  DocumentEx delegate = ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(project)).getLastCommittedDocument(document.getDelegate());
  Place place = new Place();
  place.addAll(ContainerUtil.map(shreds, shred -> ((ShredImpl)shred).withPsiRange()));
  return new DocumentWindowImpl(delegate, place);
}
项目:consulo    文件:PostprocessReformattingAspect.java   
private void reparseByTextIfNeeded(@Nonnull FileViewProvider viewProvider, @Nonnull Document document) {
  if (PsiDocumentManager.getInstance(myProject).isCommitted(document)) {
    for (PsiFile file : viewProvider.getAllFiles()) {
      if (file.getUserData(REPARSE_PENDING) != null) {
        ((PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject)).reparseFileFromText((PsiFileImpl)file);
        file.putUserData(REPARSE_PENDING, null);
      }
    }
  }
}
项目:consulo-xml    文件:XmlTagNameSynchronizer.java   
public TagNameSynchronizer(Editor editor, Project project, Language language)
{
    myEditor = editor;
    myLanguage = language;
    final Disposable disposable = ((EditorImpl) editor).getDisposable();
    final Document document = editor.getDocument();
    document.addDocumentListener(this, disposable);
    editor.putUserData(SYNCHRONIZER_KEY, this);
    myDocumentManager = (PsiDocumentManagerBase) PsiDocumentManager.getInstance(project);
}
项目:intellij-ce-playground    文件:SmartPointerManagerImpl.java   
public SmartPointerManagerImpl(Project project) {
  myProject = project;
  myPsiDocManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject);
  POINTERS_KEY = Key.create("SMART_POINTERS for "+project);
}
项目:intellij-ce-playground    文件:SmartPointerManagerImpl.java   
PsiDocumentManagerBase getPsiDocumentManager() {
  return myPsiDocManager;
}
项目:intellij-ce-playground    文件:DaemonCodeAnalyzerImpl.java   
@Override
public void run() {
  PassExecutorService.log(getUpdateProgress(), null, "Update Runnable. myUpdateByTimerEnabled:",
                          myUpdateByTimerEnabled, " something disposed:",
                          PowerSaveMode.isEnabled() || myDisposed || !myProject.isInitialized(), " activeEditors:",
                          myProject.isDisposed() ? null : getSelectedEditors());
  if (!myUpdateByTimerEnabled) return;
  if (myDisposed) return;
  ApplicationManager.getApplication().assertIsDispatchThread();

  final Collection<FileEditor> activeEditors = getSelectedEditors();
  if (activeEditors.isEmpty()) return;

  if (ApplicationManager.getApplication().isWriteAccessAllowed()) {
    // makes no sense to start from within write action, will cancel anyway
    // we'll restart when the write action finish
    return;
  }
  final PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)myPsiDocumentManager;
  if (documentManager.hasUncommitedDocuments()) {
    documentManager.cancelAndRunWhenAllCommitted("restart daemon when all committed", this);
    return;
  }
  if (RefResolveService.ENABLED &&
      !RefResolveService.getInstance(myProject).isUpToDate() &&
      RefResolveService.getInstance(myProject).getQueueSize() == 1) {
    return; // if the user have just typed in something, wait until the file is re-resolved
    // (or else it will blink like crazy since unused symbols calculation depends on resolve service)
  }

  Map<FileEditor, HighlightingPass[]> passes = new THashMap<FileEditor, HighlightingPass[]>(activeEditors.size());
  for (FileEditor fileEditor : activeEditors) {
    BackgroundEditorHighlighter highlighter = fileEditor.getBackgroundHighlighter();
    if (highlighter != null) {
      HighlightingPass[] highlightingPasses = highlighter.createPassesForEditor();
      passes.put(fileEditor, highlightingPasses);
    }
  }
  // cancel all after calling createPasses() since there are perverts {@link com.intellij.util.xml.ui.DomUIFactoryImpl} who are changing PSI there
  cancelUpdateProgress(true, "Cancel by alarm");
  myAlarm.cancelAllRequests();
  DaemonProgressIndicator progress = createUpdateProgress();
  myPassExecutorService.submitPasses(passes, progress);
}
项目:consulo    文件:SmartPointerManagerImpl.java   
public SmartPointerManagerImpl(Project project) {
  myProject = project;
  myPsiDocManager = (PsiDocumentManagerBase)PsiDocumentManager.getInstance(myProject);
  LowMemoryWatcher.register(() -> processQueue(), project);
}
项目:consulo    文件:SmartPointerManagerImpl.java   
PsiDocumentManagerBase getPsiDocumentManager() {
  return myPsiDocManager;
}
项目:consulo    文件:DaemonCodeAnalyzerImpl.java   
@Override
public void run() {
  boolean updateByTimerEnabled = isUpdateByTimerEnabled();
  PassExecutorService.log(getUpdateProgress(), null, "Update Runnable. myUpdateByTimerEnabled:",
                          updateByTimerEnabled, " something disposed:",
                          PowerSaveMode.isEnabled() || myDisposed || !myProject.isInitialized(), " activeEditors:",
                          myProject.isDisposed() ? null : getSelectedEditors());
  if (!updateByTimerEnabled) return;
  if (myDisposed) return;
  ApplicationManager.getApplication().assertIsDispatchThread();

  final Collection<FileEditor> activeEditors = getSelectedEditors();
  if (activeEditors.isEmpty()) return;

  if (ApplicationManager.getApplication().isWriteAccessAllowed()) {
    // makes no sense to start from within write action, will cancel anyway
    // we'll restart when the write action finish
    return;
  }
  final PsiDocumentManagerBase documentManager = (PsiDocumentManagerBase)myPsiDocumentManager;
  if (documentManager.hasUncommitedDocuments()) {
    documentManager.cancelAndRunWhenAllCommitted("restart daemon when all committed", this);
    return;
  }
  if (RefResolveService.ENABLED &&
      !RefResolveService.getInstance(myProject).isUpToDate() &&
      RefResolveService.getInstance(myProject).getQueueSize() == 1) {
    return; // if the user have just typed in something, wait until the file is re-resolved
    // (or else it will blink like crazy since unused symbols calculation depends on resolve service)
  }

  Map<FileEditor, HighlightingPass[]> passes = new THashMap<>(activeEditors.size());
  for (FileEditor fileEditor : activeEditors) {
    BackgroundEditorHighlighter highlighter = fileEditor.getBackgroundHighlighter();
    if (highlighter != null) {
      HighlightingPass[] highlightingPasses = highlighter.createPassesForEditor();
      passes.put(fileEditor, highlightingPasses);
    }
  }
  // cancel all after calling createPasses() since there are perverts {@link com.intellij.util.xml.ui.DomUIFactoryImpl} who are changing PSI there
  cancelUpdateProgress(true, "Cancel by alarm");
  myUpdateRunnableFuture.cancel(false);
  DaemonProgressIndicator progress = createUpdateProgress();
  myPassExecutorService.submitPasses(passes, progress);
}