From 11bba8dd77f192b5726c29fa9b63bb47e7c80f70 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 5 Sep 2012 20:07:40 +0400 Subject: [PATCH] Fixed line y-coordinate calculation for popup menu action. Popup menu invocation doesn't move caret, so we can't rely on caret position. --- .../ktSignature/EditSignatureBalloon.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java index b8f7bc7d917..2d0addac360 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java @@ -21,10 +21,7 @@ import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.EditorFactory; -import com.intellij.openapi.editor.EditorSettings; +import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.event.DocumentAdapter; import com.intellij.openapi.editor.event.DocumentEvent; @@ -141,14 +138,13 @@ class EditSignatureBalloon implements Disposable { return editor; } - private static int getLineY(@Nullable Editor editor) { - return editor == null - ? Integer.MAX_VALUE - : editor.logicalPositionToXY(editor.getCaretModel().getLogicalPosition()).y; + private static int getLineY(@NotNull Editor editor, @NotNull PsiElement psiElementInEditor) { + LogicalPosition logicalPosition = editor.offsetToLogicalPosition(psiElementInEditor.getTextOffset()); + return editor.logicalPositionToXY(logicalPosition).y; } - public void show(@Nullable Point point, @NotNull Editor editor) { - int lineY = getLineY(editor); + public void show(@Nullable Point point, @NotNull Editor editor, @NotNull PsiElement psiElementInEditor) { + int lineY = getLineY(editor, psiElementInEditor); EditorGutterComponentEx gutter = (EditorGutterComponentEx) editor.getGutter(); Point adjustedPoint; if (point == null) { @@ -224,7 +220,7 @@ class EditSignatureBalloon implements Disposable { PsiMethod annotationOwner = getAnnotationOwner(element); boolean editable = ExternalAnnotationsManager.getInstance(element.getProject()) .isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); - new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable).show(point, editor); + new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable).show(point, editor, element); } }