diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java index d5eedbd32fb..9efc916cd67 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java @@ -38,9 +38,7 @@ public class DeleteSignatureAction extends AnAction { public DeleteSignatureAction(@NotNull PsiMethod elementInEditor) { super("Delete"); this.annotationOwner = getAnnotationOwner(elementInEditor); - boolean editable = ExternalAnnotationsManager.getInstance(annotationOwner.getProject()) - .isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); - getTemplatePresentation().setVisible(editable); + getTemplatePresentation().setVisible(isAnnotationEditable(elementInEditor)); } @Override 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 6e88e215e62..c5bfc99309a 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/EditSignatureAction.java @@ -41,10 +41,8 @@ public class EditSignatureAction extends AnAction { private final PsiMethod elementInEditor; public EditSignatureAction(@NotNull PsiMethod elementInEditor) { + super(isAnnotationEditable(elementInEditor) ? "Edit" : "View"); this.elementInEditor = elementInEditor; - boolean editable = ExternalAnnotationsManager.getInstance(elementInEditor.getProject()) - .isExternalAnnotationWritable(getAnnotationOwner(elementInEditor), KOTLIN_SIGNATURE_ANNOTATION); - getTemplatePresentation().setText(editable ? "Edit" : "View"); } @Override @@ -83,9 +81,9 @@ public class EditSignatureAction extends AnAction { } else { PsiMethod annotationOwner = getAnnotationOwner(elementInEditor); - boolean editable = ExternalAnnotationsManager.getInstance(elementInEditor.getProject()) - .isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); - new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable).show(point, editor, elementInEditor); + boolean editable = isAnnotationEditable(elementInEditor); + EditSignatureBalloon balloon = new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable); + balloon.show(point, editor, elementInEditor); } } } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureUtil.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureUtil.java index 3915fa5a311..bebefc11a5c 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureUtil.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureUtil.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.plugin.codeInsight.ktSignature; +import com.intellij.codeInsight.ExternalAnnotationsManager; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.lang.ASTNode; import com.intellij.openapi.project.Project; @@ -92,4 +93,16 @@ class KotlinSignatureUtil { static void refreshMarkers(@NotNull Project project) { DaemonCodeAnalyzer.getInstance(project).restart(); } + + static boolean isAnnotationEditable(@NotNull PsiMethod element) { + PsiMethod annotationOwner = getAnnotationOwner(element); + PsiAnnotation annotation = findKotlinSignatureAnnotation(element); + assert annotation != null; + if (annotation.getContainingFile() != annotationOwner.getContainingFile()) { + return annotation.isWritable(); + } else { + ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(element.getProject()); + return annotationsManager.isExternalAnnotationWritable(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); + } + } }