From 92001a67bc456a6dbf07cf485077aa767ce9bc85 Mon Sep 17 00:00:00 2001 From: Valentin Fondaratov Date: Tue, 30 Jul 2019 19:36:39 +0300 Subject: [PATCH] IDEA-219488: update quickdoc decoration part with newly changed element, not an old one GitOrigin-RevId: 43d49d141870ab3829bf8f02007aa7fd9617265b --- .../codeInsight/JavaDocumentationTest.groovy | 34 +++++++++++++++++++ .../JavaExternalDocumentationTest.java | 29 +++++++++++++--- .../documentation/DocumentationComponent.java | 2 +- .../documentation/DocumentationManager.java | 2 +- 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaDocumentationTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaDocumentationTest.groovy index 7d6c08d56e2d..a5673648acc6 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaDocumentationTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaDocumentationTest.groovy @@ -216,6 +216,40 @@ class Bar { assert actual == expected } + void "test navigation updates decoration"() { + def input = """\ + class Foo { + void foo(String s) { + s.regionMatches() + } + }""".stripIndent() + + def documentationManager = DocumentationManager.getInstance(myFixture.project) + JavaExternalDocumentationTest.getDocumentationText(myFixture.project, input) { component -> + def expected = + "
Candidates for method call s.regionMatches() are:
" + + "
" + + "  boolean regionMatches(int, String, int, int)
" + + "  boolean regionMatches(boolean, int, String, int, int)
" + + "
" + + assert component.decoratedText == expected + + documentationManager.navigateByLink(component, "psi_element://java.lang.String#regionMatches(int, java.lang.String, int, int)") + try { + JavaExternalDocumentationTest.waitTillDone(documentationManager.getLastAction()) + } + catch (InterruptedException e) { + throw new RuntimeException(e) + } + + // Here we check that the covering module (SDK in this case) is rendered in decorated info + assert component.decoratedText.contains("
 < java 1.7 >
") + } + + + } + private void configure(String text) { myFixture.configureByText 'a.java', text } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaExternalDocumentationTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaExternalDocumentationTest.java index 11d78575ee66..8582bca0cf8d 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaExternalDocumentationTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/JavaExternalDocumentationTest.java @@ -28,6 +28,7 @@ import com.intellij.testFramework.LightPlatformTestCase; import com.intellij.testFramework.LightProjectDescriptor; import com.intellij.testFramework.PsiTestUtil; import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor; +import com.intellij.util.Function; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -118,7 +119,7 @@ public class JavaExternalDocumentationTest extends LightPlatformTestCase { return LOCALHOST_URL_PATTERN.matcher(actualText).replaceAll("placeholder"); } - private static void waitTillDone(ActionCallback actionCallback) throws InterruptedException { + static void waitTillDone(ActionCallback actionCallback) throws InterruptedException { if (actionCallback == null) return; long start = System.currentTimeMillis(); while (System.currentTimeMillis() - start < 300000) { @@ -147,17 +148,30 @@ public class JavaExternalDocumentationTest extends LightPlatformTestCase { return getDocumentationText(getProject(), sourceEditorText); } - public static String getDocumentationText(Project project, String sourceEditorText) { + public static String getDocumentationText(Project project, + String sourceEditorText) { + return getDocumentationText(project, sourceEditorText, DocumentationComponent::getDecoratedText); + } + + public static String getDocumentationText(Project project, + String sourceEditorText, + @NotNull Function componentEvaluator) { int caretPosition = sourceEditorText.indexOf(EditorTestUtil.CARET_TAG); if (caretPosition >= 0) { sourceEditorText = sourceEditorText.substring(0, caretPosition) + sourceEditorText.substring(caretPosition + EditorTestUtil.CARET_TAG.length()); } PsiFile psiFile = PsiFileFactory.getInstance(project).createFileFromText(JavaLanguage.INSTANCE, sourceEditorText); - return getDocumentationText(psiFile, caretPosition); + return getDocumentationText(psiFile, caretPosition, componentEvaluator); } public static String getDocumentationText(@NotNull PsiFile psiFile, int caretPosition) { + return getDocumentationText(psiFile, caretPosition, DocumentationComponent::getDecoratedText); + } + + public static String getDocumentationText(@NotNull PsiFile psiFile, + int caretPosition, + @NotNull Function componentEvaluator) { Project project = psiFile.getProject(); Document document = PsiDocumentManager.getInstance(project).getDocument(psiFile); assertNotNull(document); @@ -166,7 +180,7 @@ public class JavaExternalDocumentationTest extends LightPlatformTestCase { if (caretPosition >= 0) { editor.getCaretModel().moveToOffset(caretPosition); } - return getDocumentationText(editor); + return getDocumentationText(editor, componentEvaluator); } finally { EditorFactory.getInstance().releaseEditor(editor); @@ -174,6 +188,11 @@ public class JavaExternalDocumentationTest extends LightPlatformTestCase { } public static String getDocumentationText(@NotNull Editor editor) { + return getDocumentationText(editor, DocumentationComponent::getDecoratedText); + } + + public static String getDocumentationText(@NotNull Editor editor, + @NotNull Function componentEvaluator) { Project project = editor.getProject(); PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); DocumentationManager documentationManager = DocumentationManager.getInstance(project); @@ -187,7 +206,7 @@ public class JavaExternalDocumentationTest extends LightPlatformTestCase { catch (InterruptedException e) { throw new RuntimeException(e); } - return documentationComponent.getDecoratedText(); + return componentEvaluator.fun(documentationComponent); } finally { JBPopup hint = documentationComponent.getHint(); 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 959e925ea0d7..56d4ed6e8774 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java @@ -779,8 +779,8 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr if (myManager == null) return; myText = text; - myDecoratedText = decorate(text); setElement(element); + myDecoratedText = decorate(text); showHint(viewRect, ref); } 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 2c5f42d54f31..ae0d7779a0ee 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java @@ -924,7 +924,7 @@ public class DocumentationManager extends DockablePopupManager