public void actionPerformed(AnActionEvent e) { final PackageDependenciesNode leftNode = myLeftTree.getSelectedNode(); final PackageDependenciesNode rightNode = myRightTree.getSelectedNode(); if (leftNode != null && rightNode != null) { boolean hasDirectDependencies = myTransitiveBorder == 0; if (myTransitiveBorder > 0) { final Set<PsiFile> searchIn = getSelectedScope(myLeftTree); final Set<PsiFile> searchFor = getSelectedScope(myRightTree); for (DependenciesBuilder builder : myBuilders) { if (hasDirectDependencies) break; for (PsiFile from : searchIn) { if (hasDirectDependencies) break; for (PsiFile to : searchFor) { if (hasDirectDependencies) break; final List<List<PsiFile>> paths = builder.findPaths(from, to); for (List<PsiFile> path : paths) { if (path.isEmpty()) { hasDirectDependencies = true; break; } } } } } } final PatternDialectProvider provider = PatternDialectProvider.getInstance(mySettings.SCOPE_TYPE); PackageSet leftPackageSet = provider.createPackageSet(leftNode, true); if (leftPackageSet == null) { leftPackageSet = provider.createPackageSet(leftNode, false); } LOG.assertTrue(leftPackageSet != null); PackageSet rightPackageSet = provider.createPackageSet(rightNode, true); if (rightPackageSet == null) { rightPackageSet = provider.createPackageSet(rightNode, false); } LOG.assertTrue(rightPackageSet != null); if (hasDirectDependencies) { DependencyValidationManager.getInstance(myProject) .addRule( new DependencyRule( new NamedScope.UnnamedScope(leftPackageSet), new NamedScope.UnnamedScope(rightPackageSet), true)); rebuild(); } else { Messages.showErrorDialog( DependenciesPanel.this, "Rule was not added.\n There is no direct dependency between \'" + leftPackageSet.getText() + "\' and \'" + rightPackageSet.getText() + "\'", AnalysisScopeBundle.message("mark.dependency.illegal.text")); } } }
public void update(final AnActionEvent e) { final Presentation presentation = e.getPresentation(); presentation.setEnabled(false); final PackageDependenciesNode leftNode = myLeftTree.getSelectedNode(); final PackageDependenciesNode rightNode = myRightTree.getSelectedNode(); if (leftNode != null && rightNode != null) { final PatternDialectProvider provider = PatternDialectProvider.getInstance(mySettings.SCOPE_TYPE); presentation.setEnabled( (provider.createPackageSet(leftNode, true) != null || provider.createPackageSet(leftNode, false) != null) && (provider.createPackageSet(rightNode, true) != null || provider.createPackageSet(rightNode, false) != null)); } }