package org.angularjs.inspections;
import com.intellij.codeInspection.LocalInspectionTool;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.XmlElementVisitor;
import com.intellij.psi.xml.XmlAttribute;
import com.intellij.psi.xml.XmlAttributeValue;
import org.angularjs.codeInsight.attributes.AngularAttributesRegistry;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
/**
* @author Dennis.Ushakov
*/
public class EmptyEventHandlerInspection extends LocalInspectionTool {
@NotNull
@Override
public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) {
return new XmlElementVisitor() {
@Override
public void visitXmlAttribute(XmlAttribute attribute) {
if (AngularAttributesRegistry.isEventAttribute(attribute.getName(), attribute.getProject())) {
final XmlAttributeValue value = attribute.getValueElement();
if (value == null || value.getChildren().length == 0) {
holder.registerProblem(attribute, "Empty event handler attribute", new CreateAttributeQuickFix());
}
}
}
};
}
private static class CreateAttributeQuickFix implements LocalQuickFix {
@Nls
@NotNull
@Override
public String getName() {
return "Add attribute value";
}
@Nls
@NotNull
@Override
public String getFamilyName() {
return "AngularJS";
}
@Override
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
final XmlAttribute attribute = (XmlAttribute)descriptor.getPsiElement();
attribute.setValue("");
new OpenFileDescriptor(project, attribute.getContainingFile().getVirtualFile(),
attribute.getValueElement().getTextRange().getStartOffset() + 1).navigate(true);
}
}
}