[java] IDEA-352641 File - New contains many irrelevant templates for Java source sets

GitOrigin-RevId: bd18866f6d60839fa9474c7071aca2761989986e
This commit is contained in:
Yuriy Artamonov
2024-10-06 15:58:11 +02:00
committed by intellij-monorepo-bot
parent aebc03abd0
commit b79a859047
20 changed files with 217 additions and 41 deletions

View File

@@ -1658,6 +1658,10 @@
implementationClass="com.intellij.codeInsight.daemon.impl.quickfix.VariableAccessFromInnerClassJava10Fix"/> implementationClass="com.intellij.codeInsight.daemon.impl.quickfix.VariableAccessFromInnerClassJava10Fix"/>
<stripTrailingSpacesFilterFactory implementation="com.intellij.codeEditor.JavaStripTrailingSpacesFilterFactory"/> <stripTrailingSpacesFilterFactory implementation="com.intellij.codeEditor.JavaStripTrailingSpacesFilterFactory"/>
<advancedSetting id="java.show.irrelevant.templates.in.source.roots" default="false"
groupKey="advanced.settings.group.java" bundle="messages.JavaBundle"/>
<newFileActionCategoryHandler implementation="com.intellij.ide.actions.JavaNewFileCategoryHandler"/>
<inspection.basicVisitor class="com.intellij.psi.JavaElementVisitor"/> <inspection.basicVisitor class="com.intellij.psi.JavaElementVisitor"/>
<localInspection language="JAVA" shortName="MoveFieldAssignmentToInitializer" enabledByDefault="true" level="INFORMATION" <localInspection language="JAVA" shortName="MoveFieldAssignmentToInitializer" enabledByDefault="true" level="INFORMATION"

View File

@@ -0,0 +1,43 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.actions;
import com.intellij.ide.IdeView;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.options.advanced.AdvancedSettings;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.psi.PsiDirectory;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes;
import static com.intellij.ide.actions.CreateTemplateInPackageAction.JAVA_NEW_FILE_CATEGORY;
import static com.intellij.ide.actions.CreateTemplateInPackageAction.isInContentRoot;
final class JavaNewFileCategoryHandler implements NewFileActionCategoryHandler {
@Override
public @NotNull ThreeState isVisible(@NotNull DataContext dataContext, @NotNull String category) {
if (JAVA_NEW_FILE_CATEGORY.equals(category)) return ThreeState.YES;
if (AdvancedSettings.getBoolean("java.show.irrelevant.templates.in.source.roots")) return ThreeState.UNSURE;
Project project = CommonDataKeys.PROJECT.getData(dataContext);
IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext);
if (project == null || view == null) return ThreeState.UNSURE;
ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(project).getFileIndex();
for (PsiDirectory dir : view.getDirectories()) {
if (isInContentRoot(dir.getVirtualFile(), projectFileIndex)) { // cannot distinguish module root from source root
return ThreeState.YES;
}
if (projectFileIndex.isUnderSourceRootOfType(dir.getVirtualFile(), JavaModuleSourceRootTypes.SOURCES)) {
return ThreeState.NO;
}
}
return ThreeState.UNSURE;
}
}

View File

@@ -1952,3 +1952,5 @@ intention.family.name.delete.private.method=Delete private method
checkbox.check.for.jdk.updates=Check for JDK updates checkbox.check.for.jdk.updates=Check for JDK updates
intention.family.name.rename.to.ignored=Rename to ignored intention.family.name.rename.to.ignored=Rename to ignored
tooltip.variable.used=Variable ''{0}'' is used tooltip.variable.used=Variable ''{0}'' is used
advanced.setting.java.show.irrelevant.templates.in.source.roots=Show irrelevant New File templates in Java source roots

View File

@@ -482,6 +482,10 @@ c:com.intellij.find.actions.FindUsagesAction
- a:getSearchTarget():com.intellij.find.usages.api.SearchTarget - a:getSearchTarget():com.intellij.find.usages.api.SearchTarget
*:com.intellij.find.usages.symbol.SymbolSearchTargetFactory *:com.intellij.find.usages.symbol.SymbolSearchTargetFactory
- a:searchTarget(com.intellij.openapi.project.Project,com.intellij.model.Symbol):com.intellij.find.usages.api.SearchTarget - a:searchTarget(com.intellij.openapi.project.Project,com.intellij.model.Symbol):com.intellij.find.usages.api.SearchTarget
*:com.intellij.ide.actions.NewFileActionCategoryHandler
- a:isVisible(com.intellij.openapi.actionSystem.DataContext,java.lang.String):com.intellij.util.ThreeState
*:com.intellij.ide.actions.NewFileActionWithCategory
- a:getCategory():java.lang.String
*:com.intellij.ide.actions.searcheverywhere.PromoAction *:com.intellij.ide.actions.searcheverywhere.PromoAction
- a:getCallToAction():java.lang.String - a:getCallToAction():java.lang.String
- a:getPromotedProductIcon():javax.swing.Icon - a:getPromotedProductIcon():javax.swing.Icon

View File

@@ -8271,6 +8271,8 @@ a:com.intellij.ide.actions.CreateFromTemplateAction
- update(com.intellij.openapi.actionSystem.AnActionEvent):V - update(com.intellij.openapi.actionSystem.AnActionEvent):V
a:com.intellij.ide.actions.CreateTemplateInPackageAction a:com.intellij.ide.actions.CreateTemplateInPackageAction
- com.intellij.ide.actions.CreateFromTemplateAction - com.intellij.ide.actions.CreateFromTemplateAction
- com.intellij.ide.actions.NewFileActionWithCategory
- sf:JAVA_NEW_FILE_CATEGORY:java.lang.String
- p:<init>(java.lang.String,java.lang.String,javax.swing.Icon,java.util.Set):V - p:<init>(java.lang.String,java.lang.String,javax.swing.Icon,java.util.Set):V
- p:<init>(java.util.function.Supplier,java.util.function.Supplier,java.util.function.Supplier,java.util.Set):V - p:<init>(java.util.function.Supplier,java.util.function.Supplier,java.util.function.Supplier,java.util.Set):V
- p:<init>(java.util.function.Supplier,java.util.function.Supplier,javax.swing.Icon,java.util.Set):V - p:<init>(java.util.function.Supplier,java.util.function.Supplier,javax.swing.Icon,java.util.Set):V
@@ -8279,6 +8281,7 @@ a:com.intellij.ide.actions.CreateTemplateInPackageAction
- pa:checkPackageExists(com.intellij.psi.PsiDirectory):Z - pa:checkPackageExists(com.intellij.psi.PsiDirectory):Z
- p:createFile(java.lang.String,java.lang.String,com.intellij.psi.PsiDirectory):com.intellij.psi.PsiElement - p:createFile(java.lang.String,java.lang.String,com.intellij.psi.PsiDirectory):com.intellij.psi.PsiElement
- pa:doCreate(com.intellij.psi.PsiDirectory,java.lang.String,java.lang.String):com.intellij.psi.PsiElement - pa:doCreate(com.intellij.psi.PsiDirectory,java.lang.String,java.lang.String):com.intellij.psi.PsiElement
- getCategory():java.lang.String
- pa:getNavigationElement(com.intellij.psi.PsiElement):com.intellij.psi.PsiElement - pa:getNavigationElement(com.intellij.psi.PsiElement):com.intellij.psi.PsiElement
- p:isAvailable(com.intellij.openapi.actionSystem.DataContext):Z - p:isAvailable(com.intellij.openapi.actionSystem.DataContext):Z
- s:isAvailable(com.intellij.openapi.actionSystem.DataContext,java.util.Set,java.util.function.Predicate):Z - s:isAvailable(com.intellij.openapi.actionSystem.DataContext,java.util.Set,java.util.function.Predicate):Z
@@ -11383,30 +11386,6 @@ c:com.intellij.ide.scratch.ScratchFileActions$ChangeLanguageAction
- p:getChangeLanguageActionName(java.lang.String):java.lang.String - p:getChangeLanguageActionName(java.lang.String):java.lang.String
- p:getChangeLanguageTitle():java.lang.String - p:getChangeLanguageTitle():java.lang.String
- update(com.intellij.openapi.actionSystem.AnActionEvent):V - update(com.intellij.openapi.actionSystem.AnActionEvent):V
f:com.intellij.ide.scratch.ScratchFileActions$ExportToScratchAction
- com.intellij.openapi.project.DumbAwareAction
- <init>():V
- actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent):V
- getActionUpdateThread():com.intellij.openapi.actionSystem.ActionUpdateThread
- update(com.intellij.openapi.actionSystem.AnActionEvent):V
f:com.intellij.ide.scratch.ScratchFileActions$NewBufferAction
- com.intellij.openapi.project.DumbAwareAction
- <init>():V
- actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent):V
- getActionUpdateThread():com.intellij.openapi.actionSystem.ActionUpdateThread
- update(com.intellij.openapi.actionSystem.AnActionEvent):V
f:com.intellij.ide.scratch.ScratchFileActions$NewFileAction
- com.intellij.openapi.project.DumbAwareAction
- <init>():V
- actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent):V
- getActionUpdateThread():com.intellij.openapi.actionSystem.ActionUpdateThread
- update(com.intellij.openapi.actionSystem.AnActionEvent):V
f:com.intellij.ide.scratch.ScratchFileActions$ShowFilesPopupAction
- com.intellij.openapi.project.DumbAwareAction
- <init>():V
- actionPerformed(com.intellij.openapi.actionSystem.AnActionEvent):V
- getActionUpdateThread():com.intellij.openapi.actionSystem.ActionUpdateThread
- update(com.intellij.openapi.actionSystem.AnActionEvent):V
a:com.intellij.ide.scratch.ScratchFileCreationHelper a:com.intellij.ide.scratch.ScratchFileCreationHelper
- sf:EXTENSION:com.intellij.lang.LanguageExtension - sf:EXTENSION:com.intellij.lang.LanguageExtension
- <init>():V - <init>():V

View File

@@ -7,6 +7,7 @@ import com.intellij.ide.fileTemplates.FileTemplateUtil;
import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase; import com.intellij.ide.fileTemplates.actions.CreateFromTemplateActionBase;
import com.intellij.ide.util.PropertiesComponent; import com.intellij.ide.util.PropertiesComponent;
import com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageCounterCollector; import com.intellij.internal.statistic.collectors.fus.fileTypes.FileTypeUsageCounterCollector;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsActions; import com.intellij.openapi.util.NlsActions;
@@ -26,9 +27,6 @@ import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.function.Supplier; import java.util.function.Supplier;
/**
* @author Dmitry Avdeev
*/
public abstract class CreateFileFromTemplateAction extends CreateFromTemplateAction<PsiFile> { public abstract class CreateFileFromTemplateAction extends CreateFromTemplateAction<PsiFile> {
protected CreateFileFromTemplateAction() { protected CreateFileFromTemplateAction() {
@@ -114,7 +112,7 @@ public abstract class CreateFileFromTemplateAction extends CreateFromTemplateAct
throw e; throw e;
} }
catch (Exception e) { catch (Exception e) {
LOG.error(e); Logger.getInstance(CreateFileFromTemplateAction.class).error(e);
} }
return null; return null;

View File

@@ -31,6 +31,10 @@ import java.util.function.Supplier;
public abstract class CreateFromTemplateAction<T extends PsiElement> extends AnAction implements WriteActionAware { public abstract class CreateFromTemplateAction<T extends PsiElement> extends AnAction implements WriteActionAware {
/**
* @deprecated Declare your own LOG where needed.
*/
@Deprecated
protected static final Logger LOG = Logger.getInstance(CreateFromTemplateAction.class); protected static final Logger LOG = Logger.getInstance(CreateFromTemplateAction.class);
protected CreateFromTemplateAction() { protected CreateFromTemplateAction() {

View File

@@ -7,6 +7,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.LangDataKeys; import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.module.ModuleUtilCore;
@@ -32,7 +33,13 @@ import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.function.Supplier; import java.util.function.Supplier;
public abstract class CreateTemplateInPackageAction<T extends PsiElement> extends CreateFromTemplateAction<T> { public abstract class CreateTemplateInPackageAction<T extends PsiElement> extends CreateFromTemplateAction<T>
implements NewFileActionWithCategory {
private static final @NotNull Logger LOG = Logger.getInstance(CreateTemplateInPackageAction.class);
public static final String JAVA_NEW_FILE_CATEGORY = "Java";
private final @Nullable Set<? extends JpsModuleSourceRootType<?>> mySourceRootTypes; private final @Nullable Set<? extends JpsModuleSourceRootType<?>> mySourceRootTypes;
protected CreateTemplateInPackageAction(String text, String description, Icon icon, protected CreateTemplateInPackageAction(String text, String description, Icon icon,
@@ -57,6 +64,11 @@ public abstract class CreateTemplateInPackageAction<T extends PsiElement> extend
mySourceRootTypes = rootTypes; mySourceRootTypes = rootTypes;
} }
@Override
public @NotNull String getCategory() {
return JAVA_NEW_FILE_CATEGORY;
}
@Override @Override
protected @Nullable T createFile(String name, String templateName, PsiDirectory dir) { protected @Nullable T createFile(String name, String templateName, PsiDirectory dir) {
return checkOrCreate(name, dir, templateName); return checkOrCreate(name, dir, templateName);

View File

@@ -0,0 +1,15 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.actions;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
/**
* Hides some of the plugin New File... actions depending on context. For instance, web development templates in Java source sets.
*/
@ApiStatus.Experimental
public interface NewFileActionCategoryHandler {
@NotNull ThreeState isVisible(@NotNull DataContext dataContext, @NotNull String category);
}

View File

@@ -0,0 +1,13 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.actions;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
/**
* Marks actions in New File... popup with a named category.
*/
@ApiStatus.Experimental
public interface NewFileActionWithCategory {
@NotNull String getCategory();
}

View File

@@ -0,0 +1,12 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.ide.actions;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import org.jetbrains.annotations.NotNull;
final class NewWebDevelopmentGroup extends DefaultActionGroup implements NewFileActionWithCategory {
@Override
public @NotNull String getCategory() {
return "Web";
}
}

View File

@@ -4,18 +4,23 @@ package com.intellij.ide.actions;
import com.intellij.idea.ActionsBundle; import com.intellij.idea.ActionsBundle;
import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.actionSystem.ex.ActionUtil; import com.intellij.openapi.actionSystem.ex.ActionUtil;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.TextWithMnemonic; import com.intellij.openapi.util.text.TextWithMnemonic;
import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.awt.RelativePoint;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*; import java.awt.*;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier; import java.util.function.Supplier;
@ApiStatus.Internal @ApiStatus.Internal
@@ -52,6 +57,15 @@ public class WeighingNewActionGroup extends WeighingActionGroup implements DumbA
} }
} }
@Override
public AnAction @NotNull [] getChildren(@Nullable AnActionEvent e) {
AnAction[] originalChildren = super.getChildren(e);
if (e == null) return originalChildren;
return NewActionCategoryManager.filterVisibleCategories(originalChildren, e.getDataContext());
}
@Override @Override
protected boolean shouldBeChosenAnyway(@NotNull AnAction action) { protected boolean shouldBeChosenAnyway(@NotNull AnAction action) {
final Class<? extends AnAction> aClass = action.getClass(); final Class<? extends AnAction> aClass = action.getClass();
@@ -80,3 +94,41 @@ public class WeighingNewActionGroup extends WeighingActionGroup implements DumbA
return Registry.is("ide.project.view.new.file.popup"); return Registry.is("ide.project.view.new.file.popup");
} }
} }
final class NewActionCategoryManager {
private static final ExtensionPointName<NewFileActionCategoryHandler> EP_NAME =
ExtensionPointName.create("com.intellij.newFileActionCategoryHandler");
public static AnAction[] filterVisibleCategories(AnAction @NotNull [] actions, @NotNull DataContext context) {
List<@NotNull NewFileActionCategoryHandler> handlers = EP_NAME.getExtensionList();
if (handlers.isEmpty()) return actions;
List<String> hiddenCategories = new ArrayList<>();
List<AnAction> visible = new ArrayList<>(actions.length);
for (AnAction action : actions) {
if (!(action instanceof NewFileActionWithCategory)) {
visible.add(action);
continue;
}
String category = ((NewFileActionWithCategory)action).getCategory();
if (hiddenCategories.contains(category)) continue;
boolean isVisible = true;
for (NewFileActionCategoryHandler handler : handlers) {
if (handler.isVisible(context, category) == ThreeState.NO) {
hiddenCategories.add(category);
isVisible = false;
break;
}
}
if (isVisible) {
visible.add(action);
}
}
return visible.toArray(AnAction.EMPTY_ARRAY);
}
}

View File

@@ -3,6 +3,7 @@ package com.intellij.ide.scratch;
import com.intellij.icons.AllIcons; import com.intellij.icons.AllIcons;
import com.intellij.ide.actions.NewActionGroup; import com.intellij.ide.actions.NewActionGroup;
import com.intellij.ide.actions.NewFileActionWithCategory;
import com.intellij.ide.actions.RecentLocationsAction; import com.intellij.ide.actions.RecentLocationsAction;
import com.intellij.ide.scratch.ScratchImplUtil.LanguageItem; import com.intellij.ide.scratch.ScratchImplUtil.LanguageItem;
import com.intellij.ide.util.DeleteHandler; import com.intellij.ide.util.DeleteHandler;
@@ -62,8 +63,7 @@ public final class ScratchFileActions {
return ourCurrentBuffer; return ourCurrentBuffer;
} }
static final class NewFileAction extends DumbAwareAction implements NewFileActionWithCategory {
public static final class NewFileAction extends DumbAwareAction {
private static final String ACTION_ID = "NewScratchFile"; private static final String ACTION_ID = "NewScratchFile";
private final NotNullLazyValue<@Nls String> myActionText = NotNullLazyValue.lazy(() -> { private final NotNullLazyValue<@Nls String> myActionText = NotNullLazyValue.lazy(() -> {
@@ -169,9 +169,14 @@ public final class ScratchFileActions {
presentation.setIcon(null); presentation.setIcon(null);
} }
} }
@Override
public @NotNull String getCategory() {
return "Scratch";
}
} }
public static final class NewBufferAction extends DumbAwareAction { static final class NewBufferAction extends DumbAwareAction {
@Override @Override
public @NotNull ActionUpdateThread getActionUpdateThread() { public @NotNull ActionUpdateThread getActionUpdateThread() {
@@ -388,7 +393,7 @@ public final class ScratchFileActions {
} }
} }
public static final class ShowFilesPopupAction extends DumbAwareAction { static final class ShowFilesPopupAction extends DumbAwareAction {
@Override @Override
public @NotNull ActionUpdateThread getActionUpdateThread() { public @NotNull ActionUpdateThread getActionUpdateThread() {
return ActionUpdateThread.BGT; return ActionUpdateThread.BGT;
@@ -447,7 +452,7 @@ public final class ScratchFileActions {
} }
} }
public static final class ExportToScratchAction extends DumbAwareAction { static final class ExportToScratchAction extends DumbAwareAction {
{ {
setEnabledInModalContext(true); setEnabledInModalContext(true);
} }

View File

@@ -706,5 +706,8 @@
<extensionPoint qualifiedName="com.intellij.mlCompletionFeaturesCollector" dynamic="true" beanClass="com.intellij.lang.LanguageExtensionPoint"> <extensionPoint qualifiedName="com.intellij.mlCompletionFeaturesCollector" dynamic="true" beanClass="com.intellij.lang.LanguageExtensionPoint">
<with attribute="implementationClass" implements="com.intellij.codeInsight.inline.completion.features.InlineCompletionFeaturesCollector"/> <with attribute="implementationClass" implements="com.intellij.codeInsight.inline.completion.features.InlineCompletionFeaturesCollector"/>
</extensionPoint> </extensionPoint>
<extensionPoint qualifiedName="com.intellij.newFileActionCategoryHandler" dynamic="true"
interface="com.intellij.ide.actions.NewFileActionCategoryHandler"/>
</extensionPoints> </extensionPoints>
</idea-plugin> </idea-plugin>

View File

@@ -16,7 +16,7 @@
<add-to-group group-id="NewWebDevelopment" anchor="first"/> <add-to-group group-id="NewWebDevelopment" anchor="first"/>
</group> </group>
<group id="NewXmlDescriptor" class="com.intellij.ide.actions.NonTrivialActionGroup" popup="true" icon="AllIcons.FileTypes.Xml"> <group id="NewXmlDescriptor" class="com.intellij.xml.actions.CreateXmlDescriptorGroup" popup="true" icon="AllIcons.FileTypes.Xml">
<add-to-group group-id="NewGroup" anchor="last"/> <add-to-group group-id="NewGroup" anchor="last"/>
</group> </group>

View File

@@ -724,7 +724,7 @@
<reference id="NewScratchFile"/> <reference id="NewScratchFile"/>
<action id="NewDir" class="com.intellij.ide.actions.CreateDirectoryOrPackageAction"/> <action id="NewDir" class="com.intellij.ide.actions.CreateDirectoryOrPackageAction"/>
<group class="com.intellij.ide.fileTemplates.actions.FileTemplateSeparator" id="FileTemplateSeparatorGroup"/> <group class="com.intellij.ide.fileTemplates.actions.FileTemplateSeparator" id="FileTemplateSeparatorGroup"/>
<group id="NewWebDevelopment"/> <group id="NewWebDevelopment" class="com.intellij.ide.actions.NewWebDevelopmentGroup"/>
<group id="NewFromTemplate" class="com.intellij.ide.fileTemplates.actions.CreateFromTemplateGroup"/> <group id="NewFromTemplate" class="com.intellij.ide.fileTemplates.actions.CreateFromTemplateGroup"/>
</group> </group>

View File

@@ -4,6 +4,7 @@ package org.editorconfig.configmanagement.create;
import com.intellij.application.options.CodeStyle; import com.intellij.application.options.CodeStyle;
import com.intellij.icons.AllIcons; import com.intellij.icons.AllIcons;
import com.intellij.ide.IdeView; import com.intellij.ide.IdeView;
import com.intellij.ide.actions.NewFileActionWithCategory;
import com.intellij.ide.actions.OpenFileAction; import com.intellij.ide.actions.OpenFileAction;
import com.intellij.lang.Language; import com.intellij.lang.Language;
import com.intellij.notification.Notification; import com.intellij.notification.Notification;
@@ -34,7 +35,7 @@ import org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
import java.util.List; import java.util.List;
public final class CreateEditorConfigAction extends AnAction implements DumbAware { public final class CreateEditorConfigAction extends AnAction implements DumbAware, NewFileActionWithCategory {
private final static Logger LOG = Logger.getInstance(CreateEditorConfigAction.class); private final static Logger LOG = Logger.getInstance(CreateEditorConfigAction.class);
@Override @Override
@@ -77,6 +78,11 @@ public final class CreateEditorConfigAction extends AnAction implements DumbAwar
} }
} }
@Override
public @NotNull String getCategory() {
return "EditorConfig";
}
@Nullable @Nullable
private static PsiFile getPsiFile(@NotNull Project project, @NotNull VirtualFile file) { private static PsiFile getPsiFile(@NotNull Project project, @NotNull VirtualFile file) {
Document document = FileDocumentManager.getInstance().getDocument(file); Document document = FileDocumentManager.getInstance().getDocument(file);

View File

@@ -5,6 +5,7 @@ import com.intellij.icons.AllIcons;
import com.intellij.ide.IdeView; import com.intellij.ide.IdeView;
import com.intellij.ide.actions.CreateDirectoryOrPackageHandler; import com.intellij.ide.actions.CreateDirectoryOrPackageHandler;
import com.intellij.ide.actions.CreateFileFromTemplateDialog; import com.intellij.ide.actions.CreateFileFromTemplateDialog;
import com.intellij.ide.actions.NewFileActionWithCategory;
import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.fileTemplates.FileTemplateManager;
import com.intellij.ide.fileTemplates.FileTemplateUtil; import com.intellij.ide.fileTemplates.FileTemplateUtil;
@@ -31,12 +32,12 @@ import org.jetbrains.annotations.NotNull;
import java.util.function.Consumer; import java.util.function.Consumer;
public final class CreatePackageAction extends DumbAwareAction { public final class CreatePackageAction extends DumbAwareAction implements NewFileActionWithCategory {
private static final Logger LOG = Logger.getInstance(CreatePackageAction.class); private static final Logger LOG = Logger.getInstance(CreatePackageAction.class);
private static final @NonNls String NAMESPACE_PACKAGE_TYPE = "Namespace Package"; private static final @NonNls String NAMESPACE_PACKAGE_TYPE = "Namespace Package";
private static final @NonNls String ORDINARY_PACKAGE_TYPE = "Package"; private static final @NonNls String ORDINARY_PACKAGE_TYPE = "Package";
@Override @Override
public void actionPerformed(@NotNull AnActionEvent e) { public void actionPerformed(@NotNull AnActionEvent e) {
final IdeView view = e.getData(LangDataKeys.IDE_VIEW); final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
@@ -94,6 +95,11 @@ public final class CreatePackageAction extends DumbAwareAction {
}, EmptyConsumer.getInstance()); }, EmptyConsumer.getInstance());
} }
@Override
public @NotNull String getCategory() {
return "Python";
}
private static CreateDirectoryOrPackageHandler getNewOrdinaryPackageHandler(@NotNull Project project, private static CreateDirectoryOrPackageHandler getNewOrdinaryPackageHandler(@NotNull Project project,
@NotNull PsiDirectory directory, @NotNull PsiDirectory directory,
@NotNull SmartPsiElementPointer<PsiDirectory> directoryPointer) { @NotNull SmartPsiElementPointer<PsiDirectory> directoryPointer) {

View File

@@ -3,6 +3,7 @@ package com.jetbrains.python.actions;
import com.intellij.ide.actions.CreateFileFromTemplateAction; import com.intellij.ide.actions.CreateFileFromTemplateAction;
import com.intellij.ide.actions.CreateFileFromTemplateDialog; import com.intellij.ide.actions.CreateFileFromTemplateDialog;
import com.intellij.ide.actions.NewFileActionWithCategory;
import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiDirectory;
@@ -11,8 +12,7 @@ import com.jetbrains.python.PythonFileType;
import com.jetbrains.python.pyi.PyiFileType; import com.jetbrains.python.pyi.PyiFileType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class CreatePythonFileAction extends CreateFileFromTemplateAction implements DumbAware, NewFileActionWithCategory {
public class CreatePythonFileAction extends CreateFileFromTemplateAction implements DumbAware {
public CreatePythonFileAction() { public CreatePythonFileAction() {
super(PyBundle.messagePointer("action.create.python.file.title"), PyBundle.messagePointer("action.create.python.file.description"), PythonFileType.INSTANCE.getIcon()); super(PyBundle.messagePointer("action.create.python.file.title"), PyBundle.messagePointer("action.create.python.file.description"), PythonFileType.INSTANCE.getIcon());
} }
@@ -30,4 +30,9 @@ public class CreatePythonFileAction extends CreateFileFromTemplateAction impleme
protected String getActionName(PsiDirectory directory, @NotNull String newName, String templateName) { protected String getActionName(PsiDirectory directory, @NotNull String newName, String templateName) {
return PyBundle.message("create.python.file.script.action", newName); return PyBundle.message("create.python.file.script.action", newName);
} }
@Override
public @NotNull String getCategory() {
return "Python";
}
} }

View File

@@ -0,0 +1,13 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.xml.actions;
import com.intellij.ide.actions.NewFileActionWithCategory;
import com.intellij.ide.actions.NonTrivialActionGroup;
import org.jetbrains.annotations.NotNull;
final class CreateXmlDescriptorGroup extends NonTrivialActionGroup implements NewFileActionWithCategory {
@Override
public @NotNull String getCategory() {
return "XML";
}
}