diff --git a/project_model/META-INF/plugin.xml b/project_model/META-INF/plugin.xml index 135be9e00..79b2d2a00 100644 --- a/project_model/META-INF/plugin.xml +++ b/project_model/META-INF/plugin.xml @@ -37,5 +37,9 @@ description="Illustrates how to get source roots"> + + + \ No newline at end of file diff --git a/project_model/src/com/intellij/plugins/project/model/ModificationAction.java b/project_model/src/com/intellij/plugins/project/model/ModificationAction.java new file mode 100644 index 000000000..fa61936ef --- /dev/null +++ b/project_model/src/com/intellij/plugins/project/model/ModificationAction.java @@ -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); + } +}