Weaken parameter requirements

This commit is contained in:
Nikolay Krasko
2012-09-28 17:07:14 +04:00
parent 7fe6df2756
commit 29ee6e5442
5 changed files with 30 additions and 31 deletions
@@ -23,7 +23,7 @@ import com.intellij.openapi.application.Result;
import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.*; import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUtil.*;
@@ -33,9 +33,9 @@ import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUt
* @since 5 Sep 12 * @since 5 Sep 12
*/ */
public class DeleteSignatureAction extends AnAction { public class DeleteSignatureAction extends AnAction {
private final PsiMethod annotationOwner; private final PsiModifierListOwner annotationOwner;
public DeleteSignatureAction(@NotNull PsiMethod elementInEditor) { public DeleteSignatureAction(@NotNull PsiModifierListOwner elementInEditor) {
super("Delete"); super("Delete");
this.annotationOwner = getAnnotationOwner(elementInEditor); this.annotationOwner = getAnnotationOwner(elementInEditor);
getTemplatePresentation().setVisible(isAnnotationEditable(elementInEditor)); getTemplatePresentation().setVisible(isAnnotationEditable(elementInEditor));
@@ -16,7 +16,6 @@
package org.jetbrains.jet.plugin.codeInsight.ktSignature; package org.jetbrains.jet.plugin.codeInsight.ktSignature;
import com.intellij.codeInsight.ExternalAnnotationsManager;
import com.intellij.codeInsight.navigation.NavigationUtil; import com.intellij.codeInsight.navigation.NavigationUtil;
import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -38,9 +37,9 @@ import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUt
* @since 5 Sep 12 * @since 5 Sep 12
*/ */
public class EditSignatureAction extends AnAction { public class EditSignatureAction extends AnAction {
private final PsiMethod elementInEditor; private final PsiModifierListOwner elementInEditor;
public EditSignatureAction(@NotNull PsiMethod elementInEditor) { public EditSignatureAction(@NotNull PsiModifierListOwner elementInEditor) {
super(isAnnotationEditable(elementInEditor) ? "Edit" : "View"); super(isAnnotationEditable(elementInEditor) ? "Edit" : "View");
this.elementInEditor = elementInEditor; this.elementInEditor = elementInEditor;
} }
@@ -56,7 +55,7 @@ public class EditSignatureAction extends AnAction {
invokeEditSignature(elementInEditor, editor, point); invokeEditSignature(elementInEditor, editor, point);
} }
static void invokeEditSignature(@NotNull PsiMethod elementInEditor, @NotNull Editor editor, @Nullable Point point) { static void invokeEditSignature(@NotNull PsiElement elementInEditor, @NotNull Editor editor, @Nullable Point point) {
PsiAnnotation annotation = findKotlinSignatureAnnotation(elementInEditor); PsiAnnotation annotation = findKotlinSignatureAnnotation(elementInEditor);
assert annotation != null; assert annotation != null;
if (annotation.getContainingFile() == elementInEditor.getContainingFile()) { if (annotation.getContainingFile() == elementInEditor.getContainingFile()) {
@@ -80,7 +79,7 @@ public class EditSignatureAction extends AnAction {
} }
} }
else { else {
PsiMethod annotationOwner = getAnnotationOwner(elementInEditor); PsiModifierListOwner annotationOwner = getAnnotationOwner(elementInEditor);
boolean editable = isAnnotationEditable(elementInEditor); boolean editable = isAnnotationEditable(elementInEditor);
EditSignatureBalloon balloon = new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable); EditSignatureBalloon balloon = new EditSignatureBalloon(annotationOwner, getKotlinSignature(annotation), editable);
balloon.show(point, editor, elementInEditor); balloon.show(point, editor, elementInEditor);
@@ -38,7 +38,7 @@ import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner;
import com.intellij.testFramework.LightVirtualFile; import com.intellij.testFramework.LightVirtualFile;
import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.awt.RelativePoint;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -63,17 +63,17 @@ import static org.jetbrains.jet.plugin.codeInsight.ktSignature.KotlinSignatureUt
*/ */
class EditSignatureBalloon implements Disposable { class EditSignatureBalloon implements Disposable {
private final Editor editor; private final Editor editor;
private final PsiMethod method; private final PsiModifierListOwner annotatedElement;
private final Project project; private final Project project;
private final String previousSignature; private final String previousSignature;
private final MyPanel panel; private final MyPanel panel;
private final Balloon balloon; private final Balloon balloon;
private final boolean editable; private final boolean editable;
public EditSignatureBalloon(@NotNull PsiMethod method, @NotNull String previousSignature, boolean editable) { public EditSignatureBalloon(@NotNull PsiModifierListOwner annotatedElement, @NotNull String previousSignature, boolean editable) {
this.method = method; this.annotatedElement = annotatedElement;
this.editable = editable; this.editable = editable;
project = method.getProject(); project = annotatedElement.getProject();
this.previousSignature = previousSignature; this.previousSignature = previousSignature;
editor = createEditor(); editor = createEditor();
@@ -183,7 +183,7 @@ class EditSignatureBalloon implements Disposable {
@Override @Override
protected void run(Result result) throws Throwable { protected void run(Result result) throws Throwable {
ExternalAnnotationsManager.getInstance(project).editExternalAnnotation( ExternalAnnotationsManager.getInstance(project).editExternalAnnotation(
method, KOTLIN_SIGNATURE_ANNOTATION, signatureToNameValuePairs(project, newSignature)); annotatedElement, KOTLIN_SIGNATURE_ANNOTATION, signatureToNameValuePairs(project, newSignature));
} }
}.execute(); }.execute();
} }
@@ -22,14 +22,14 @@ import com.intellij.codeInsight.daemon.LineMarkerInfo;
import com.intellij.codeInsight.daemon.LineMarkerProvider; import com.intellij.codeInsight.daemon.LineMarkerProvider;
import com.intellij.ide.DataManager; import com.intellij.ide.DataManager;
import com.intellij.ide.util.PropertiesComponent; import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ActionGroup;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@@ -62,9 +62,9 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
} }
}; };
private static final GutterIconNavigationHandler<PsiMethod> NAVIGATION_HANDLER = new GutterIconNavigationHandler<PsiMethod>() { private static final GutterIconNavigationHandler<PsiModifierListOwner> NAVIGATION_HANDLER = new GutterIconNavigationHandler<PsiModifierListOwner>() {
@Override @Override
public void navigate(MouseEvent e, PsiMethod element) { public void navigate(MouseEvent e, PsiModifierListOwner element) {
if (UIUtil.isActionClick(e, MouseEvent.MOUSE_RELEASED)) { if (UIUtil.isActionClick(e, MouseEvent.MOUSE_RELEASED)) {
new EditSignatureAction(element).actionPerformed(DataManager.getInstance().getDataContext(e.getComponent()), e.getPoint()); new EditSignatureAction(element).actionPerformed(DataManager.getInstance().getDataContext(e.getComponent()), e.getPoint());
} }
@@ -94,19 +94,19 @@ public class KotlinSignatureInJavaMarkerProvider implements LineMarkerProvider {
refreshMarkers(project); refreshMarkers(project);
} }
private static class MyLineMarkerInfo extends LineMarkerInfo<PsiMethod> { private static class MyLineMarkerInfo extends LineMarkerInfo<PsiModifierListOwner> {
public MyLineMarkerInfo(PsiElement element) { public MyLineMarkerInfo(PsiElement element) {
super((PsiMethod) element, element.getTextOffset(), JetIcons.SMALL_LOGO, Pass.UPDATE_ALL, TOOLTIP_PROVIDER, NAVIGATION_HANDLER); super((PsiModifierListOwner) element, element.getTextOffset(), JetIcons.SMALL_LOGO, Pass.UPDATE_ALL, TOOLTIP_PROVIDER, NAVIGATION_HANDLER);
} }
@Nullable @Nullable
@Override @Override
public GutterIconRenderer createGutterRenderer() { public GutterIconRenderer createGutterRenderer() {
return new LineMarkerGutterIconRenderer<PsiMethod>(this) { return new LineMarkerGutterIconRenderer<PsiModifierListOwner>(this) {
@Nullable @Nullable
@Override @Override
public ActionGroup getPopupMenuActions() { public ActionGroup getPopupMenuActions() {
PsiMethod element = getElement(); PsiModifierListOwner element = getElement();
assert element != null; assert element != null;
return new DefaultActionGroup(new EditSignatureAction(element), new DeleteSignatureAction(element)); return new DefaultActionGroup(new EditSignatureAction(element), new DeleteSignatureAction(element));
@@ -40,10 +40,10 @@ class KotlinSignatureUtil {
} }
@NotNull @NotNull
static PsiMethod getAnnotationOwner(@NotNull PsiElement element) { static PsiModifierListOwner getAnnotationOwner(@NotNull PsiElement element) {
PsiMethod annotationOwner = element.getOriginalElement() instanceof PsiMethod PsiModifierListOwner annotationOwner = element.getOriginalElement() instanceof PsiModifierListOwner
? (PsiMethod) element.getOriginalElement() ? (PsiModifierListOwner) element.getOriginalElement()
: (PsiMethod) element; : (PsiModifierListOwner) element;
if (!annotationOwner.isPhysical()) { if (!annotationOwner.isPhysical()) {
// this is fake PsiFile which is mirror for ClsFile without sources // this is fake PsiFile which is mirror for ClsFile without sources
ASTNode node = SourceTreeToPsiMap.psiElementToTree(element); ASTNode node = SourceTreeToPsiMap.psiElementToTree(element);
@@ -82,8 +82,8 @@ class KotlinSignatureUtil {
@Nullable @Nullable
static PsiAnnotation findKotlinSignatureAnnotation(@NotNull PsiElement element) { static PsiAnnotation findKotlinSignatureAnnotation(@NotNull PsiElement element) {
if (!(element instanceof PsiMethod)) return null; if (!(element instanceof PsiModifierListOwner)) return null;
PsiMethod annotationOwner = getAnnotationOwner(element); PsiModifierListOwner annotationOwner = getAnnotationOwner(element);
PsiAnnotation annotation = JavaDescriptorResolver.findAnnotation(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION); PsiAnnotation annotation = JavaDescriptorResolver.findAnnotation(annotationOwner, KOTLIN_SIGNATURE_ANNOTATION);
if (annotation == null) return null; if (annotation == null) return null;
if (annotation.getParameterList().getAttributes().length == 0) return null; if (annotation.getParameterList().getAttributes().length == 0) return null;
@@ -94,8 +94,8 @@ class KotlinSignatureUtil {
DaemonCodeAnalyzer.getInstance(project).restart(); DaemonCodeAnalyzer.getInstance(project).restart();
} }
static boolean isAnnotationEditable(@NotNull PsiMethod element) { static boolean isAnnotationEditable(@NotNull PsiElement element) {
PsiMethod annotationOwner = getAnnotationOwner(element); PsiModifierListOwner annotationOwner = getAnnotationOwner(element);
PsiAnnotation annotation = findKotlinSignatureAnnotation(element); PsiAnnotation annotation = findKotlinSignatureAnnotation(element);
assert annotation != null; assert annotation != null;
if (annotation.getContainingFile() != annotationOwner.getContainingFile()) { if (annotation.getContainingFile() != annotationOwner.getContainingFile()) {