package jetbrains.mps.ide.actions;
/*Generated by MPS */
import jetbrains.mps.workbench.action.BaseAction;
import javax.swing.Icon;
import com.intellij.openapi.actionSystem.AnActionEvent;
import java.util.Map;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.module.SModule;
import jetbrains.mps.project.AbstractModule;
import jetbrains.mps.project.facets.JavaModuleFacet;
import com.intellij.ide.plugins.PluginManager;
import jetbrains.mps.module.ReloadableModule;
import com.intellij.ide.plugins.cl.PluginClassLoader;
import jetbrains.mps.project.structure.modules.ModuleDescriptor;
import jetbrains.mps.ide.project.facets.IdeaPluginModuleFacetImpl;
import jetbrains.mps.vfs.IFile;
public class SetPluginIdToCompileInIdeaModules_Action extends BaseAction {
private static final Icon ICON = null;
public SetPluginIdToCompileInIdeaModules_Action() {
super("Set pluginId to compile in IDEA modules", "Update module facet to reflect actual plugin id of classloader the module has been loaded with.", ICON);
this.setIsAlwaysVisible(false);
this.setExecuteOutsideCommand(false);
}
@Override
public boolean isDumbAware() {
return true;
}
@Override
protected boolean collectActionData(AnActionEvent event, final Map<String, Object> _params) {
if (!(super.collectActionData(event, _params))) {
return false;
}
{
MPSProject p = event.getData(MPSCommonDataKeys.MPS_PROJECT);
if (p == null) {
return false;
}
}
return true;
}
@Override
public void doExecute(@NotNull final AnActionEvent event, final Map<String, Object> _params) {
for (SModule module : event.getData(MPSCommonDataKeys.MPS_PROJECT).getProjectModules()) {
if (!(module instanceof AbstractModule) || (((AbstractModule) module).getModuleDescriptor() == null)) {
System.out.println("Strange module: " + module.getModuleName());
continue;
}
if (module.getFacet(JavaModuleFacet.class) == null || module.getFacet(JavaModuleFacet.class).isCompileInMps()) {
continue;
}
String pluginId = SetPluginIdToCompileInIdeaModules_Action.this.getPluginIdForModule(module, event);
if (pluginId != null) {
SetPluginIdToCompileInIdeaModules_Action.this.setPluginId(module, pluginId, event);
} else {
SetPluginIdToCompileInIdeaModules_Action.this.setPluginId(module, PluginManager.CORE_PLUGIN_ID, event);
}
}
}
/*package*/ String getPluginIdForModule(SModule module, final AnActionEvent event) {
String path = check_z7ebk9_a0a0g(((AbstractModule) module).getModuleSourceDir());
if (path == null) {
System.out.println("null path for " + module.getModuleName());
return null;
}
if (!(module instanceof ReloadableModule)) {
return null;
}
ClassLoader rootClassLoader = ((ReloadableModule) module).getRootClassLoader();
if (!(rootClassLoader instanceof PluginClassLoader)) {
System.out.println("not PluginClassLoader for " + module.getModuleName());
return null;
}
return ((PluginClassLoader) rootClassLoader).getPluginId().getIdString();
}
/*package*/ void setPluginId(SModule module, String pluginId, final AnActionEvent event) {
ModuleDescriptor moduleDescriptor = ((AbstractModule) module).getModuleDescriptor();
if (moduleDescriptor == null) {
return;
}
IdeaPluginModuleFacetImpl facet = new IdeaPluginModuleFacetImpl();
facet.setModule(module);
facet.setPluginId(pluginId);
moduleDescriptor.addFacetDescriptor(facet);
moduleDescriptor.updateFacetDescriptor(facet);
((AbstractModule) module).save();
}
private static String check_z7ebk9_a0a0g(IFile checkedDotOperand) {
if (null != checkedDotOperand) {
return checkedDotOperand.getPath();
}
return null;
}
}