mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-6418 Create New Project with separate Module name/subfolder creates bad project structure for Node.js modules
This commit is contained in:
@@ -36,7 +36,7 @@ import java.util.List;
|
||||
*/
|
||||
public abstract class WebProjectTemplate<T> extends WebProjectGenerator<T> implements ProjectTemplate {
|
||||
|
||||
protected final NotNullLazyValue<GeneratorPeer<T>> myPeer = new NotNullLazyValue<GeneratorPeer<T>>() {
|
||||
private final NotNullLazyValue<GeneratorPeer<T>> myPeerHolder = new NotNullLazyValue<GeneratorPeer<T>>() {
|
||||
@NotNull
|
||||
@Override
|
||||
protected GeneratorPeer<T> compute() {
|
||||
@@ -47,59 +47,21 @@ public abstract class WebProjectTemplate<T> extends WebProjectGenerator<T> imple
|
||||
@NotNull
|
||||
@Override
|
||||
public ModuleBuilder createModuleBuilder() {
|
||||
final ModuleBuilder builder = WebModuleType.getInstance().createModuleBuilder();
|
||||
return new ModuleBuilder() {
|
||||
@Override
|
||||
public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
|
||||
builder.setupRootModel(modifiableRootModel);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ModuleType getModuleType() {
|
||||
return builder.getModuleType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
|
||||
List<Module> modules = builder.commit(project, model, modulesProvider);
|
||||
if (modules != null && !modules.isEmpty()) {
|
||||
Module module = modules.get(0);
|
||||
generateProject(module.getProject(), module.getProject().getBaseDir(), myPeer.getValue().getSettings(), module);
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) {
|
||||
GeneratorPeer<T> peer = myPeer.getValue();
|
||||
peer.buildUI(settingsStep);
|
||||
return new ModuleWizardStep() {
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Icon getNodeIcon() {
|
||||
return getIcon();
|
||||
}
|
||||
};
|
||||
return WebModuleType.getInstance().createModuleBuilder(this);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ValidationInfo validateSettings() {
|
||||
return myPeer.getValue().validate();
|
||||
return myPeerHolder.getValue().validate();
|
||||
}
|
||||
|
||||
protected Icon getIcon() {
|
||||
public Icon getIcon() {
|
||||
return WebModuleBuilder.ICON;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public GeneratorPeer<T> getPeer() {
|
||||
return myPeerHolder.getValue();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,10 +17,21 @@ package com.intellij.openapi.module;
|
||||
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
||||
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
|
||||
import com.intellij.ide.util.projectWizard.SettingsStep;
|
||||
import com.intellij.ide.util.projectWizard.WebProjectTemplate;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.WebProjectGenerator;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
@@ -31,6 +42,16 @@ public class WebModuleBuilder extends ModuleBuilder {
|
||||
public static final String GROUP_NAME = "Static Web";
|
||||
public static final Icon ICON = AllIcons.General.Web;
|
||||
|
||||
private final WebProjectTemplate<?> myTemplate;
|
||||
|
||||
public WebModuleBuilder(@NotNull WebProjectTemplate<?> template) {
|
||||
myTemplate = template;
|
||||
}
|
||||
|
||||
public WebModuleBuilder() {
|
||||
myTemplate = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupRootModel(ModifiableRootModel modifiableRootModel) throws ConfigurationException {
|
||||
doAddContentEntry(modifiableRootModel);
|
||||
@@ -48,6 +69,47 @@ public class WebModuleBuilder extends ModuleBuilder {
|
||||
|
||||
@Override
|
||||
public Icon getNodeIcon() {
|
||||
return ICON;
|
||||
return myTemplate != null ? myTemplate.getIcon() : ICON;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Module> commit(Project project, ModifiableModuleModel model, ModulesProvider modulesProvider) {
|
||||
List<Module> modules = super.commit(project, model, modulesProvider);
|
||||
if (modules != null && !modules.isEmpty() && myTemplate != null) {
|
||||
doGenerate(myTemplate, modules.get(0));
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
private static <T> void doGenerate(@NotNull WebProjectTemplate<T> template, @NotNull Module module) {
|
||||
WebProjectGenerator.GeneratorPeer<T> peer = template.getPeer();
|
||||
ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module);
|
||||
VirtualFile[] contentRoots = moduleRootManager.getContentRoots();
|
||||
VirtualFile dir = module.getProject().getBaseDir();
|
||||
if (contentRoots.length > 0 && contentRoots[0] != null) {
|
||||
dir = contentRoots[0];
|
||||
}
|
||||
template.generateProject(module.getProject(), dir, peer.getSettings(), module);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ModuleWizardStep modifySettingsStep(SettingsStep settingsStep) {
|
||||
if (myTemplate == null) {
|
||||
return super.modifySettingsStep(settingsStep);
|
||||
}
|
||||
WebProjectGenerator.GeneratorPeer peer = myTemplate.getPeer();
|
||||
peer.buildUI(settingsStep);
|
||||
return new ModuleWizardStep() {
|
||||
@Override
|
||||
public JComponent getComponent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateDataModel() {
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.intellij.openapi.module;
|
||||
|
||||
import com.intellij.ide.util.projectWizard.ModuleBuilder;
|
||||
import com.intellij.ide.util.projectWizard.WebProjectTemplate;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -16,4 +17,10 @@ public class WebModuleType extends WebModuleTypeBase<ModuleBuilder> {
|
||||
public ModuleBuilder createModuleBuilder() {
|
||||
return new WebModuleBuilder();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public <T> ModuleBuilder createModuleBuilder(@NotNull WebProjectTemplate<T> webProjectTemplate) {
|
||||
return new WebModuleBuilder(webProjectTemplate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user