diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XBreakpointType.java b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XBreakpointType.java index 2ed9f463dc4e..413ed78710c0 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XBreakpointType.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XBreakpointType.java @@ -148,12 +148,12 @@ public abstract class XBreakpointType, 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

createDefaultBreakpoint(@NotNull XBreakpointCreator

creator) { return null; } @@ -161,4 +161,9 @@ public abstract class XBreakpointType, P extends XBreak public String getBreakpointsDialogHelpTopic() { return null; } + + public interface XBreakpointCreator

{ + @NotNull + XBreakpoint

createBreakpoint(@Nullable P properties); + } } diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XLineBreakpointType.java b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XLineBreakpointType.java index c867184bfa0a..a2c6f47ec3ed 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XLineBreakpointType.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/breakpoints/XLineBreakpointType.java @@ -86,10 +86,10 @@ public abstract class XLineBreakpointType

exten } /** - * Default line breakpoints cannot be supported + * Default line breakpoints aren't supported */ @Override - public final P createDefaultBreakpointProperties() { + public final XLineBreakpoint

createDefaultBreakpoint(@NotNull XBreakpointCreator

creator) { return null; } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java index 08a4edf99255..b411afdfb3f9 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointManagerImpl.java @@ -107,17 +107,15 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta @NotNull public XBreakpoint addBreakpoint(final XBreakpointType,T> type, @Nullable final T properties) { ApplicationManager.getApplication().assertWriteAccessAllowed(); - return addBreakpoint(type, properties, false, true); + XBreakpointBase breakpoint = createBreakpoint(type, properties, true); + addBreakpoint(breakpoint, false, true); + return breakpoint; } - private XBreakpointBase addBreakpoint(XBreakpointType, T> type, - T properties, - final boolean defaultBreakpoint, - final boolean initUI) { - XBreakpointBase.BreakpointState state = new XBreakpointBase.BreakpointState,T,XBreakpointType,T>>(!defaultBreakpoint, type.getId()); - XBreakpointBase breakpoint = new XBreakpointBase,T, XBreakpointBase.BreakpointState>(type, this, properties, state); - addBreakpoint(breakpoint, defaultBreakpoint, initUI); - return breakpoint; + private XBreakpointBase createBreakpoint(XBreakpointType, T> type, + T properties, final boolean enabled) { + XBreakpointBase.BreakpointState state = new XBreakpointBase.BreakpointState,T,XBreakpointType,T>>(enabled, type.getId()); + return new XBreakpointBase,T, XBreakpointBase.BreakpointState>(type, this, properties, state); } private void addBreakpoint(final XBreakpointBase breakpoint, final boolean defaultBreakpoint, @@ -295,14 +293,14 @@ public class XBreakpointManagerImpl implements XBreakpointManager, PersistentSta return state; } - private static

boolean differsFromDefault(XBreakpointType type, + private

boolean differsFromDefault(XBreakpointType type, XBreakpointBase.BreakpointState state) { - final P defaultProperties = type.createDefaultBreakpointProperties(); - if (defaultProperties == null) { + final XBreakpoint

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

void addDefaultBreakpoint(XBreakpointType type) { - final P properties = type.createDefaultBreakpointProperties(); - if (properties != null) { - //noinspection unchecked - addBreakpoint((XBreakpointType, P>)type, properties, true, false); + final XBreakpoint

breakpoint = createDefaultBreakpoint(type); + if (breakpoint != null) { + addBreakpoint((XBreakpointBase)breakpoint, true, false); } } + @Nullable + private

XBreakpoint

createDefaultBreakpoint(final XBreakpointType, P> type) { + return type.createDefaultBreakpoint(new XBreakpointType.XBreakpointCreator

() { + @NotNull + @Override + public XBreakpoint

createBreakpoint(@Nullable P properties) { + //noinspection unchecked + return XBreakpointManagerImpl.this.createBreakpoint((XBreakpointType, P>)type, properties, false); + } + }); + } + private void loadBreakpoint(XBreakpointBase.BreakpointState breakpointState, final boolean defaultBreakpoint) { XBreakpointBase breakpoint = createBreakpoint(breakpointState); if (breakpoint != null) { diff --git a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XBreakpointManagerTest.java b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XBreakpointManagerTest.java index a6e23eb0fee2..904f0e2ddf1a 100644 --- a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XBreakpointManagerTest.java +++ b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XBreakpointManagerTest.java @@ -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 breakpoint = getSingleBreakpoint(); - breakpoint.setEnabled(true); + breakpoint.setEnabled(false); assertFalse(save().getContent().isEmpty()); reload(); - assertTrue(getSingleBreakpoint().isEnabled()); + assertFalse(getSingleBreakpoint().isEnabled()); } public void testSaveDefaultBreakpointWithModifiedProperties() throws Exception { diff --git a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestCase.java b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestCase.java index d6b37c35569c..8f67ac31a34b 100644 --- a/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestCase.java +++ b/platform/xdebugger-impl/testSrc/com/intellij/xdebugger/XDebuggerTestCase.java @@ -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 createDefaultBreakpoint(@NotNull XBreakpointCreator creator) { + final XBreakpoint breakpoint = creator.createBreakpoint(new MyBreakpointProperties("default")); + breakpoint.setEnabled(true); + return breakpoint; } }