java move to xbreakpoints 2:

- cleanup
- fixed tests
- support run to cursor and smart step into
- support add field/method breakpoint actions
This commit is contained in:
Egor.Ushakov
2014-02-27 20:54:43 +04:00
parent 7a3a6cfbcf
commit d49241278b
15 changed files with 387 additions and 328 deletions
@@ -1477,7 +1477,6 @@ public abstract class DebugProcessImpl implements DebugProcess {
applyThreadFilter(getContextThread());
final SuspendContextImpl context = getSuspendContext();
myRunToCursorBreakpoint.setSuspendPolicy(context.getSuspendPolicy() == EventRequest.SUSPEND_EVENT_THREAD? DebuggerSettings.SUSPEND_THREAD : DebuggerSettings.SUSPEND_ALL);
myRunToCursorBreakpoint.setLogEnabled(false);
myRunToCursorBreakpoint.createRequest(context.getDebugProcess());
DebugProcessImpl.this.myRunToCursorBreakpoint = myRunToCursorBreakpoint;
super.contextAction();
@@ -233,7 +233,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
private void runAction(final EvaluationContextImpl context, LocatableEvent event) {
final DebugProcessImpl debugProcess = context.getDebugProcess();
if (myXBreakpoint.isLogMessage() || myXBreakpoint.getLogExpression() != null) {
if (isLogEnabled() || isLogExpressionEnabled()) {
final StringBuilder buf = StringBuilderSpinAllocator.alloc();
try {
if (myXBreakpoint.isLogMessage()) {
@@ -449,7 +449,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
myXBreakpoint.setEnabled(enabled);
}
public boolean isLogEnabled() {
protected boolean isLogEnabled() {
return myXBreakpoint.isLogMessage();
}
@@ -457,11 +457,11 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
myXBreakpoint.setLogMessage(logEnabled);
}
public boolean isLogExpressionEnabled() {
protected boolean isLogExpressionEnabled() {
return myXBreakpoint.getLogExpression() != null;
}
public void setLogExpressionEnabled(boolean LOG_EXPRESSION_ENABLED) {
protected void setLogExpressionEnabled(boolean LOG_EXPRESSION_ENABLED) {
}
@Override
@@ -504,7 +504,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
return myXBreakpoint.getProperties().getClassExclusionFilters();
}
public void setClassExclusionFilters(ClassFilter[] filters) {
protected void setClassExclusionFilters(ClassFilter[] filters) {
myXBreakpoint.getProperties().setClassExclusionFilters(filters);
}
@@ -526,7 +526,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
myXBreakpoint.getProperties().setInstanceFilters(filters);
}
public static String getSuspendPolicy(XBreakpoint breakpoint) {
private static String getSuspendPolicy(XBreakpoint breakpoint) {
switch (breakpoint.getSuspendPolicy()) {
case ALL:
return DebuggerSettings.SUSPEND_ALL;
@@ -540,7 +540,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
}
}
public static SuspendPolicy transformSuspendPolicy(String policy) {
private static SuspendPolicy transformSuspendPolicy(String policy) {
if (DebuggerSettings.SUSPEND_ALL.equals(policy)) {
return SuspendPolicy.ALL;
} else if (DebuggerSettings.SUSPEND_THREAD.equals(policy)) {
@@ -552,7 +552,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
}
}
public boolean isSuspend() {
protected boolean isSuspend() {
return myXBreakpoint.getSuspendPolicy() != SuspendPolicy.NONE;
}
@@ -565,11 +565,11 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
myXBreakpoint.setSuspendPolicy(transformSuspendPolicy(policy));
}
public void setLogMessage(TextWithImports logMessage) {
protected void setLogMessage(TextWithImports logMessage) {
myXBreakpoint.setLogExpression(logMessage.getText());
}
public boolean isConditionEnabled() {
protected boolean isConditionEnabled() {
return myXBreakpoint.getCondition() != null && !myXBreakpoint.getCondition().isEmpty();
}
@@ -577,7 +577,7 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
myXBreakpoint.setCondition(condition);
}
public void addInstanceFilter(long l) {
protected void addInstanceFilter(long l) {
myXBreakpoint.getProperties().addInstanceFilter(l);
}
}
@@ -30,7 +30,9 @@ import com.intellij.debugger.impl.DebuggerContextListener;
import com.intellij.debugger.impl.DebuggerManagerImpl;
import com.intellij.debugger.impl.DebuggerSession;
import com.intellij.debugger.ui.JavaDebuggerSupport;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
@@ -43,22 +45,20 @@ import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiFile;
import com.intellij.util.Alarm;
import com.intellij.util.EventDispatcher;
import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XBreakpointListener;
import com.intellij.xdebugger.breakpoints.XBreakpointManager;
import com.intellij.xdebugger.XDebuggerUtil;
import com.intellij.xdebugger.breakpoints.*;
import com.intellij.xdebugger.impl.DebuggerSupport;
import com.intellij.xdebugger.impl.XDebugSessionImpl;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl;
import com.intellij.xdebugger.impl.breakpoints.XDependentBreakpointManager;
import com.sun.jdi.Field;
import com.sun.jdi.InternalException;
import com.sun.jdi.ObjectReference;
import com.sun.jdi.ThreadReference;
import com.sun.jdi.request.*;
import gnu.trove.TIntHashSet;
@@ -66,6 +66,7 @@ import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.debugger.breakpoints.properties.JavaExceptionBreakpointProperties;
import javax.swing.*;
import java.util.*;
@@ -81,7 +82,6 @@ public class BreakpointManager {
@NonNls private static final String RULES_GROUP_NAME = "breakpoint_rules";
private final Project myProject;
private XBreakpointManager myXBreakpointManager;
private final Map<XBreakpoint, Breakpoint> myBreakpoints = new HashMap<XBreakpoint, Breakpoint>(); // breakpoints storage, access should be synchronized
@Nullable private List<Breakpoint> myBreakpointsListForIteration = null; // another list for breakpoints iteration, unsynchronized access ok
private final Map<String, String> myUIProperties = new LinkedHashMap<String, String>();
@@ -141,8 +141,8 @@ public class BreakpointManager {
}
public void init() {
myXBreakpointManager = XDebuggerManager.getInstance(myProject).getBreakpointManager();
myXBreakpointManager.addBreakpointListener(new XBreakpointListener() {
XBreakpointManager manager = XDebuggerManager.getInstance(myProject).getBreakpointManager();
manager.addBreakpointListener(new XBreakpointListener() {
@Override
public void breakpointAdded(@NotNull XBreakpoint xBreakpoint) {
if (isJavaType(xBreakpoint)) {
@@ -169,6 +169,10 @@ public class BreakpointManager {
});
}
private XBreakpointManager getXBreakpointManager() {
return XDebuggerManager.getInstance(myProject).getBreakpointManager();
}
public void editBreakpoint(final Breakpoint breakpoint, final Editor editor) {
DebuggerInvocationUtil.swingInvokeLater(myProject, new Runnable() {
@Override
@@ -202,7 +206,7 @@ public class BreakpointManager {
@Nullable
public RunToCursorBreakpoint addRunToCursorBreakpoint(Document document, int lineIndex, final boolean ignoreBreakpoints) {
return RunToCursorBreakpoint.create(myProject, document, lineIndex, ignoreBreakpoints, null);
return RunToCursorBreakpoint.create(myProject, document, lineIndex, ignoreBreakpoints);
}
@Nullable
@@ -216,8 +220,8 @@ public class BreakpointManager {
if (!LineBreakpoint.canAddLineBreakpoint(myProject, document, lineIndex)) {
return null;
}
LineBreakpoint breakpoint = LineBreakpoint.create(myProject, document, lineIndex, null);
XLineBreakpoint xLineBreakpoint = addXLineBreakpoint(JavaLineBreakpointType.class, document, lineIndex);
LineBreakpoint breakpoint = LineBreakpoint.create(myProject, xLineBreakpoint);
if (breakpoint == null) {
return null;
}
@@ -226,15 +230,15 @@ public class BreakpointManager {
return breakpoint;
}
@Nullable
public FieldBreakpoint addFieldBreakpoint(Field field, ObjectReference object) {
ApplicationManager.getApplication().assertIsDispatchThread();
final FieldBreakpoint fieldBreakpoint = FieldBreakpoint.create(myProject, field, object, null);
if (fieldBreakpoint != null) {
addBreakpoint(fieldBreakpoint);
}
return fieldBreakpoint;
}
//@Nullable
//public FieldBreakpoint addFieldBreakpoint(Field field, ObjectReference object) {
// ApplicationManager.getApplication().assertIsDispatchThread();
// final FieldBreakpoint fieldBreakpoint = FieldBreakpoint.create(myProject, field, object, null);
// if (fieldBreakpoint != null) {
// addBreakpoint(fieldBreakpoint);
// }
// return fieldBreakpoint;
//}
@Nullable
public FieldBreakpoint addFieldBreakpoint(@NotNull Document document, int offset) {
@@ -255,7 +259,8 @@ public class BreakpointManager {
@Nullable
public FieldBreakpoint addFieldBreakpoint(Document document, int lineIndex, String fieldName) {
ApplicationManager.getApplication().assertIsDispatchThread();
FieldBreakpoint fieldBreakpoint = FieldBreakpoint.create(myProject, document, lineIndex, fieldName, null);
XLineBreakpoint xBreakpoint = addXLineBreakpoint(JavaFieldBreakpointType.class, document, lineIndex);
FieldBreakpoint fieldBreakpoint = FieldBreakpoint.create(myProject, fieldName, xBreakpoint);
if (fieldBreakpoint != null) {
addBreakpoint(fieldBreakpoint);
}
@@ -265,19 +270,28 @@ public class BreakpointManager {
@NotNull
public ExceptionBreakpoint addExceptionBreakpoint(@NotNull String exceptionClassName, String packageName) {
ApplicationManager.getApplication().assertIsDispatchThread();
ExceptionBreakpoint breakpoint = new ExceptionBreakpoint(myProject, exceptionClassName, packageName, null);
addBreakpoint(breakpoint);
if (LOG.isDebugEnabled()) {
LOG.debug("ExceptionBreakpoint Added");
JavaExceptionBreakpointType type = (JavaExceptionBreakpointType)XDebuggerUtil.getInstance().findBreakpointType(JavaExceptionBreakpointType.class);
AccessToken token = WriteAction.start();
try {
XBreakpoint<JavaExceptionBreakpointProperties> xBreakpoint = XDebuggerManager.getInstance(myProject).getBreakpointManager()
.addBreakpoint(type, new JavaExceptionBreakpointProperties(exceptionClassName, packageName));
ExceptionBreakpoint breakpoint = new ExceptionBreakpoint(myProject, exceptionClassName, packageName, xBreakpoint);
addBreakpoint(breakpoint);
if (LOG.isDebugEnabled()) {
LOG.debug("ExceptionBreakpoint Added");
}
return breakpoint;
} finally {
token.finish();
}
return breakpoint;
}
@Nullable
public MethodBreakpoint addMethodBreakpoint(Document document, int lineIndex) {
ApplicationManager.getApplication().assertIsDispatchThread();
MethodBreakpoint breakpoint = MethodBreakpoint.create(myProject, document, lineIndex, null);
XLineBreakpoint xBreakpoint = addXLineBreakpoint(JavaMethodBreakpointType.class, document, lineIndex);
MethodBreakpoint breakpoint = MethodBreakpoint.create(myProject, xBreakpoint);
if (breakpoint == null) {
return null;
}
@@ -288,6 +302,19 @@ public class BreakpointManager {
return breakpoint;
}
private <B extends XBreakpoint<?>> XLineBreakpoint addXLineBreakpoint(Class<? extends XBreakpointType<B,?>> typeCls, Document document, int lineIndex) {
XBreakpointType<B, ?> type = XDebuggerUtil.getInstance().findBreakpointType(typeCls);
VirtualFile file = FileDocumentManager.getInstance().getFile(document);
AccessToken token = WriteAction.start();
try {
return XDebuggerManager.getInstance(myProject).getBreakpointManager()
.addLineBreakpoint((XLineBreakpointType)type, file.getUrl(), lineIndex,
((XLineBreakpointType)type).createBreakpointProperties(file, lineIndex));
} finally {
token.finish();
}
}
@Nullable
public WildcardMethodBreakpoint addMethodBreakpoint(String classPattern, String methodName) {
ApplicationManager.getApplication().assertIsDispatchThread();
@@ -489,8 +516,12 @@ public class BreakpointManager {
if (breakpoint == null) {
return;
}
myXBreakpointManager.removeBreakpoint(breakpoint.myXBreakpoint);
AccessToken token = WriteAction.start();
try {
getXBreakpointManager().removeBreakpoint(breakpoint.myXBreakpoint);
} finally {
token.finish();
}
}
private synchronized void onBreakpointRemoved(@Nullable final XBreakpoint xBreakpoint) {
@@ -629,7 +660,7 @@ public class BreakpointManager {
if (myBreakpointsListForIteration == null) {
myBreakpointsListForIteration = new ArrayList<Breakpoint>(myBreakpoints.size());
for (XBreakpoint<?> xBreakpoint : myXBreakpointManager.getAllBreakpoints()) {
for (XBreakpoint<?> xBreakpoint : getXBreakpointManager().getAllBreakpoints()) {
if (isJavaType(xBreakpoint)) {
Breakpoint breakpoint = myBreakpoints.get(xBreakpoint);
if (breakpoint == null) {
@@ -857,7 +888,7 @@ public class BreakpointManager {
// copied from XDebugSessionImpl processDependencies
public void processBreakpointHit(@NotNull final Breakpoint breakpoint) {
XDependentBreakpointManager dependentBreakpointManager = ((XBreakpointManagerImpl)myXBreakpointManager).getDependentBreakpointManager();
XDependentBreakpointManager dependentBreakpointManager = ((XBreakpointManagerImpl)getXBreakpointManager()).getDependentBreakpointManager();
XBreakpoint xBreakpoint = findXBreakpoint(breakpoint);
if (!dependentBreakpointManager.isMasterOrSlave(xBreakpoint)) {
return;
@@ -901,7 +932,7 @@ public class BreakpointManager {
@Nullable
public Breakpoint findMasterBreakpoint(@NotNull Breakpoint dependentBreakpoint) {
XDependentBreakpointManager dependentBreakpointManager = ((XBreakpointManagerImpl)myXBreakpointManager).getDependentBreakpointManager();
XDependentBreakpointManager dependentBreakpointManager = ((XBreakpointManagerImpl)getXBreakpointManager()).getDependentBreakpointManager();
XBreakpoint xBreakpoint = findXBreakpoint(dependentBreakpoint);
return myBreakpoints.get(dependentBreakpointManager.getMasterBreakpoint(xBreakpoint));
}
@@ -462,126 +462,126 @@ public abstract class BreakpointPropertiesPanel {
* Init UI components with the values from Breakpoint
*/
public void initFrom(Breakpoint breakpoint, boolean moreOptionsVisible1) {
myBreakpoint = breakpoint;
boolean moreOptionsVisible = moreOptionsVisible1;
boolean actionsPanelVisible = moreOptionsVisible1;
initMasterBreakpointPanel();
if (breakpoint.getCountFilter() > 0) {
myPassCountField.setText(Integer.toString(breakpoint.getCountFilter()));
moreOptionsVisible = true;
}
else {
myPassCountField.setText("");
}
PsiElement context = breakpoint.getEvaluationElement();
myPassCountCheckbox.setSelected(breakpoint.isCountFilterEnabled());
myConditionCheckbox.setSelected(breakpoint.isConditionEnabled());
myConditionCombo.setEnabled(breakpoint.isConditionEnabled());
myConditionCombo.setContext(context);
myConditionCombo.setText(breakpoint.getCondition() != null ? breakpoint.getCondition() : emptyText());
myCbSuspend.setSelected(breakpoint.isSuspend());
myRbSuspendThread.setEnabled(myCbSuspend.isSelected());
myRbSuspendAll.setEnabled(myCbSuspend.isSelected());
if(!breakpoint.isSuspend()) {
actionsPanelVisible = true;
}
if(DebuggerSettings.SUSPEND_THREAD.equals(breakpoint.getSuspendPolicy())){
myRbSuspendThread.setSelected(true);
}
else {
myRbSuspendAll.setSelected(true);
}
myCbSuspend.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
if (!myActionsPanel.isVisible()) {
if (!myCbSuspend.isSelected()) {
if (myDelegate != null) {
myDelegate.showActionsPanel();
}
}
}
myRbSuspendThread.setEnabled(myCbSuspend.isSelected());
myRbSuspendAll.setEnabled(myCbSuspend.isSelected());
}
});
myLogMessageCheckBox.setSelected(breakpoint.isLogEnabled());
myTemporaryCheckBox.setSelected(breakpoint.isRemoveAfterHit());
myEnabledCheckbox.setSelected(breakpoint.isEnabled());
myEnabledCheckbox.setText(breakpoint.getShortName() + " enabled");
DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager().addBreakpointManagerListener(new BreakpointManagerListener() {
@Override
public void breakpointsChanged() {
myEnabledCheckbox.setSelected(myBreakpoint.isEnabled());
}
});
myEnabledCheckbox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
if (myBreakpoint.isEnabled() != myEnabledCheckbox.isSelected()) {
myBreakpoint.setEnabled(myEnabledCheckbox.isSelected());
getBreakpointManager(myProject).fireBreakpointChanged(myBreakpoint);
myBreakpoint.updateUI();
}
}
});
myTemporaryCheckBox.setVisible(breakpoint instanceof LineBreakpoint);
myLogExpressionCheckBox.setSelected(breakpoint.isLogExpressionEnabled());
if (breakpoint.isLogEnabled() ||
breakpoint.isLogExpressionEnabled() || (breakpoint instanceof LineBreakpoint && breakpoint.isRemoveAfterHit())) {
actionsPanelVisible = true;
}
myLogExpressionCombo.setContext(context);
if (breakpoint.getLogMessage() != null) {
myLogExpressionCombo.setText(breakpoint.getLogMessage());
}
else {
myLogExpressionCombo.setText(emptyText());
}
myLogExpressionCombo.setEnabled(breakpoint.isLogExpressionEnabled());
if (breakpoint.isLogExpressionEnabled()) {
actionsPanelVisible = true;
}
myInstanceFiltersCheckBox.setSelected(breakpoint.isInstanceFiltersEnabled());
myInstanceFiltersField.setEnabled(breakpoint.isInstanceFiltersEnabled());
myInstanceFiltersField.getTextField().setEditable(breakpoint.isInstanceFiltersEnabled());
myInstanceFilters = breakpoint.getInstanceFilters();
updateInstanceFilterEditor(true);
if (breakpoint.isInstanceFiltersEnabled()) {
moreOptionsVisible = true;
}
myClassFiltersCheckBox.setSelected(breakpoint.isClassFiltersEnabled());
myClassFiltersField.setEnabled(breakpoint.isClassFiltersEnabled());
myClassFiltersField.getTextField().setEditable(breakpoint.isClassFiltersEnabled());
myClassFilters = breakpoint.getClassFilters();
myClassExclusionFilters = breakpoint.getClassExclusionFilters();
updateClassFilterEditor(true);
if (breakpoint.isClassFiltersEnabled()) {
moreOptionsVisible = true;
}
myBreakpointPsiClass = breakpoint.getPsiClass();
updateCheckboxes();
setActionsPanelVisible(actionsPanelVisible && !moreOptionsVisible1);
setMoreOptionsVisible(moreOptionsVisible);
//myBreakpoint = breakpoint;
//boolean moreOptionsVisible = moreOptionsVisible1;
//boolean actionsPanelVisible = moreOptionsVisible1;
//
//initMasterBreakpointPanel();
//
//if (breakpoint.getCountFilter() > 0) {
// myPassCountField.setText(Integer.toString(breakpoint.getCountFilter()));
// moreOptionsVisible = true;
//}
//else {
// myPassCountField.setText("");
//}
//
//PsiElement context = breakpoint.getEvaluationElement();
//myPassCountCheckbox.setSelected(breakpoint.isCountFilterEnabled());
//
//myConditionCheckbox.setSelected(breakpoint.isConditionEnabled());
//
//myConditionCombo.setEnabled(breakpoint.isConditionEnabled());
//
//myConditionCombo.setContext(context);
//myConditionCombo.setText(breakpoint.getCondition() != null ? breakpoint.getCondition() : emptyText());
//
//myCbSuspend.setSelected(breakpoint.isSuspend());
//myRbSuspendThread.setEnabled(myCbSuspend.isSelected());
//myRbSuspendAll.setEnabled(myCbSuspend.isSelected());
//
//if(!breakpoint.isSuspend()) {
// actionsPanelVisible = true;
//}
//if(DebuggerSettings.SUSPEND_THREAD.equals(breakpoint.getSuspendPolicy())){
// myRbSuspendThread.setSelected(true);
//}
//else {
// myRbSuspendAll.setSelected(true);
//}
//
//myCbSuspend.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent event) {
// if (!myActionsPanel.isVisible()) {
// if (!myCbSuspend.isSelected()) {
// if (myDelegate != null) {
// myDelegate.showActionsPanel();
// }
// }
// }
// myRbSuspendThread.setEnabled(myCbSuspend.isSelected());
// myRbSuspendAll.setEnabled(myCbSuspend.isSelected());
// }
//});
//myLogMessageCheckBox.setSelected(breakpoint.isLogEnabled());
//myTemporaryCheckBox.setSelected(breakpoint.isRemoveAfterHit());
//myEnabledCheckbox.setSelected(breakpoint.isEnabled());
//myEnabledCheckbox.setText(breakpoint.getShortName() + " enabled");
//
//DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager().addBreakpointManagerListener(new BreakpointManagerListener() {
// @Override
// public void breakpointsChanged() {
// myEnabledCheckbox.setSelected(myBreakpoint.isEnabled());
// }
//});
//
//myEnabledCheckbox.addActionListener(new ActionListener() {
// @Override
// public void actionPerformed(ActionEvent event) {
// if (myBreakpoint.isEnabled() != myEnabledCheckbox.isSelected()) {
// myBreakpoint.setEnabled(myEnabledCheckbox.isSelected());
// getBreakpointManager(myProject).fireBreakpointChanged(myBreakpoint);
// myBreakpoint.updateUI();
// }
// }
//});
//myTemporaryCheckBox.setVisible(breakpoint instanceof LineBreakpoint);
//myLogExpressionCheckBox.setSelected(breakpoint.isLogExpressionEnabled());
//if (breakpoint.isLogEnabled() ||
// breakpoint.isLogExpressionEnabled() || (breakpoint instanceof LineBreakpoint && breakpoint.isRemoveAfterHit())) {
// actionsPanelVisible = true;
//}
//
//myLogExpressionCombo.setContext(context);
//
//if (breakpoint.getLogMessage() != null) {
// myLogExpressionCombo.setText(breakpoint.getLogMessage());
//}
//else {
// myLogExpressionCombo.setText(emptyText());
//}
//
//myLogExpressionCombo.setEnabled(breakpoint.isLogExpressionEnabled());
//if (breakpoint.isLogExpressionEnabled()) {
// actionsPanelVisible = true;
//}
//
//myInstanceFiltersCheckBox.setSelected(breakpoint.isInstanceFiltersEnabled());
//myInstanceFiltersField.setEnabled(breakpoint.isInstanceFiltersEnabled());
//myInstanceFiltersField.getTextField().setEditable(breakpoint.isInstanceFiltersEnabled());
//myInstanceFilters = breakpoint.getInstanceFilters();
//updateInstanceFilterEditor(true);
//if (breakpoint.isInstanceFiltersEnabled()) {
// moreOptionsVisible = true;
//}
//
//myClassFiltersCheckBox.setSelected(breakpoint.isClassFiltersEnabled());
//myClassFiltersField.setEnabled(breakpoint.isClassFiltersEnabled());
//myClassFiltersField.getTextField().setEditable(breakpoint.isClassFiltersEnabled());
//myClassFilters = breakpoint.getClassFilters();
//myClassExclusionFilters = breakpoint.getClassExclusionFilters();
//updateClassFilterEditor(true);
//if (breakpoint.isClassFiltersEnabled()) {
// moreOptionsVisible = true;
//}
//
//myBreakpointPsiClass = breakpoint.getPsiClass();
//
//updateCheckboxes();
//
//setActionsPanelVisible(actionsPanelVisible && !moreOptionsVisible1);
//setMoreOptionsVisible(moreOptionsVisible);
}
private void initMasterBreakpointPanel() {
@@ -636,41 +636,41 @@ public abstract class BreakpointPropertiesPanel {
*/
public void saveTo(Breakpoint breakpoint) {
saveMasterBreakpoint();
try {
String text = myPassCountField.getText().trim();
breakpoint.setCountFilter(!text.isEmpty() ? Integer.parseInt(text) : 0);
if (breakpoint.getCountFilter() < 0) {
breakpoint.setCountFilter(0);
}
}
catch (Exception ignored) {
}
breakpoint.setCountFilterEnabled(breakpoint.getCountFilter() > 0 && myPassCountCheckbox.isSelected());
breakpoint.setCondition(myConditionCombo.getText().getText());
//breakpoint.setConditionEnabled(myConditionCheckbox.isSelected());
breakpoint.setLogMessage(myLogExpressionCombo.getText());
breakpoint.setLogExpressionEnabled(!breakpoint.getLogMessage().isEmpty() && myLogExpressionCheckBox.isSelected());
breakpoint.setLogEnabled(myLogMessageCheckBox.isSelected());
breakpoint.setEnabled(myEnabledCheckbox.isSelected());
breakpoint.setRemoveAfterHit(myTemporaryCheckBox.isSelected());
//breakpoint.setSuspend(myCbSuspend.isSelected());
breakpoint.setSuspendPolicy(getSelectedSuspendPolicy());
reloadInstanceFilters();
reloadClassFilters();
updateInstanceFilterEditor(true);
updateClassFilterEditor(true);
breakpoint.setInstanceFiltersEnabled(myInstanceFiltersField.getText().length() > 0 && myInstanceFiltersCheckBox.isSelected());
breakpoint.setClassFiltersEnabled(myClassFiltersField.getText().length() > 0 && myClassFiltersCheckBox.isSelected());
breakpoint.setClassFilters(myClassFilters);
breakpoint.setClassExclusionFilters(myClassExclusionFilters);
breakpoint.setInstanceFilters(myInstanceFilters);
myConditionCombo.addRecent(myConditionCombo.getText());
myLogExpressionCombo.addRecent(myLogExpressionCombo.getText());
breakpoint.updateUI();
//saveMasterBreakpoint();
//try {
// String text = myPassCountField.getText().trim();
// breakpoint.setCountFilter(!text.isEmpty() ? Integer.parseInt(text) : 0);
// if (breakpoint.getCountFilter() < 0) {
// breakpoint.setCountFilter(0);
// }
//}
//catch (Exception ignored) {
//}
//
//breakpoint.setCountFilterEnabled(breakpoint.getCountFilter() > 0 && myPassCountCheckbox.isSelected());
//breakpoint.setCondition(myConditionCombo.getText().getText());
////breakpoint.setConditionEnabled(myConditionCheckbox.isSelected());
//breakpoint.setLogMessage(myLogExpressionCombo.getText());
//breakpoint.setLogExpressionEnabled(!breakpoint.getLogMessage().isEmpty() && myLogExpressionCheckBox.isSelected());
//breakpoint.setLogEnabled(myLogMessageCheckBox.isSelected());
//breakpoint.setEnabled(myEnabledCheckbox.isSelected());
//breakpoint.setRemoveAfterHit(myTemporaryCheckBox.isSelected());
////breakpoint.setSuspend(myCbSuspend.isSelected());
//breakpoint.setSuspendPolicy(getSelectedSuspendPolicy());
//reloadInstanceFilters();
//reloadClassFilters();
//updateInstanceFilterEditor(true);
//updateClassFilterEditor(true);
//
//breakpoint.setInstanceFiltersEnabled(myInstanceFiltersField.getText().length() > 0 && myInstanceFiltersCheckBox.isSelected());
//breakpoint.setClassFiltersEnabled(myClassFiltersField.getText().length() > 0 && myClassFiltersCheckBox.isSelected());
//breakpoint.setClassFilters(myClassFilters);
//breakpoint.setClassExclusionFilters(myClassExclusionFilters);
//breakpoint.setInstanceFilters(myInstanceFilters);
//
//myConditionCombo.addRecent(myConditionCombo.getText());
//myLogExpressionCombo.addRecent(myLogExpressionCombo.getText());
//breakpoint.updateUI();
}
private static String concatWithEx(List<String> s, String concator, int N, String NthConcator) {
@@ -34,14 +34,9 @@ import com.intellij.openapi.editor.impl.DocumentMarkupModel;
import com.intellij.openapi.editor.markup.MarkupEditorFilterFactory;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
@@ -58,7 +53,6 @@ import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
import com.intellij.xdebugger.ui.DebuggerColors;
import com.intellij.xml.util.XmlStringUtil;
import com.sun.jdi.ReferenceType;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties;
@@ -215,7 +209,7 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
return isPositionValid(myXBreakpoint.getSourcePosition());
}
private static boolean isPositionValid(@Nullable final XSourcePosition sourcePosition) {
protected static boolean isPositionValid(@Nullable final XSourcePosition sourcePosition) {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
@Override
public Boolean compute() {
@@ -294,7 +288,7 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
}
@Override
public final void reload() {
public void reload() {
ApplicationManager.getApplication().assertReadAccessAllowed();
final XSourcePosition position = myXBreakpoint.getSourcePosition();
try {
@@ -144,8 +144,8 @@ public class ExceptionBreakpoint extends Breakpoint<JavaExceptionBreakpointPrope
return;
}
// trying to create a request
ExceptionRequest request = debugProcess.getRequestsManager().createExceptionRequest(this, refType, isNOTIFY_CAUGHT(),
isNOTIFY_UNCAUGHT());
ExceptionRequest request = debugProcess.getRequestsManager().createExceptionRequest(this, refType, isNotifyCaught(),
isNotifyUncaught());
debugProcess.getRequestsManager().enableRequest(request);
if (LOG.isDebugEnabled()) {
if (refType != null) {
@@ -242,23 +242,23 @@ public class ExceptionBreakpoint extends Breakpoint<JavaExceptionBreakpointPrope
// setPackageName(packageName != null? packageName : calcPackageName(packageName));
//}
public boolean isNOTIFY_CAUGHT() {
private boolean isNotifyCaught() {
return getProperties().NOTIFY_CAUGHT;
}
public boolean isNOTIFY_UNCAUGHT() {
private boolean isNotifyUncaught() {
return getProperties().NOTIFY_UNCAUGHT;
}
public String getQualifiedName() {
private String getQualifiedName() {
return getProperties().myQualifiedName;
}
public void setQualifiedName(String qualifiedName) {
private void setQualifiedName(String qualifiedName) {
getProperties().myQualifiedName = qualifiedName;
}
public void setPackageName(String packageName) {
private void setPackageName(String packageName) {
getProperties().myPackageName = packageName;
}
}
@@ -33,12 +33,9 @@ import com.intellij.icons.AllIcons;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.Processor;
@@ -56,7 +53,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.java.debugger.breakpoints.properties.JavaFieldBreakpointProperties;
import javax.swing.*;
import java.util.List;
public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpointProperties> {
private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.breakpoints.FieldBreakpoint");
@@ -68,8 +64,8 @@ public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpoi
super(project, breakpoint);
}
private FieldBreakpoint(Project project, RangeHighlighter highlighter, @NotNull String fieldName, XBreakpoint breakpoint) {
super(project, highlighter, breakpoint);
private FieldBreakpoint(Project project, @NotNull String fieldName, XBreakpoint breakpoint) {
super(project, breakpoint);
setFieldName(fieldName);
}
@@ -183,14 +179,14 @@ public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpoi
return;
}
RequestManagerImpl manager = debugProcess.getRequestsManager();
if (isWATCH_MODIFICATION() && vm.canWatchFieldModification()) {
if (isWatchModification() && vm.canWatchFieldModification()) {
ModificationWatchpointRequest request = manager.createModificationWatchpointRequest(this, field);
debugProcess.getRequestsManager().enableRequest(request);
if (LOG.isDebugEnabled()) {
LOG.debug("Modification request added");
}
}
if (isWATCH_ACCESS() && vm.canWatchFieldAccess()) {
if (isWatchAccess() && vm.canWatchFieldAccess()) {
AccessWatchpointRequest request = manager.createAccessWatchpointRequest(this, field);
debugProcess.getRequestsManager().enableRequest(request);
if (LOG.isDebugEnabled()) {
@@ -283,8 +279,8 @@ public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpoi
return className != null && !className.isEmpty() ? className + "." + getFieldName() : getFieldName();
}
public static FieldBreakpoint create(@NotNull Project project, @NotNull Document document, int lineIndex, String fieldName, XBreakpoint xBreakpoint) {
FieldBreakpoint breakpoint = new FieldBreakpoint(project, createHighlighter(project, document, lineIndex), fieldName, xBreakpoint);
public static FieldBreakpoint create(@NotNull Project project, String fieldName, XBreakpoint xBreakpoint) {
FieldBreakpoint breakpoint = new FieldBreakpoint(project, fieldName, xBreakpoint);
return (FieldBreakpoint)breakpoint.init();
}
@@ -304,39 +300,39 @@ public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpoi
return field == getPsiField();
}
protected static FieldBreakpoint create(@NotNull Project project, @NotNull Field field, ObjectReference object, XBreakpoint xBreakpoint) {
String fieldName = field.name();
int line = 0;
Document document = null;
try {
List locations = field.declaringType().allLineLocations();
if(!locations.isEmpty()) {
Location location = (Location)locations.get(0);
line = location.lineNumber();
VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(location.sourcePath());
if(file != null) {
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
if(psiFile != null) {
document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
}
}
}
}
catch (AbsentInformationException e) {
LOG.debug(e);
}
catch (InternalError e) {
LOG.debug(e);
}
if(document == null) return null;
FieldBreakpoint fieldBreakpoint = new FieldBreakpoint(project, createHighlighter(project, document, line), fieldName, xBreakpoint);
if (!fieldBreakpoint.isStatic()) {
fieldBreakpoint.addInstanceFilter(object.uniqueID());
}
return (FieldBreakpoint)fieldBreakpoint.init();
}
//protected static FieldBreakpoint create(@NotNull Project project, @NotNull Field field, ObjectReference object, XBreakpoint xBreakpoint) {
// String fieldName = field.name();
// int line = 0;
// Document document = null;
// try {
// List locations = field.declaringType().allLineLocations();
// if(!locations.isEmpty()) {
// Location location = (Location)locations.get(0);
// line = location.lineNumber();
// VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(location.sourcePath());
// if(file != null) {
// PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
// if(psiFile != null) {
// document = PsiDocumentManager.getInstance(project).getDocument(psiFile);
// }
// }
// }
// }
// catch (AbsentInformationException e) {
// LOG.debug(e);
// }
// catch (InternalError e) {
// LOG.debug(e);
// }
//
// if(document == null) return null;
//
// FieldBreakpoint fieldBreakpoint = new FieldBreakpoint(project, createHighlighter(project, document, line), fieldName, xBreakpoint);
// if (!fieldBreakpoint.isStatic()) {
// fieldBreakpoint.addInstanceFilter(object.uniqueID());
// }
// return (FieldBreakpoint)fieldBreakpoint.init();
//}
public static PsiField findField(Project project, Document document, int offset) {
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(document);
@@ -387,15 +383,15 @@ public class FieldBreakpoint extends BreakpointWithHighlighter<JavaFieldBreakpoi
return getPsiClass();
}
public boolean isWATCH_MODIFICATION() {
private boolean isWatchModification() {
return getProperties().WATCH_MODIFICATION;
}
public boolean isWATCH_ACCESS() {
private boolean isWatchAccess() {
return getProperties().WATCH_ACCESS;
}
public void setFieldName(String fieldName) {
private void setFieldName(String fieldName) {
getProperties().myFieldName = fieldName;
}
}
@@ -27,6 +27,7 @@ import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.debugger.breakpoints.properties.JavaBreakpointProperties;
import org.jetbrains.java.debugger.breakpoints.properties.JavaLineBreakpointProperties;
import javax.swing.*;
import java.util.List;
@@ -70,13 +71,13 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaBreak
@Nullable
@Override
public JavaBreakpointProperties createProperties() {
return new JavaBreakpointProperties();
return new JavaLineBreakpointProperties();
}
@Nullable
@Override
public JavaBreakpointProperties createBreakpointProperties(@NotNull VirtualFile file, int line) {
return new JavaBreakpointProperties();
return new JavaLineBreakpointProperties();
}
@Override
@@ -79,10 +79,6 @@ public class LineBreakpoint extends BreakpointWithHighlighter {
super(project, xBreakpoint);
}
public LineBreakpoint(Project project, RangeHighlighter highlighter, XBreakpoint xBreakpoint) {
super(project, highlighter, xBreakpoint);
}
@Override
protected Icon getDisabledIcon(boolean isMuted) {
final Breakpoint master = DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager().findMasterBreakpoint(this);
@@ -471,13 +467,8 @@ public class LineBreakpoint extends BreakpointWithHighlighter {
return ContextUtil.getContextElement(getSourcePosition());
}
public static LineBreakpoint create(@NotNull Project project, @NotNull Document document, int lineIndex, XBreakpoint xBreakpoint) {
final RangeHighlighter highlighter = createHighlighter(project, document, lineIndex);
if (highlighter == null) {
return null;
}
LineBreakpoint breakpoint = new LineBreakpoint(project, highlighter, xBreakpoint);
public static LineBreakpoint create(@NotNull Project project, XBreakpoint xBreakpoint) {
LineBreakpoint breakpoint = new LineBreakpoint(project, xBreakpoint);
return (LineBreakpoint)breakpoint.init();
}
@@ -35,19 +35,13 @@ import com.intellij.icons.AllIcons;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.Processor;
import com.intellij.util.StringBuilderSpinAllocator;
import com.intellij.util.text.CharArrayUtil;
import com.intellij.xdebugger.XDebuggerUtil;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.sun.jdi.AbsentInformationException;
import com.sun.jdi.Location;
@@ -148,7 +142,7 @@ public class MethodBreakpoint extends BreakpointWithHighlighter<JavaMethodBreakp
}
RequestManagerImpl requestManager = debugProcess.getRequestsManager();
if (isWATCH_ENTRY()) {
if (isWatchEntry()) {
MethodEntryRequest entryRequest = (MethodEntryRequest)findRequest(debugProcess, MethodEntryRequest.class);
if (entryRequest == null) {
entryRequest = requestManager.createMethodEntryRequest(this);
@@ -161,7 +155,7 @@ public class MethodBreakpoint extends BreakpointWithHighlighter<JavaMethodBreakp
entryRequest.addClassFilter(classType);
debugProcess.getRequestsManager().enableRequest(entryRequest);
}
if (isWATCH_EXIT()) {
if (isWatchExit()) {
MethodExitRequest exitRequest = (MethodExitRequest)findRequest(debugProcess, MethodExitRequest.class);
if (exitRequest == null) {
exitRequest = requestManager.createMethodExitRequest(this);
@@ -293,8 +287,8 @@ public class MethodBreakpoint extends BreakpointWithHighlighter<JavaMethodBreakp
}
@Nullable
public static MethodBreakpoint create(@NotNull Project project, @NotNull Document document, int lineIndex, XBreakpoint xBreakpoint) {
final MethodBreakpoint breakpoint = new MethodBreakpoint(project, createHighlighter(project, document, lineIndex));
public static MethodBreakpoint create(@NotNull Project project, XBreakpoint xBreakpoint) {
final MethodBreakpoint breakpoint = new MethodBreakpoint(project, xBreakpoint);
return (MethodBreakpoint)breakpoint.init();
}
@@ -380,28 +374,28 @@ public class MethodBreakpoint extends BreakpointWithHighlighter<JavaMethodBreakp
return false;
}
public boolean isWATCH_ENTRY() {
private boolean isWatchEntry() {
return getProperties().WATCH_ENTRY;
}
public void setWATCH_ENTRY(boolean WATCH_ENTRY) {
private void setWatchEntry(boolean WATCH_ENTRY) {
getProperties().WATCH_ENTRY = WATCH_ENTRY;
}
public boolean isWATCH_EXIT() {
private boolean isWatchExit() {
return getProperties().WATCH_EXIT;
}
public void setWATCH_EXIT(boolean WATCH_EXIT) {
private void setWatchExit(boolean WATCH_EXIT) {
getProperties().WATCH_EXIT = WATCH_EXIT;
}
@Nullable
public String getMethodName() {
private String getMethodName() {
return getProperties().myMethodName;
}
public void setMethodName(@Nullable String methodName) {
private void setMethodName(@Nullable String methodName) {
getProperties().myMethodName = methodName;
}
@@ -18,11 +18,11 @@ package com.intellij.debugger.ui.breakpoints;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -32,18 +32,11 @@ import org.jetbrains.annotations.Nullable;
*/
public class RunToCursorBreakpoint extends LineBreakpoint {
private final boolean myRestoreBreakpoints;
@Nullable
private final SourcePosition myCustomPosition;
private String mySuspendPolicy;
protected RunToCursorBreakpoint(@NotNull Project project, @NotNull RangeHighlighter highlighter, boolean restoreBreakpoints, XBreakpoint xBreakpoint) {
super(project, highlighter, xBreakpoint);
setVisible(false);
myRestoreBreakpoints = restoreBreakpoints;
myCustomPosition = null;
}
protected RunToCursorBreakpoint(@NotNull Project project, @NotNull SourcePosition pos, boolean restoreBreakpoints, XBreakpoint xBreakpoint) {
super(project, xBreakpoint);
protected RunToCursorBreakpoint(@NotNull Project project, @NotNull SourcePosition pos, boolean restoreBreakpoints) {
super(project, null);
myCustomPosition = pos;
setVisible(false);
myRestoreBreakpoints = restoreBreakpoints;
@@ -51,7 +44,51 @@ public class RunToCursorBreakpoint extends LineBreakpoint {
@Override
public SourcePosition getSourcePosition() {
return myCustomPosition != null ? myCustomPosition : super.getSourcePosition();
return myCustomPosition;
}
@Override
public void reload() {
}
@Override
public String getSuspendPolicy() {
return mySuspendPolicy;
}
public void setSuspendPolicy(String policy) {
mySuspendPolicy = policy;
}
protected boolean isLogEnabled() {
return false;
}
@Override
protected boolean isLogExpressionEnabled() {
return false;
}
@Override
public boolean isEnabled() {
return true;
}
public boolean isCountFilterEnabled() {
return false;
}
public boolean isClassFiltersEnabled() {
return false;
}
public boolean isInstanceFiltersEnabled() {
return false;
}
@Override
protected boolean isConditionEnabled() {
return false;
}
public boolean isRestoreBreakpoints() {
@@ -63,29 +100,26 @@ public class RunToCursorBreakpoint extends LineBreakpoint {
return false;
}
@Override
public boolean isValid() {
return true;
}
@Override
protected boolean isMuted(@NotNull final DebugProcessImpl debugProcess) {
return false; // always enabled
}
@Nullable
protected static RunToCursorBreakpoint create(@NotNull Project project, @NotNull Document document, int lineIndex, boolean restoreBreakpoints, XBreakpoint xBreakpoint) {
protected static RunToCursorBreakpoint create(@NotNull Project project, @NotNull Document document, int lineIndex, boolean restoreBreakpoints) {
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document);
if (virtualFile == null) {
return null;
}
final RangeHighlighter highlighter = createHighlighter(project, document, lineIndex);
if (highlighter == null) {
return null;
}
PsiFile psiFile = PsiManager.getInstance(project).findFile(virtualFile);
SourcePosition pos = SourcePosition.createFromLine(psiFile, lineIndex);
final RunToCursorBreakpoint breakpoint = new RunToCursorBreakpoint(project, highlighter, restoreBreakpoints, xBreakpoint);
final RangeHighlighter h = breakpoint.getHighlighter();
if (h != null) {
h.dispose();
}
return (RunToCursorBreakpoint)breakpoint.init();
return new RunToCursorBreakpoint(project, pos, restoreBreakpoints);
}
}
@@ -41,7 +41,7 @@ public class StepIntoBreakpoint extends RunToCursorBreakpoint {
private final BreakpointStepMethodFilter myFilter;
StepIntoBreakpoint(@NotNull Project project, @NotNull SourcePosition pos, @NotNull BreakpointStepMethodFilter filter) {
super(project, pos, false, null);
super(project, pos, false);
myFilter = filter;
}
@@ -26,9 +26,7 @@ import com.intellij.debugger.engine.requests.RequestManagerImpl;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.util.StringBuilderSpinAllocator;
@@ -43,7 +41,6 @@ import com.sun.jdi.event.MethodExitEvent;
import com.sun.jdi.request.EventRequest;
import com.sun.jdi.request.MethodEntryRequest;
import com.sun.jdi.request.MethodExitRequest;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.java.debugger.breakpoints.properties.JavaMethodBreakpointProperties;
@@ -126,7 +123,7 @@ public class WildcardMethodBreakpoint extends Breakpoint<JavaMethodBreakpointPro
}
try {
RequestManagerImpl requestManager = debugProcess.getRequestsManager();
if (isWATCH_ENTRY()) {
if (isWatchEntry()) {
MethodEntryRequest entryRequest = (MethodEntryRequest)findRequest(debugProcess, MethodEntryRequest.class);
if (entryRequest == null) {
entryRequest = requestManager.createMethodEntryRequest(this);
@@ -137,7 +134,7 @@ public class WildcardMethodBreakpoint extends Breakpoint<JavaMethodBreakpointPro
entryRequest.addClassFilter(getClassPattern());
debugProcess.getRequestsManager().enableRequest(entryRequest);
}
if (isWATCH_EXIT()) {
if (isWatchExit()) {
MethodExitRequest exitRequest = (MethodExitRequest)findRequest(debugProcess, MethodExitRequest.class);
if (exitRequest == null) {
exitRequest = requestManager.createMethodExitRequest(this);
@@ -252,31 +249,31 @@ public class WildcardMethodBreakpoint extends Breakpoint<JavaMethodBreakpointPro
return new WildcardMethodBreakpoint(project, classPattern, methodName, xBreakpoint);
}
public boolean isWATCH_ENTRY() {
private boolean isWatchEntry() {
return getProperties().WATCH_ENTRY;
}
public void setWATCH_ENTRY(boolean WATCH_ENTRY) {
private void setWatchEntry(boolean WATCH_ENTRY) {
getProperties().WATCH_ENTRY = WATCH_ENTRY;
}
public boolean isWATCH_EXIT() {
private boolean isWatchExit() {
return getProperties().WATCH_EXIT;
}
public void setWATCH_EXIT(boolean WATCH_EXIT) {
private void setWatchExit(boolean WATCH_EXIT) {
getProperties().WATCH_EXIT = WATCH_EXIT;
}
public String getClassPattern() {
private String getClassPattern() {
return getProperties().myClassPattern;
}
public void setClassPattern(String classPattern) {
private void setClassPattern(String classPattern) {
getProperties().myClassPattern = classPattern;
}
public void setMethodName(String methodName) {
private void setMethodName(String methodName) {
getProperties().myMethodName = methodName;
}
}
@@ -61,6 +61,6 @@ public abstract class JavaBreakpointAdapterBase extends XBreakpointAdapter<XLine
}
protected LineBreakpoint doCreateInstance(Project project, Document document, XLineBreakpoint<XBreakpointProperties> xBreakpoint) {
return LineBreakpoint.create(project, document, xBreakpoint.getLine(), xBreakpoint);
return LineBreakpoint.create(project, xBreakpoint);
}
}
@@ -0,0 +1,22 @@
/*
* Copyright 2000-2014 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.
*/
package org.jetbrains.java.debugger.breakpoints.properties;
/**
* @author egor
*/
public class JavaLineBreakpointProperties extends JavaBreakpointProperties<JavaLineBreakpointProperties> {
}