package com.intellij.lang.javascript.flex.flexunit.inspections;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.ASTNode;
import com.intellij.lang.javascript.JSTokenTypes;
import com.intellij.lang.javascript.flex.FlexBundle;
import com.intellij.lang.javascript.flex.flexunit.FlexUnitSupport;
import com.intellij.lang.javascript.psi.JSFunction;
import com.intellij.lang.javascript.psi.ecmal4.JSAttributeList;
import com.intellij.lang.javascript.psi.ecmal4.JSClass;
import com.intellij.lang.javascript.validation.fixes.RemoveASTNodeFix;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
public class FlexUnitMethodIsStaticInspection extends FlexUnitMethodInspectionBase {
@Nls
@NotNull
public String getDisplayName() {
return FlexBundle.message("flexunit.inspection.testmethodisstatic.displayname");
}
@NotNull
public String getShortName() {
return "FlexUnitMethodIsStaticInspection";
}
protected void visitPotentialTestMethod(JSFunction method, ProblemsHolder holder, FlexUnitSupport support) {
if (FlexUnitSupport.getCustomRunner((JSClass)method.getParent()) != null) return;
if (method.getAttributeList() != null && method.getAttributeList().hasModifier(JSAttributeList.ModifierType.STATIC)) {
final ASTNode nameIdentifier = method.findNameIdentifier();
if (nameIdentifier != null) {
final ASTNode node = method.getAttributeList().getNode().findChildByType(JSTokenTypes.STATIC_KEYWORD);
assert node != null;
holder.registerProblem(nameIdentifier.getPsi(), FlexBundle.message("flexunit.inspection.testmethodisstatic.message"), ProblemHighlightType.GENERIC_ERROR_OR_WARNING,
new RemoveASTNodeFix("0.is.not.a.legal.name", node) {
@NotNull
@Override
public String getText() {
return FlexBundle.message("flexunit.fix.remove.static.modifier");
}
});
}
}
}
}