private static void groupByValues( @NotNull Collection<PsiElement> leaves, @NotNull SliceRootNode oldRoot, @NotNull Map<SliceNode, Collection<PsiElement>> map) { assert oldRoot.myCachedChildren.size() == 1; SliceRootNode root = createTreeGroupedByValues(leaves, oldRoot, map); SliceNode oldRootStart = oldRoot.myCachedChildren.get(0); SliceUsage rootUsage = oldRootStart.getValue(); String description = SliceManager.getElementDescription(null, rootUsage.getElement(), " (grouped by value)"); SliceManager.getInstance(root.getProject()).createToolWindow(true, root, true, description); }
private static void groupByNullness( NullAnalysisResult result, SliceRootNode oldRoot, final Map<SliceNode, NullAnalysisResult> map) { SliceRootNode root = createNewTree(result, oldRoot, map); SliceUsage rootUsage = oldRoot.myCachedChildren.get(0).getValue(); SliceManager.getInstance(root.getProject()) .createToolWindow( true, root, true, SliceManager.getElementDescription( null, rootUsage.getElement(), " Grouped by Nullness")); }
private static boolean processValuesFlownTo( @NotNull final PsiExpression argument, PsiElement scope, @NotNull final Processor<PsiExpression> processor) { SliceAnalysisParams params = new SliceAnalysisParams(); params.dataFlowToThis = true; params.scope = new AnalysisScope(new LocalSearchScope(scope), argument.getProject()); SliceRootNode rootNode = new SliceRootNode( scope.getProject(), new DuplicateMap(), SliceManager.createRootUsage(argument, params)); Collection<? extends AbstractTreeNode> children = rootNode.getChildren().iterator().next().getChildren(); for (AbstractTreeNode child : children) { SliceUsage usage = (SliceUsage) child.getValue(); PsiElement element = usage.getElement(); if (element instanceof PsiExpression && !processor.process((PsiExpression) element)) return false; } return !children.isEmpty(); }
private SliceTreeStructure configureTree(@NonNls final String name) throws Exception { configureByFile("/codeInsight/slice/backward/" + name + ".java"); PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); PsiElement element = new SliceHandler(true).getExpressionAtCaret(getEditor(), getFile()); assertNotNull(element); Collection<HighlightInfo> errors = highlightErrors(); assertEmpty(errors); SliceAnalysisParams params = new SliceAnalysisParams(); params.scope = new AnalysisScope(getProject()); params.dataFlowToThis = true; SliceUsage usage = SliceUsage.createRootUsage(element, params); SlicePanel panel = new SlicePanel( getProject(), true, new SliceRootNode(getProject(), new DuplicateMap(), usage), false, ToolWindowHeadlessManagerImpl.HEADLESS_WINDOW) { @Override protected void close() {} @Override public boolean isAutoScroll() { return false; } @Override public void setAutoScroll(boolean autoScroll) {} @Override public boolean isPreview() { return false; } @Override public void setPreview(boolean preview) {} }; Disposer.register(getProject(), panel); return (SliceTreeStructure) panel.getBuilder().getTreeStructure(); }