quick fixes
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Fri, 20 Jan 2012 12:15:05 +0000 (16:15 +0400)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Fri, 20 Jan 2012 12:25:00 +0000 (16:25 +0400)
plugins/devkit/devkit.iml
plugins/devkit/src/inspections/InspectionMappingConsistencyInspection.java

index 607af153f21c3e10b8c6d019991ea7d83c48a700..47d21923aa174eea24f8352262f5ec9d1255ff38 100644 (file)
@@ -25,6 +25,7 @@
     <orderEntry type="module" module-name="compiler-impl" />
     <orderEntry type="module" module-name="properties" />
     <orderEntry type="module" module-name="idea-ui" scope="TEST" />
+    <orderEntry type="module" module-name="xml" />
   </component>
 </module>
 
index 39c531748bf44936c26019c820f7ddde61e19945..572414d85814a63b62fea1525a0b84703bc2767d 100644 (file)
@@ -15,7 +15,9 @@
  */
 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;
@@ -23,7 +25,10 @@ import com.intellij.psi.PsiElement;
 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;
@@ -32,6 +37,8 @@ import org.jetbrains.idea.devkit.dom.Extension;
 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
@@ -58,7 +65,7 @@ public class InspectionMappingConsistencyInspection extends DevKitInspectionBase
               }
             }
             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) {
@@ -66,7 +73,7 @@ public class InspectionMappingConsistencyInspection extends DevKitInspectionBase
               }
             }
             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");
             }
           }
         }
@@ -81,9 +88,20 @@ public class InspectionMappingConsistencyInspection extends DevKitInspectionBase
     }
   }
 
-  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