Merge remote-tracking branch 'origin/master'

This commit is contained in:
Ilya.Kazakevich
2015-06-15 21:27:06 +03:00
10 changed files with 126 additions and 40 deletions
@@ -24,11 +24,14 @@ import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.PsiRecursiveElementVisitor;
import com.intellij.util.Processor;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
@@ -85,35 +88,45 @@ public class BackwardDependenciesBuilder extends DependenciesBuilder {
psiManager.startBatchFilesProcessingMode();
try {
final int fileCount = getScope().getFileCount();
getScope().accept(new PsiRecursiveElementVisitor() {
@Override public void visitFile(final PsiFile file) {
final boolean includeTestSource = getScope().isIncludeTestSource();
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(getProject()).getFileIndex();
getScope().accept(new Processor<VirtualFile>() {
@Override
public boolean process(final VirtualFile virtualFile) {
if (!includeTestSource && fileIndex.isInTestSourceContent(virtualFile)) {
return true;
}
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
if (indicator != null) {
if (indicator.isCanceled()) {
throw new ProcessCanceledException();
}
indicator.setText(AnalysisScopeBundle.message("package.dependencies.progress.text"));
final VirtualFile virtualFile = file.getVirtualFile();
if (virtualFile != null) {
indicator.setText2(getRelativeToProjectPath(virtualFile));
}
indicator.setText2(getRelativeToProjectPath(virtualFile));
if (fileCount > 0) {
indicator.setFraction(((double)++myFileCount) / myTotalFileCount);
}
}
final Map<PsiFile, Set<PsiFile>> dependencies = builder.getDependencies();
for (final PsiFile psiFile : dependencies.keySet()) {
if (dependencies.get(psiFile).contains(file)) {
Set<PsiFile> fileDeps = getDependencies().get(file);
if (fileDeps == null) {
fileDeps = new HashSet<PsiFile>();
getDependencies().put(file, fileDeps);
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
final PsiFile file = psiManager.findFile(virtualFile);
if (file != null) {
final Map<PsiFile, Set<PsiFile>> dependencies = builder.getDependencies();
for (final PsiFile psiFile : dependencies.keySet()) {
if (dependencies.get(psiFile).contains(file)) {
Set<PsiFile> fileDeps = getDependencies().get(file);
if (fileDeps == null) {
fileDeps = new HashSet<PsiFile>();
getDependencies().put(file, fileDeps);
}
fileDeps.add(psiFile);
}
}
psiManager.dropResolveCaches();
}
fileDeps.add(psiFile);
}
}
psiManager.dropResolveCaches();
InjectedLanguageManager.getInstance(file.getProject()).dropFileCaches(file);
});
return true;
}
});
}
@@ -138,7 +138,8 @@ public class ForwardDependenciesBuilder extends DependenciesBuilder {
(fileIndex.isInContent(virtualFile) ||
fileIndex.isInLibraryClasses(virtualFile) ||
fileIndex.isInLibrarySource(virtualFile))) {
found.add(dependencyFile);
final PsiElement navigationElement = dependencyFile.getNavigationElement();
found.add(navigationElement instanceof PsiFile ? (PsiFile)navigationElement : dependencyFile);
}
}
}
@@ -99,6 +99,12 @@ public class FindDependencyUtil {
@Override
public void process(PsiElement place, PsiElement dependency) {
PsiFile dependencyFile = dependency.getContainingFile();
if (dependencyFile != null) {
final PsiElement navigationElement = dependencyFile.getNavigationElement();
if (navigationElement instanceof PsiFile) {
dependencyFile = (PsiFile)navigationElement;
}
}
if (searchFor.contains(dependencyFile)) {
usages.add(new UsageInfo(place));
}
@@ -135,8 +135,9 @@ public class EditorHyperlinkSupport {
@Override
public void run() {
if (hyperlinkInfo instanceof HyperlinkInfoBase) {
RelativePoint point = new RelativePoint(myEditor.getContentComponent(), myEditor.logicalPositionToXY(logical));
((HyperlinkInfoBase)hyperlinkInfo).navigate(myProject, point);
final Point point = myEditor.logicalPositionToXY(logical);
final MouseEvent event = new MouseEvent(myEditor.getContentComponent(), 0, 0, 0, point.x, point.y, 1, false);
((HyperlinkInfoBase)hyperlinkInfo).navigate(myProject, new RelativePoint(event));
}
else {
hyperlinkInfo.navigate(myProject);
@@ -37,7 +37,7 @@ public class ColorProgressBar extends JComponent {
private static final Dimension PREFERRED_SIZE = new Dimension(146, 17);
public static final Color GREEN = new JBColor(new Color(0x6cad74), new Color(0x4a8c53));
public static final Color RED = new JBColor(new Color(0xd67b76), new Color(0xb25050));
public static final Color RED = new JBColor(new Color(0xd67b76), new Color(0xe55757));
public static final Color BLUE = new JBColor(new Color(1, 68, 208), JBColor.blue);
public static final Color YELLOW = new JBColor(new Color(0xa67a21), new Color(0x91703a));
private static final Color SHADOW1 = new JBColor(Gray._190, UIUtil.getBorderColor()) ;
@@ -22,6 +22,7 @@ package com.intellij.execution.testframework.stacktrace;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.filters.HyperlinkInfo;
import com.intellij.execution.filters.HyperlinkInfoBase;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.Printable;
import com.intellij.execution.testframework.Printer;
@@ -31,6 +32,9 @@ import com.intellij.ide.DataManager;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.ui.awt.RelativePoint;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
@@ -135,9 +139,13 @@ public class DiffHyperlink implements Printable {
return result;
}
public class DiffHyperlinkInfo implements HyperlinkInfo {
public void navigate(final Project project) {
ViewAssertEqualsDiffAction.openDiff(DataManager.getInstance().getDataContext(), DiffHyperlink.this);
public class DiffHyperlinkInfo extends HyperlinkInfoBase {
@Override
public void navigate(@NotNull Project project, @Nullable RelativePoint hyperlinkLocationPoint) {
final DataManager dataManager = DataManager.getInstance();
final DataContext dataContext = hyperlinkLocationPoint != null ?
dataManager.getDataContext(hyperlinkLocationPoint.getOriginalComponent()) : dataManager.getDataContext();
ViewAssertEqualsDiffAction.openDiff(dataContext, DiffHyperlink.this);
}
public DiffHyperlink getPrintable() {
@@ -24,15 +24,22 @@ import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.editor.Caret;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.markup.HighlighterTargetArea;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
import com.intellij.openapi.util.AsyncResult;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
@@ -57,13 +64,17 @@ import com.intellij.xdebugger.impl.breakpoints.XLineBreakpointVariantsProvider;
import com.intellij.xdebugger.impl.breakpoints.ui.grouping.XBreakpointFileGroupingRule;
import com.intellij.xdebugger.impl.evaluate.quick.common.ValueLookupManager;
import com.intellij.xdebugger.impl.settings.XDebuggerSettingsManager;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase;
import com.intellij.xdebugger.settings.XDebuggerSettings;
import com.intellij.xdebugger.ui.DebuggerColors;
import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.util.*;
/**
@@ -71,7 +82,7 @@ import java.util.*;
*/
public class XDebuggerUtilImpl extends XDebuggerUtil {
private XLineBreakpointType<?>[] myLineBreakpointTypes;
private Map<Class<? extends XBreakpointType>, XBreakpointType<?,?>> myBreakpointTypeByClass;
private Map<Class<? extends XBreakpointType>, XBreakpointType<?, ?>> myBreakpointTypeByClass;
@Override
public XLineBreakpointType<?>[] getLineBreakpointTypes() {
@@ -125,10 +136,10 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
@NotNull
public static <P extends XBreakpointProperties> AsyncResult<XLineBreakpoint> toggleAndReturnLineBreakpoint(@NotNull final Project project,
@NotNull final XLineBreakpointType<P> type,
@NotNull final XSourcePosition position,
final boolean temporary,
final RelativePoint relativePoint) {
@NotNull final XLineBreakpointType<P> type,
@NotNull final XSourcePosition position,
final boolean temporary,
@Nullable final Editor editor) {
return new WriteAction<AsyncResult<XLineBreakpoint>>() {
@Override
protected void run(@NotNull Result<AsyncResult<XLineBreakpoint>> result) throws Throwable {
@@ -144,10 +155,47 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
final XLineBreakpointVariantsProvider<XLineBreakpointVariant> provider =
(XLineBreakpointVariantsProvider<XLineBreakpointVariant>)type;
List<XLineBreakpointVariant> variants = provider.computeLineBreakpointVariants(project, position);
if (!variants.isEmpty()) {
if (!variants.isEmpty() && editor != null) {
RelativePoint relativePoint = DebuggerUIUtil.calcPopupLocation(editor, line);
if (variants.size() > 1 && relativePoint != null) {
final AsyncResult<XLineBreakpoint> res = new AsyncResult<XLineBreakpoint>();
JBPopupFactory.getInstance().createListPopup(
class MySelectionListener implements ListSelectionListener {
RangeHighlighter myHighlighter = null;
@Override
public void valueChanged(ListSelectionEvent e) {
if (!e.getValueIsAdjusting()) {
clearHighlighter();
Object value = ((JList)e.getSource()).getSelectedValue();
if (value instanceof XLineBreakpointVariant) {
TextRange range = ((XLineBreakpointVariant)value).getHighlightRange();
TextRange lineRange =
TextRange.create(editor.getDocument().getLineStartOffset(line), editor.getDocument().getLineEndOffset(line));
if (range != null) {
range = range.intersection(lineRange);
}
else {
range = lineRange;
}
if (range != null && !range.isEmpty()) {
EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
TextAttributes attributes = scheme.getAttributes(DebuggerColors.BREAKPOINT_ATTRIBUTES);
myHighlighter = editor.getMarkupModel().addRangeHighlighter(
range.getStartOffset(), range.getEndOffset(), DebuggerColors.BREAKPOINT_HIGHLIGHTER_LAYER, attributes,
HighlighterTargetArea.EXACT_RANGE);
}
}
}
}
private void clearHighlighter() {
if (myHighlighter != null) {
myHighlighter.dispose();
}
}
}
final MySelectionListener selectionListener = new MySelectionListener();
ListPopup popup = JBPopupFactory.getInstance().createListPopup(
new BaseListPopupStep<XLineBreakpointVariant>("Create breakpoint for", variants) {
@NotNull
@Override
@@ -160,8 +208,14 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
return value.getIcon();
}
@Override
public void canceled() {
selectionListener.clearHighlighter();
}
@Override
public PopupStep onChosen(final XLineBreakpointVariant selectedValue, boolean finalChoice) {
selectionListener.clearHighlighter();
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
@@ -171,7 +225,9 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
});
return FINAL_CHOICE;
}
}).show(relativePoint);
});
popup.addListSelectionListener(selectionListener);
popup.show(relativePoint);
result.setResult(res);
return;
}
@@ -206,7 +262,7 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
@Override
public <B extends XBreakpoint<?>> XBreakpointType<B, ?> findBreakpointType(@NotNull Class<? extends XBreakpointType<B, ?>> typeClass) {
if (myBreakpointTypeByClass == null) {
myBreakpointTypeByClass = new THashMap<Class<? extends XBreakpointType>, XBreakpointType<?,?>>();
myBreakpointTypeByClass = new THashMap<Class<? extends XBreakpointType>, XBreakpointType<?, ?>>();
for (XBreakpointType<?, ?> breakpointType : XBreakpointUtil.getBreakpointTypes()) {
myBreakpointTypeByClass.put(breakpointType.getClass(), breakpointType);
}
@@ -275,7 +331,7 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
@Nullable
private static Editor getEditor(@NotNull Project project, DataContext context) {
Editor editor = CommonDataKeys.EDITOR.getData(context);
if(editor == null) {
if (editor == null) {
return FileEditorManager.getInstance(project).getSelectedTextEditor();
}
return editor;
@@ -26,7 +26,6 @@ import com.intellij.openapi.util.AsyncResult;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.awt.RelativePoint;
import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.XDebuggerUtil;
import com.intellij.xdebugger.XSourcePosition;
@@ -36,7 +35,6 @@ import com.intellij.xdebugger.impl.XDebuggerUtilImpl;
import com.intellij.xdebugger.impl.XSourcePositionImpl;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -123,8 +121,9 @@ public class XBreakpointUtil {
List<BreakpointItem> items = new ArrayList<BreakpointItem>();
for (DebuggerSupport support : debuggerSupports) {
support.getBreakpointPanelProvider().provideBreakpointItems(project, items);
if (items.contains(breakpointItem))
if (items.contains(breakpointItem)) {
return support;
}
items.clear();
}
return null;
@@ -180,9 +179,8 @@ public class XBreakpointUtil {
if (typeWinner != null) {
XSourcePosition winPosition = (lineStart == lineWinner) ? position : XSourcePositionImpl.create(file, lineWinner);
if (winPosition != null) {
RelativePoint point = editor != null ? DebuggerUIUtil.calcPopupLocation(editor, lineWinner) : null;
AsyncResult<XLineBreakpoint> res =
XDebuggerUtilImpl.toggleAndReturnLineBreakpoint(project, typeWinner, winPosition, temporary, point);
XDebuggerUtilImpl.toggleAndReturnLineBreakpoint(project, typeWinner, winPosition, temporary, editor);
if (editor != null && lineStart != lineWinner) {
int offset = editor.getDocument().getLineStartOffset(lineWinner);
+3
View File
@@ -200,6 +200,9 @@ def getVariable(thread_id, frame_id, scope, attrs):
else:
attrList = []
for attr in attrList:
attr.replace("@_@TAB_CHAR@_@", '\t')
if scope == 'EXPRESSION':
for count in xrange(len(attrList)):
if count == 0:
@@ -26,7 +26,7 @@ public class GetVariableCommand extends GetFrameCommand {
sb.insert(0, BY_ID).insert(0, '\t').insert(0, p.getId());
break;
} else {
sb.insert(0, p.getTempName());
sb.insert(0, p.getTempName().replaceAll("\t", TAB_CHAR));
}
p = p.getParent();
}