diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java index df8e03985b6..440653ea56e 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java @@ -112,7 +112,7 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements @Override public void run() { refreshMarkers(project); - EditSignatureBalloon.invokeEditSignature(method, editor, null); + EditSignatureAction.invokeEditSignature(method, editor, null); } }, ModalityState.NON_MODAL); } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java index d9f26bb9e9b..374f57caef9 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java @@ -16,17 +16,23 @@ package org.jetbrains.jet.plugin.codeInsight.ktSignature; +import com.intellij.codeInsight.ExternalAnnotationsManager; +import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.editor.Editor; -import com.intellij.psi.PsiMethod; +import com.intellij.openapi.fileEditor.OpenFileDescriptor; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.*; + /** * @author Evgeny Gerashchenko * @since 5 Sep 12 @@ -47,6 +53,37 @@ public class EditSignatureAction extends AnAction { public void actionPerformed(@NotNull DataContext dataContext, @Nullable Point point) { Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); assert editor != null; - EditSignatureBalloon.invokeEditSignature(annotationOwner, editor, point); + invokeEditSignature(annotationOwner, editor, point); + } + + static void invokeEditSignature(@NotNull PsiMethod element, @NotNull Editor editor, @Nullable Point point) { + PsiAnnotation annotation = findKotlinSignatureAnnotation(element); + assert annotation != null; + if (annotation.getContainingFile() == element.getContainingFile()) { + // not external, go to + for (PsiNameValuePair pair : annotation.getParameterList().getAttributes()) { + if (pair.getName() == null || "value".equals(pair.getName())) { + PsiAnnotationMemberValue value = pair.getValue(); + if (value != null) { + VirtualFile virtualFile = value.getContainingFile().getVirtualFile(); + assert virtualFile != null; + + PsiElement firstChild = value.getFirstChild(); + if (firstChild != null && firstChild.getNode().getElementType() == JavaTokenType.STRING_LITERAL) { + new OpenFileDescriptor(value.getProject(), virtualFile, value.getTextOffset() + 1).navigate(true); + } + else { + NavigationUtil.activateFileWithPsiElement(value); + } + } + } + } + } + else { + PsiMethod annotationOwner = getAnnotationOwner(element); + boolean editable = ExternalAnnotationsManager.getInstance(element.getProject()) + .isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); + new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable).show(point, editor, element); + } } } 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 d5139bcce10..1e57288c042 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureBalloon.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.plugin.codeInsight.ktSignature; import com.intellij.codeInsight.ExternalAnnotationsManager; -import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; @@ -28,16 +27,17 @@ import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.EditorGutterComponentEx; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.ui.popup.JBPopupAdapter; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.LightweightWindowEvent; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; -import com.intellij.psi.*; +import com.intellij.psi.PsiDocumentManager; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiMethod; import com.intellij.testFramework.LightVirtualFile; import com.intellij.ui.awt.RelativePoint; import org.jetbrains.annotations.NotNull; @@ -53,7 +53,8 @@ import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; -import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.*; +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.KOTLIN_SIGNATURE_ANNOTATION; +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.signatureToNameValuePairs; /** * @author Evgeny Gerashchenko @@ -181,37 +182,6 @@ class EditSignatureBalloon implements Disposable { }.execute(); } - static void invokeEditSignature(@NotNull PsiMethod element, @NotNull Editor editor, @Nullable Point point) { - PsiAnnotation annotation = findKotlinSignatureAnnotation(element); - assert annotation != null; - if (annotation.getContainingFile() == element.getContainingFile()) { - // not external, go to - for (PsiNameValuePair pair : annotation.getParameterList().getAttributes()) { - if (pair.getName() == null || "value".equals(pair.getName())) { - PsiAnnotationMemberValue value = pair.getValue(); - if (value != null) { - VirtualFile virtualFile = value.getContainingFile().getVirtualFile(); - assert virtualFile != null; - - PsiElement firstChild = value.getFirstChild(); - if (firstChild != null && firstChild.getNode().getElementType() == JavaTokenType.STRING_LITERAL) { - new OpenFileDescriptor(value.getProject(), virtualFile, value.getTextOffset() + 1).navigate(true); - } - else { - NavigationUtil.activateFileWithPsiElement(value); - } - } - } - } - } - else { - PsiMethod annotationOwner = getAnnotationOwner(element); - boolean editable = ExternalAnnotationsManager.getInstance(element.getProject()) - .isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); - new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable).show(point, editor, element); - } - } - private static boolean hasErrors(@NotNull JetFile file) { return AnalyzingUtils.getSyntaxErrorRanges(file).isEmpty(); }