[code] Project modification

This commit is contained in:
Anna Bulenkova 2014-12-16 15:21:02 +01:00
parent 9b5b5ce1bc
commit 1affae1c7b
2 changed files with 51 additions and 0 deletions

View File

@ -37,5 +37,9 @@
description="Illustrates how to get source roots">
<add-to-group group-id="EditorPopupMenu" anchor="last"/>
</action>
<action id="ProjectModel.ModificationAction" class="com.intellij.plugins.project.model.ModificationAction" text="Project Modification in Action"
description="Illustrates how to get source roots">
<add-to-group group-id="EditorPopupMenu" anchor="last"/>
</action>
</actions>
</idea-plugin>

View File

@ -0,0 +1,47 @@
package com.intellij.plugins.project.model;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.ModuleRootModificationUtil;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
/**
* @author Anna Bulenkova
*/
public class ModificationAction extends AnAction {
@Override
public void actionPerformed(final AnActionEvent event) {
Project project = event.getProject();
if (project == null) return;
Navigatable element = event.getData(CommonDataKeys.NAVIGATABLE);
if (element instanceof PsiClass) {
PsiFile file = ((PsiClass) element).getContainingFile();
if (file == null) return;
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile == null) return;
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
final Module module = fileIndex.getModuleForFile(virtualFile);
if (module == null) return;
if (!ModuleRootManager.getInstance(module).getFileIndex().isInContent(virtualFile)) {
ModuleRootModificationUtil.addModuleLibrary(module, virtualFile.getUrl());
}
}
}
@Override
public void update(final AnActionEvent event) {
Project project = event.getProject();
Navigatable element = event.getData(CommonDataKeys.NAVIGATABLE);
event.getPresentation().setEnabledAndVisible(project != null && element != null);
}
}