*/
package org.jetbrains.idea.devkit.inspections;
+import com.intellij.codeInsight.daemon.impl.analysis.InsertRequiredAttributeFix;
import com.intellij.codeInspection.LocalInspectionToolSession;
+import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.XmlElementVisitor;
import com.intellij.psi.util.InheritanceUtil;
+import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlTag;
+import com.intellij.util.Function;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.xml.DomElement;
import com.intellij.util.xml.DomUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.idea.devkit.dom.ExtensionPoint;
import org.jetbrains.idea.devkit.dom.IdeaPlugin;
+import java.text.MessageFormat;
+
/**
* @author Dmitry Avdeev
* Date: 10/10/11
}
}
else if (tag.getAttribute("displayName") == null) {
- registerProblem(element, holder, "displayName or key should be specified");
+ registerProblem(element, holder, "displayName or key should be specified", "displayName", "key");
}
if (groupKey) {
if (tag.getAttribute("bundle") == null && tag.getAttribute("groupBundle") == null) {
}
}
else if (tag.getAttribute("groupName") == null) {
- registerProblem(element, holder, "groupName or groupKey should be specified");
+ registerProblem(element, holder, "groupName or groupKey should be specified", "groupName", "groupKey");
}
}
}
}
}
- private static void registerProblem(DomElement element, ProblemsHolder holder, String message) {
- Pair<TextRange,PsiElement> range = DomUtil.getProblemRange(element.getXmlTag());
- holder.registerProblem(range.second, range.first, message);
+ private static void registerProblem(DomElement element, ProblemsHolder holder, String message, String... createAttrs) {
+ final Pair<TextRange,PsiElement> range = DomUtil.getProblemRange(element.getXmlTag());
+ holder.registerProblem(range.second, range.first, message, ContainerUtil.map(createAttrs, new Function<String, LocalQuickFix>() {
+ @Override
+ public LocalQuickFix fun(final String s) {
+ return new InsertRequiredAttributeFix(PsiTreeUtil.getParentOfType(range.second, XmlTag.class, false), s, null) {
+ @NotNull
+ @Override
+ public String getText() {
+ return MessageFormat.format("Insert ''{0}'' attribute", s);
+ }
+ };
+ }
+ }, new LocalQuickFix[createAttrs.length]));
}
@Nls