KT-2808 Intention to change existing alternative Kotlin signature

#KT-2808 fixed
This commit is contained in:
Evgeny Gerashchenko
2013-01-17 16:54:19 +04:00
parent 05b482e7d5
commit 0f780a84d4
6 changed files with 28 additions and 14 deletions
+1 -1
View File
@@ -248,7 +248,7 @@
</intentionAction>
<intentionAction>
<className>org.jetbrains.jet.plugin.codeInsight.ktSignature.AddKotlinSignatureAnnotation</className>
<className>org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureAnnotationIntention</className>
<category>Kotlin</category>
</intentionAction>
@@ -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
@@ -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) {