package com.intellij.lang.javascript.intentions;
import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
import com.intellij.lang.javascript.flex.FlexBundle;
import com.intellij.lang.javascript.generation.ActionScriptGenerateEventHandler;
import com.intellij.lang.javascript.psi.JSCallExpression;
import com.intellij.lang.javascript.psi.JSExpressionStatement;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Trinity;
import com.intellij.psi.PsiFile;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
public class CreateEventHandlerIntention extends BaseIntentionAction {
public CreateEventHandlerIntention() {
setText(FlexBundle.message("intention.create.event.handler"));
}
@NotNull
public String getFamilyName() {
return getText();
}
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
// keep consistency with JavaScriptGenerateEventHandler.GenerateEventHandlerFix.beforeInvoke()
final XmlAttribute xmlAttribute = ActionScriptGenerateEventHandler.getXmlAttribute(file, editor);
final String eventType = xmlAttribute == null ? null : ActionScriptGenerateEventHandler.getEventType(xmlAttribute);
if (eventType != null) {
return true;
}
final JSCallExpression callExpression = ActionScriptGenerateEventHandler.getEventListenerCallExpression(file, editor);
if (callExpression != null) {
return true;
}
final Trinity<JSExpressionStatement, String, String> eventConstantInfo =
ActionScriptGenerateEventHandler.getEventConstantInfo(file, editor);
if (eventConstantInfo != null) {
return true;
}
return false;
}
public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException {
new ActionScriptGenerateEventHandler().invoke(project, editor, file);
}
public boolean startInWriteAction() {
return false;
}
}