diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/actions/CreateFromTemplateAction.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/actions/CreateFromTemplateAction.java index 21696aa98e16..4eac1dbc4db5 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/actions/CreateFromTemplateAction.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/actions/CreateFromTemplateAction.java @@ -22,31 +22,42 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.util.function.Supplier; public class CreateFromTemplateAction extends CreateFromTemplateActionBase { + private final Supplier myTemplate; - private final FileTemplate myTemplate; + // Avoid calling the constructor from normal IDE actions, because: + // - Normal actions are preloaded at startup + // - Accessing FileTemplate out of FileTemplateManager triggers costly initialization + public CreateFromTemplateAction(@NotNull FileTemplate template) { + this(template.getName(), FileTemplateUtil.getIcon(template), () -> template); + } - public CreateFromTemplateAction(FileTemplate template){ - super(template.getName(), null, FileTemplateUtil.getIcon(template)); + public CreateFromTemplateAction(String templateName, @Nullable Icon icon, @NotNull Supplier template){ + super(templateName, null, icon); myTemplate = template; } @Override protected FileTemplate getTemplate(final Project project, final PsiDirectory dir) { - return myTemplate; + return myTemplate.get(); } @Override public void update(AnActionEvent e){ super.update(e); Presentation presentation = e.getPresentation(); - boolean isEnabled = CreateFromTemplateGroup.canCreateFromTemplate(e, myTemplate); + boolean isEnabled = CreateFromTemplateGroup.canCreateFromTemplate(e, myTemplate.get()); presentation.setEnabled(isEnabled); presentation.setVisible(isEnabled); } public FileTemplate getTemplate() { - return myTemplate; + return myTemplate.get(); } }