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; } }