import com.intellij.psi.PsiClass;
import com.intellij.util.xml.*;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.idea.devkit.dom.impl.ActionOrGroupResolveConverter;
import org.jetbrains.idea.devkit.dom.impl.PluginPsiClassConverter;
import java.util.List;
AddToGroup addAddToGroup();
@NotNull
- GenericAttributeValue<String> getUseShortcutOf();
+ @Convert(ActionOrGroupResolveConverter.OnlyActions.class)
+ GenericAttributeValue<ActionOrGroup> getUseShortcutOf();
@NotNull
GenericAttributeValue<String> getKeymap();
PairProcessor<String, ActionOrGroup> collectProcessor = new PairProcessor<String, ActionOrGroup>() {
@Override
public boolean process(String s, ActionOrGroup actionOrGroup) {
- variants.add(actionOrGroup);
+ if (isRelevant(actionOrGroup)) {
+ variants.add(actionOrGroup);
+ }
return true;
}
};
PairProcessor<String, ActionOrGroup> findProcessor = new PairProcessor<String, ActionOrGroup>() {
@Override
public boolean process(String s, ActionOrGroup actionOrGroup) {
- if (Comparing.strEqual(value, s)) {
+ if (isRelevant(actionOrGroup) &&
+ Comparing.strEqual(value, s)) {
result[0] = actionOrGroup;
return false;
}
@Nullable
@Override
- public String toString(@Nullable ActionOrGroup group, ConvertContext context) {
- return group == null ? null : getName(group);
+ public String toString(@Nullable ActionOrGroup actionGroup, ConvertContext context) {
+ return actionGroup == null ? null : getName(actionGroup);
}
@Override
return super.createLookupElement(actionOrGroup);
}
+ protected boolean isRelevant(ActionOrGroup actionOrGroup) {
+ return true;
+ }
+
+ public static class OnlyActions extends ActionOrGroupResolveConverter {
+ @Override
+ protected boolean isRelevant(ActionOrGroup actionOrGroup) {
+ return actionOrGroup instanceof Action;
+ }
+
+ @Override
+ public String getErrorMessage(@Nullable String s, ConvertContext context) {
+ return "Cannot resolve action '" + s + "'";
+ }
+ }
+
private static boolean processActionOrGroup(ConvertContext context, final PairProcessor<String, ActionOrGroup> processor) {
final Project project = context.getProject();
<action id=<error descr="Value must not be empty">""</error> class="foo.bar.BarAction"/>
<action id="invalidClass" class="<error descr="'java.lang.String' is not assignable to 'com.intellij.openapi.actionSystem.AnAction'">java.lang.String</error>" />
+ <action id="withUseShortcutOf" class="foo.bar.BarAction" use-shortcut-of="myAction"/>
+ <action id="withUseShortcutOfGroupInvalid" class="foo.bar.BarAction" use-shortcut-of="<error descr="Cannot resolve action 'myGroup'">myGroup</error>"/>
+ <action id="withUseShortcutOfInvalid" class="foo.bar.BarAction" use-shortcut-of="<error descr="Cannot resolve action 'INVALID_VALUE'">INVALID_VALUE</error>"/>
+
<reference id="myGroup"/>
<reference id="myAction"/>
<reference id="myRecursiveGroup"/>