From b7cdac49052d96d7f975a6bbf40e108004fd9571 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Mon, 4 Sep 2017 19:20:25 +0300 Subject: [PATCH] actions: support titled separators in plugin.xml --- .../actionSystem/DefaultActionGroup.java | 4 +-- .../openapi/actionSystem/Separator.java | 31 ++++++++++++++----- .../actionSystem/impl/ActionManagerImpl.java | 3 +- plugins/devkit/src/dom/Group.java | 3 +- plugins/devkit/src/dom/Separator.java | 30 ++++++++++++++++++ 5 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 plugins/devkit/src/dom/Separator.java diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java index eaf3c117e2c6..9d7990591539 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java @@ -126,7 +126,7 @@ public class DefaultActionGroup extends ActionGroup { * Adds a separator to the tail. */ public final void addSeparator() { - add(Separator.getInstance()); + add(Separator.create()); } /** @@ -411,7 +411,7 @@ public class DefaultActionGroup extends ActionGroup { } public void addSeparator(@Nullable String separatorText) { - add(new Separator(separatorText)); + add(Separator.create(separatorText)); } private static class ActionDuplicationException extends IllegalArgumentException { diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/Separator.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/Separator.java index 191c8c01ce32..bd2f698ac110 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/Separator.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/Separator.java @@ -16,20 +16,39 @@ package com.intellij.openapi.actionSystem; import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a separator. */ public final class Separator extends AnAction implements DumbAware { + private static final Separator ourInstance = new Separator(); - private String myText; - - public Separator() { + @NotNull + public static Separator getInstance() { + return ourInstance; } - public Separator(@Nullable final String text) { + @NotNull + public static Separator create() { + return create(null); + } + + @NotNull + public static Separator create(@Nullable String text) { + return StringUtil.isEmptyOrSpaces(text)? ourInstance : new Separator(text); + } + + private final String myText; + + public Separator() { + myText = null; + } + + public Separator(@Nullable String text) { myText = text; } @@ -37,10 +56,6 @@ public final class Separator extends AnAction implements DumbAware { return myText; } - public static Separator getInstance() { - return ourInstance; - } - @Override public String toString() { return "Separator (" + myText + ")"; diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java index df60f17b5d94..83e40c7c48d1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionManagerImpl.java @@ -859,7 +859,8 @@ public final class ActionManagerImpl extends ActionManagerEx implements Disposab reportActionError(pluginId, "unexpected name of element \"" + element.getName() + "\""); return; } - Separator separator = Separator.getInstance(); + String text = element.getAttributeValue(TEXT_ATTR_NAME); + Separator separator = text != null ? new Separator(text) : Separator.getInstance(); if (parentGroup != null) { parentGroup.add(separator, this); } diff --git a/plugins/devkit/src/dom/Group.java b/plugins/devkit/src/dom/Group.java index ed29168e853c..ff2a5fc6b7c3 100644 --- a/plugins/devkit/src/dom/Group.java +++ b/plugins/devkit/src/dom/Group.java @@ -17,6 +17,7 @@ package org.jetbrains.idea.devkit.dom; import com.intellij.ide.presentation.Presentation; +import com.intellij.openapi.actionSystem.Separator; import com.intellij.psi.PsiClass; import com.intellij.util.xml.*; import org.jetbrains.annotations.NotNull; @@ -93,7 +94,7 @@ public interface Group extends Actions, ActionOrGroup { * @return the value of the separator child. */ @NotNull - List> getSeparators(); + List getSeparators(); /** diff --git a/plugins/devkit/src/dom/Separator.java b/plugins/devkit/src/dom/Separator.java new file mode 100644 index 000000000000..23be232d0d65 --- /dev/null +++ b/plugins/devkit/src/dom/Separator.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.devkit.dom; + +import com.intellij.util.xml.GenericAttributeValue; +import com.intellij.util.xml.GenericDomValue; +import com.intellij.util.xml.Stubbed; +import org.jetbrains.annotations.NotNull; + +/** + * @author gregsh + */ +public interface Separator extends GenericDomValue { + @NotNull + @Stubbed + GenericAttributeValue getText(); +}