xdebugger: default breakpoint can be enabled by default

This commit is contained in:
nik
2010-11-24 10:53:53 +03:00
parent c237c687ca
commit 92f483e91f
5 changed files with 46 additions and 32 deletions
@@ -148,12 +148,12 @@ public abstract class XBreakpointType<B extends XBreakpoint<P>, P extends XBreak
/**
* Returns properties of the default breakpoint. The default breakpoints cannot be deleted and is always shown on top of the breakpoints
* list in the dialog. It is disabled by default.
* list in the dialog.
*
* @return a default breakpoint properties or {@code null} if default breakpoint isn't supported
* @return a default breakpoint or {@code null} if default breakpoint isn't supported
*/
@Nullable
public P createDefaultBreakpointProperties() {
public XBreakpoint<P> createDefaultBreakpoint(@NotNull XBreakpointCreator<P> creator) {
return null;
}
@@ -161,4 +161,9 @@ public abstract class XBreakpointType<B extends XBreakpoint<P>, P extends XBreak
public String getBreakpointsDialogHelpTopic() {
return null;
}
public interface XBreakpointCreator<P extends XBreakpointProperties> {
@NotNull
XBreakpoint<P> createBreakpoint(@Nullable P properties);
}
}
@@ -86,10 +86,10 @@ public abstract class XLineBreakpointType<P extends XBreakpointProperties> exten
}
/**
* Default line breakpoints cannot be supported
* Default line breakpoints aren't supported
*/
@Override
public final P createDefaultBreakpointProperties() {
public final XLineBreakpoint<P> createDefaultBreakpoint(@NotNull XBreakpointCreator<P> creator) {
return null;
}
@@ -107,17 +107,15 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta
@NotNull
public <T extends XBreakpointProperties> XBreakpoint<T> addBreakpoint(final XBreakpointType<XBreakpoint<T>,T> type, @Nullable final T properties) {
ApplicationManager.getApplication().assertWriteAccessAllowed();
return addBreakpoint(type, properties, false, true);
XBreakpointBase<?, T, ?> breakpoint = createBreakpoint(type, properties, true);
addBreakpoint(breakpoint, false, true);
return breakpoint;
}
private <T extends XBreakpointProperties> XBreakpointBase<?, T, ?> addBreakpoint(XBreakpointType<XBreakpoint<T>, T> type,
T properties,
final boolean defaultBreakpoint,
final boolean initUI) {
XBreakpointBase.BreakpointState<?,T,?> state = new XBreakpointBase.BreakpointState<XBreakpoint<T>,T,XBreakpointType<XBreakpoint<T>,T>>(!defaultBreakpoint, type.getId());
XBreakpointBase<?,T, ?> breakpoint = new XBreakpointBase<XBreakpoint<T>,T, XBreakpointBase.BreakpointState<?,T,?>>(type, this, properties, state);
addBreakpoint(breakpoint, defaultBreakpoint, initUI);
return breakpoint;
private <T extends XBreakpointProperties> XBreakpointBase<?, T, ?> createBreakpoint(XBreakpointType<XBreakpoint<T>, T> type,
T properties, final boolean enabled) {
XBreakpointBase.BreakpointState<?,T,?> state = new XBreakpointBase.BreakpointState<XBreakpoint<T>,T,XBreakpointType<XBreakpoint<T>,T>>(enabled, type.getId());
return new XBreakpointBase<XBreakpoint<T>,T, XBreakpointBase.BreakpointState<?,T,?>>(type, this, properties, state);
}
private <T extends XBreakpointProperties> void addBreakpoint(final XBreakpointBase<?, T, ?> breakpoint, final boolean defaultBreakpoint,
@@ -295,14 +293,14 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta
return state;
}
private static <P extends XBreakpointProperties> boolean differsFromDefault(XBreakpointType<?, P> type,
private <P extends XBreakpointProperties> boolean differsFromDefault(XBreakpointType<?, P> type,
XBreakpointBase.BreakpointState state) {
final P defaultProperties = type.createDefaultBreakpointProperties();
if (defaultProperties == null) {
final XBreakpoint<P> defaultBreakpoint = createDefaultBreakpoint(type);
if (defaultBreakpoint == null) {
return false;
}
XBreakpointBase.BreakpointState defaultState = new XBreakpointBase.BreakpointState(false, type.getId());
defaultState.setPropertiesElement(XmlSerializer.serialize(defaultProperties));
XBreakpointBase.BreakpointState defaultState = ((XBreakpointBase)defaultBreakpoint).getState();
Element defaultElement = XmlSerializer.serialize(defaultState, SERIALIZATION_FILTER);
Element currentElement = XmlSerializer.serialize(state, SERIALIZATION_FILTER);
return !JDOMUtil.areElementsEqual(defaultElement, currentElement);
@@ -338,13 +336,24 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta
}
private <P extends XBreakpointProperties> void addDefaultBreakpoint(XBreakpointType<?, P> type) {
final P properties = type.createDefaultBreakpointProperties();
if (properties != null) {
//noinspection unchecked
addBreakpoint((XBreakpointType<XBreakpoint<P>, P>)type, properties, true, false);
final XBreakpoint<P> breakpoint = createDefaultBreakpoint(type);
if (breakpoint != null) {
addBreakpoint((XBreakpointBase<?, P, ?>)breakpoint, true, false);
}
}
@Nullable
private <P extends XBreakpointProperties> XBreakpoint<P> createDefaultBreakpoint(final XBreakpointType<? extends XBreakpoint<P>, P> type) {
return type.createDefaultBreakpoint(new XBreakpointType.XBreakpointCreator<P>() {
@NotNull
@Override
public XBreakpoint<P> createBreakpoint(@Nullable P properties) {
//noinspection unchecked
return XBreakpointManagerImpl.this.createBreakpoint((XBreakpointType<XBreakpoint<P>, P>)type, properties, false);
}
});
}
private void loadBreakpoint(XBreakpointBase.BreakpointState breakpointState, final boolean defaultBreakpoint) {
XBreakpointBase<?,?,?> breakpoint = createBreakpoint(breakpointState);
if (breakpoint != null) {
@@ -62,6 +62,7 @@ public class XBreakpointManagerTest extends XBreakpointsTestCase {
assertTrue(myBreakpointManager.isDefaultBreakpoint(breakpoints[0]));
assertEquals("default", assertInstanceOf(breakpoints[0].getProperties(), MyBreakpointProperties.class).myOption);
assertTrue(breakpoints[0].isEnabled());
XLineBreakpoint lineBreakpoint = assertInstanceOf(breakpoints[1], XLineBreakpoint.class);
assertEquals(239, lineBreakpoint.getLine());
@@ -85,14 +86,14 @@ public class XBreakpointManagerTest extends XBreakpointsTestCase {
assertEquals(0, element.getContent().size());
}
public void testSaveEnabledDefaultBreakpoint() throws Exception {
public void testSaveChangedDefaultBreakpoint() throws Exception {
reload();
final XBreakpoint<MyBreakpointProperties> breakpoint = getSingleBreakpoint();
breakpoint.setEnabled(true);
breakpoint.setEnabled(false);
assertFalse(save().getContent().isEmpty());
reload();
assertTrue(getSingleBreakpoint().isEnabled());
assertFalse(getSingleBreakpoint().isEnabled());
}
public void testSaveDefaultBreakpointWithModifiedProperties() throws Exception {
@@ -25,10 +25,7 @@ import com.intellij.openapi.vfs.ex.http.HttpFileSystem;
import com.intellij.openapi.vfs.impl.http.HttpFileSystemImpl;
import com.intellij.testFramework.PlatformLiteFixture;
import com.intellij.util.xmlb.annotations.Attribute;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XBreakpointProperties;
import com.intellij.xdebugger.breakpoints.XBreakpointType;
import com.intellij.xdebugger.breakpoints.XLineBreakpointType;
import com.intellij.xdebugger.breakpoints.*;
import org.jetbrains.annotations.NotNull;
import org.picocontainer.MutablePicoContainer;
@@ -90,8 +87,10 @@ public abstract class XDebuggerTestCase extends PlatformLiteFixture {
}
@Override
public MyBreakpointProperties createDefaultBreakpointProperties() {
return new MyBreakpointProperties("default");
public XBreakpoint<MyBreakpointProperties> createDefaultBreakpoint(@NotNull XBreakpointCreator<MyBreakpointProperties> creator) {
final XBreakpoint<MyBreakpointProperties> breakpoint = creator.createBreakpoint(new MyBreakpointProperties("default"));
breakpoint.setEnabled(true);
return breakpoint;
}
}