diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/AddKotlinSignatureAnnotation.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/AddKotlinSignatureAnnotation.java index fde31e71bd6..bcc5a9e5657 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/AddKotlinSignatureAnnotation.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/AddKotlinSignatureAnnotation.java @@ -16,14 +16,20 @@ package org.jetbrains.jet.plugin.codeInsight; +import com.intellij.codeInsight.ExternalAnnotationsListener; +import com.intellij.codeInsight.ExternalAnnotationsManager; +import com.intellij.codeInsight.PsiEquivalenceUtil; import com.intellij.codeInsight.intention.AddAnnotationFix; import com.intellij.codeInsight.intention.impl.BaseIntentionAction; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.messages.MessageBusConnection; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; @@ -79,16 +85,32 @@ public class AddKotlinSignatureAnnotation extends BaseIntentionAction { } @Override - public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { - PsiMethod method = findMethod(file, editor.getCaretModel().getOffset()); - PsiMethod original = (PsiMethod) method.getOriginalElement(); - String signature = getDefaultSignature(project, original); + public void invoke(@NotNull final Project project, final Editor editor, PsiFile file) throws IncorrectOperationException { + final PsiMethod method = findMethod(file, editor.getCaretModel().getOffset()); + String signature = getDefaultSignature(project, (PsiMethod) method.getOriginalElement()); if (signature == null) { return; } + final MessageBusConnection busConnection = project.getMessageBus().connect(); + busConnection.subscribe(ExternalAnnotationsManager.TOPIC, new ExternalAnnotationsListener.Adapter() { + @Override + public void afterExternalAnnotationChanging(@NotNull PsiModifierListOwner owner, @NotNull String annotationFQName, + boolean successful) { + busConnection.disconnect(); + + if (successful && owner == method + && KotlinSignatureInJavaMarkerProvider.KOTLIN_SIGNATURE_ANNOTATION.equals(annotationFQName)) { + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + KotlinSignatureInJavaMarkerProvider.refresh(project); + KotlinSignatureInJavaMarkerProvider.invokeEditSignature(method, editor, null); + } + }, ModalityState.NON_MODAL); + } + } + }); createFix(method, signature).invoke(project, editor, file); - KotlinSignatureInJavaMarkerProvider.refresh(project); - KotlinSignatureInJavaMarkerProvider.invokeEditSignature(method, editor, null); } @NotNull diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinSignatureInJavaMarkerProvider.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinSignatureInJavaMarkerProvider.java index 046127273ed..8002fd22bc5 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinSignatureInJavaMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinSignatureInJavaMarkerProvider.java @@ -91,7 +91,7 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider { return annotation; } - private static PsiMethod getAnnotationOwner(PsiElement element) { + static PsiMethod getAnnotationOwner(PsiElement element) { PsiMethod annotationOwner = element.getOriginalElement() instanceof PsiMethod ? (PsiMethod) element.getOriginalElement() : (PsiMethod) element;