From 92019a830e88d36ea8cc6b89e16e121a9901e4f3 Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Mon, 9 Feb 2015 14:22:20 +0300 Subject: [PATCH] DBE-1091: track modification count to update QuickDocs --- .../documentation/DocumentationComponent.java | 19 +++++++++++++++++-- .../documentation/DocumentationManager.java | 5 +++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java index a260439b1c18..895cd2e2ce75 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java @@ -48,6 +48,7 @@ import com.intellij.pom.Navigatable; import com.intellij.psi.PsiElement; import com.intellij.psi.SmartPointerManager; import com.intellij.psi.SmartPsiElementPointer; +import com.intellij.psi.util.PsiModificationTracker; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.JBColor; import com.intellij.ui.SideBorder; @@ -94,6 +95,7 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr private DocumentationManager myManager; private SmartPsiElementPointer myElement; + private long myModificationCount; private final Stack myBackStack = new Stack(); private final Stack myForwardStack = new Stack(); @@ -485,6 +487,19 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr return myElement != null ? myElement.getElement() : null; } + private void setElement(SmartPsiElementPointer element) { + myElement = element; + myModificationCount = getCurrentModificationCount(); + } + + public boolean isUpToDate() { + return getElement() != null && myModificationCount == getCurrentModificationCount(); + } + + private long getCurrentModificationCount() { + return myElement != null ? PsiModificationTracker.SERVICE.getInstance(myElement.getProject()).getModificationCount() : -1; + } + public void setNavigateCallback(Consumer navigateCallback) { myNavigateCallback = navigateCallback; } @@ -531,7 +546,7 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr : null; if (element != null) { - myElement = element; + setElement(element); } myIsEmpty = false; @@ -546,7 +561,7 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr } private void setDataInternal(SmartPsiElementPointer element, String text, final Rectangle viewRect, boolean skip) { - myElement = element; + setElement(element); boolean justShown = false; if (!myIsShown && myHint != null) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java index c5de46f9332a..d1bbdf28bf32 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java @@ -395,7 +395,8 @@ public class DocumentationManager extends DockablePopupManager