From 0f780a84d4c388b934318ab7a75497150abad7aa Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 17 Jan 2013 16:54:19 +0400 Subject: [PATCH] KT-2808 Intention to change existing alternative Kotlin signature #KT-2808 fixed --- .../after.kt.template | 0 .../before.kt.template | 0 .../description.html | 0 idea/src/META-INF/plugin.xml | 2 +- .../jetbrains/jet/plugin/JetBundle.properties | 2 + ...> KotlinSignatureAnnotationIntention.java} | 38 ++++++++++++------- 6 files changed, 28 insertions(+), 14 deletions(-) rename idea/resources/intentionDescriptions/{AddKotlinSignatureAnnotation => KotlinSignatureAnnotationIntention}/after.kt.template (100%) rename idea/resources/intentionDescriptions/{AddKotlinSignatureAnnotation => KotlinSignatureAnnotationIntention}/before.kt.template (100%) rename idea/resources/intentionDescriptions/{AddKotlinSignatureAnnotation => KotlinSignatureAnnotationIntention}/description.html (100%) rename idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/{AddKotlinSignatureAnnotation.java => KotlinSignatureAnnotationIntention.java} (89%) diff --git a/idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/after.kt.template b/idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/after.kt.template similarity index 100% rename from idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/after.kt.template rename to idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/after.kt.template diff --git a/idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/before.kt.template b/idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/before.kt.template similarity index 100% rename from idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/before.kt.template rename to idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/before.kt.template diff --git a/idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/description.html b/idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/description.html similarity index 100% rename from idea/resources/intentionDescriptions/AddKotlinSignatureAnnotation/description.html rename to idea/resources/intentionDescriptions/KotlinSignatureAnnotationIntention/description.html diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 6c617c57c2b..f9efaafbf92 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -248,7 +248,7 @@ - org.jetbrains.jet.plugin.codeInsight.ktSignature.AddKotlinSignatureAnnotation + org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureAnnotationIntention Kotlin diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index b2b47a99751..4c03c55c2cc 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -39,6 +39,8 @@ specify.type.explicitly.remove.action.name=Remove explicitly specified type add.kotlin.signature.action.family.name=Specify Custom Kotlin Signature add.kotlin.signature.action.text=Specify custom Kotlin signature +edit.kotlin.signature.action.text=Edit custom Kotlin signature +view.kotlin.signature.action.text=View custom Kotlin signature goto.super.function.chooser.title=Choose super function goto.super.property.chooser.title=Choose super property diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureAnnotationIntention.java similarity index 89% rename from idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java rename to idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureAnnotationIntention.java index 0cec4e2e23f..d962c36bfd5 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/AddKotlinSignatureAnnotation.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureAnnotationIntention.java @@ -28,6 +28,7 @@ import com.intellij.openapi.util.Iconable; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NotNull; @@ -43,22 +44,17 @@ import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.JetIcons; import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRendererBuilder; -import org.jetbrains.jet.renderer.DescriptorRendererImpl; import javax.swing.*; import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.*; -public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements Iconable { +public class KotlinSignatureAnnotationIntention extends BaseIntentionAction implements Iconable { private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder() .setShortNames(true) .setModifiers(false) .setWithDefinedIn(false).build(); - public AddKotlinSignatureAnnotation() { - setText(JetBundle.message("add.kotlin.signature.action.text")); - } - @NotNull @Override public String getFamilyName() { @@ -82,14 +78,32 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements return false; } - return createFix(annotationOwner, "").isAvailable(project, editor, file); + if (!PsiUtil.isLanguageLevel5OrHigher(annotationOwner)) return false; + + if (findKotlinSignatureAnnotation(annotationOwner) != null) { + if (isAnnotationEditable(annotationOwner)) { + setText(JetBundle.message("edit.kotlin.signature.action.text")); + } + else { + setText(JetBundle.message("view.kotlin.signature.action.text")); + } + } + else { + setText(JetBundle.message("add.kotlin.signature.action.text")); + } + return true; } @Override public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) throws IncorrectOperationException { final PsiMember annotatedElement = findAnnotationOwner(file, editor); - assert (annotatedElement != null); + assert annotatedElement != null; + + if (findKotlinSignatureAnnotation(annotatedElement) != null) { + EditSignatureAction.invokeEditSignature(annotatedElement, editor, null); + return; + } String signature = getDefaultSignature(project, (PsiMember) annotatedElement.getOriginalElement()); @@ -110,12 +124,10 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction implements } } }); - createFix(annotatedElement, signature).invoke(project, editor, file); - } - @NotNull - private static AddAnnotationFix createFix(@NotNull PsiModifierListOwner annotatedElement, @NotNull String signature) { - return new AddAnnotationFix(KOTLIN_SIGNATURE_ANNOTATION, annotatedElement, signatureToNameValuePairs(annotatedElement.getProject(), signature)); + AddAnnotationFix addAnnotationFix = new AddAnnotationFix( + KOTLIN_SIGNATURE_ANNOTATION, annotatedElement, signatureToNameValuePairs(annotatedElement.getProject(), signature)); + addAnnotationFix.invoke(project, editor, file); } private static String getDefaultSignature(@NotNull PsiMethod method, FqName classFqName, JavaDescriptorResolver javaDescriptorResolver, BindingContext context) {