| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* |
| * User: anna |
| * Date: 16-Jan-2008 |
| */ |
| package com.intellij.packageDependencies.ui; |
| |
| import com.intellij.icons.AllIcons; |
| import com.intellij.ide.IdeBundle; |
| import com.intellij.ide.util.scopeChooser.GroupByScopeTypeAction; |
| import com.intellij.openapi.actionSystem.AnAction; |
| import com.intellij.openapi.diagnostic.Logger; |
| import com.intellij.openapi.project.Project; |
| import com.intellij.openapi.roots.ProjectRootManager; |
| import com.intellij.openapi.util.text.StringUtil; |
| import com.intellij.openapi.vfs.VirtualFile; |
| import com.intellij.psi.*; |
| import com.intellij.psi.search.scope.packageSet.PackageSet; |
| import com.intellij.psi.search.scope.packageSet.PatternPackageSet; |
| import org.jetbrains.annotations.NonNls; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| import javax.swing.*; |
| import java.util.Set; |
| |
| public class PackagePatternProvider extends PatternDialectProvider { |
| @NonNls public static final String PACKAGES = "package"; |
| private static final Logger LOG = Logger.getInstance("#" + PackagePatternProvider.class.getName()); |
| |
| @Nullable |
| private static GeneralGroupNode getGroupParent(PackageDependenciesNode node) { |
| if (node instanceof GeneralGroupNode) return (GeneralGroupNode)node; |
| if (node == null || node instanceof RootNode) return null; |
| return getGroupParent((PackageDependenciesNode)node.getParent()); |
| } |
| |
| public PackageSet createPackageSet(final PackageDependenciesNode node, final boolean recursively) { |
| GeneralGroupNode groupParent = getGroupParent(node); |
| String scope1 = PatternPackageSet.SCOPE_ANY; |
| if (groupParent != null) { |
| String name = groupParent.toString(); |
| if (TreeModelBuilder.PRODUCTION_NAME.equals(name)) { |
| scope1 = PatternPackageSet.SCOPE_SOURCE; |
| } |
| else if (TreeModelBuilder.TEST_NAME.equals(name)) { |
| scope1 = PatternPackageSet.SCOPE_TEST; |
| } |
| else if (TreeModelBuilder.LIBRARY_NAME.equals(name)) { |
| scope1 = PatternPackageSet.SCOPE_LIBRARY; |
| } |
| } |
| final String scope = scope1; |
| if (node instanceof ModuleGroupNode){ |
| if (!recursively) return null; |
| @NonNls final String modulePattern = "group:" + ((ModuleGroupNode)node).getModuleGroup().toString(); |
| return new PatternPackageSet("*..*", scope, modulePattern); |
| } else if (node instanceof ModuleNode) { |
| if (!recursively) return null; |
| final String modulePattern = ((ModuleNode)node).getModuleName(); |
| return new PatternPackageSet("*..*", scope, modulePattern); |
| } |
| else if (node instanceof PackageNode) { |
| String pattern = ((PackageNode)node).getPackageQName(); |
| if (pattern != null) { |
| pattern += recursively ? "..*" : ".*"; |
| } |
| else { |
| pattern = recursively ? "*..*" : "*"; |
| } |
| |
| return new PatternPackageSet(pattern, scope, getModulePattern(node)); |
| } |
| else if (node instanceof FileNode) { |
| if (recursively) return null; |
| FileNode fNode = (FileNode)node; |
| final PsiElement element = fNode.getPsiElement(); |
| String qName = null; |
| if (element instanceof PsiClassOwner) { |
| final PsiClassOwner javaFile = (PsiClassOwner)element; |
| final VirtualFile virtualFile = javaFile.getVirtualFile(); |
| LOG.assertTrue(virtualFile != null); |
| final String packageName = |
| ProjectRootManager.getInstance(element.getProject()).getFileIndex().getPackageNameByDirectory(virtualFile.getParent()); |
| final String name = virtualFile.getNameWithoutExtension(); |
| if (!PsiNameHelper.getInstance(element.getProject()).isIdentifier(name)) return null; |
| qName = StringUtil.getQualifiedName(packageName, name); |
| } |
| if (qName != null) { |
| return new PatternPackageSet(qName, scope, getModulePattern(node)); |
| } |
| } |
| else if (node instanceof GeneralGroupNode) { |
| return new PatternPackageSet("*..*", scope, null); |
| } |
| |
| return null; |
| } |
| |
| public Icon getIcon() { |
| return AllIcons.General.PackagesTab; |
| } |
| |
| public TreeModel createTreeModel(final Project project, final Marker marker) { |
| return TreeModelBuilder.createTreeModel(project, false, marker); |
| } |
| |
| public TreeModel createTreeModel(final Project project, final Set<PsiFile> deps, final Marker marker, |
| final DependenciesPanel.DependencyPanelSettings settings) { |
| return TreeModelBuilder.createTreeModel(project, false, deps, marker, settings); |
| } |
| |
| public String getDisplayName() { |
| return IdeBundle.message("title.packages"); |
| } |
| |
| @NotNull |
| public String getShortName() { |
| return PACKAGES; |
| } |
| |
| public AnAction[] createActions(Project project, final Runnable update) { |
| return new AnAction[]{new GroupByScopeTypeAction(update)}; |
| } |
| } |