From 2a8687b4a5aa3999bcc4390daf7ebef53fce5830 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 5 Sep 2012 20:20:20 +0400 Subject: [PATCH] Added "Delete" context menu action. --- .../ktSignature/DeleteSignatureAction.java | 73 +++++++++++++++++++ .../KotlinSignatureInJavaMarkerProvider.java | 3 + 2 files changed, 76 insertions(+) create mode 100644 idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java new file mode 100644 index 00000000000..1ff73f1a947 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/DeleteSignatureAction.java @@ -0,0 +1,73 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.codeInsight.ktSignature; + +import com.intellij.codeInsight.ExternalAnnotationsManager; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.application.Result; +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiAnnotation; +import com.intellij.psi.PsiMethod; + +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.KOTLIN_SIGNATURE_ANNOTATION; +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.findKotlinSignatureAnnotation; +import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.refreshMarkers; + +/** + * @author Evgeny Gerashchenko + * @since 5 Sep 12 + */ +public class DeleteSignatureAction extends AnAction { + private final PsiMethod annotationOwner; + + public DeleteSignatureAction(PsiMethod annotationOwner) { + super("Delete"); + this.annotationOwner = annotationOwner; + } + + @Override + public void actionPerformed(AnActionEvent e) { + final Project project = e.getProject(); + assert project != null; + + final PsiAnnotation annotation = findKotlinSignatureAnnotation(annotationOwner); + assert annotation != null; + + if (annotation.getContainingFile() != annotationOwner.getContainingFile()) { + // external annotation + new WriteCommandAction(project) { + @Override + protected void run(Result result) throws Throwable { + ExternalAnnotationsManager.getInstance(project).deannotate(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); + } + }.execute(); + } + else { + new WriteCommandAction(project) { + @Override + protected void run(Result result) throws Throwable { + annotation.delete(); + } + }.execute(); + } + + + refreshMarkers(project); + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java index 1c2c1b35a2d..e06052440a9 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ktSignature/KotlinSignatureInJavaMarkerProvider.java @@ -105,7 +105,10 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { @Override public ActionGroup getPopupMenuActions() { DefaultActionGroup actionGroup = new DefaultActionGroup(); + actionGroup.add(new EditSignatureAction(getElement())); + actionGroup.add(new DeleteSignatureAction(getElement())); + return actionGroup; } };