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 boolean differsFromDefault(XBreakpointType, P> type,
+ private boolean differsFromDefault(XBreakpointType, P> 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, P> type) {
- final P properties = type.createDefaultBreakpointProperties();
- if (properties != null) {
- //noinspection unchecked
- addBreakpoint((XBreakpointType breakpoint = createDefaultBreakpoint(type);
+ if (breakpoint != null) {
+ addBreakpoint((XBreakpointBase, P, ?>)breakpoint, true, false);
}
}
+ @Nullable
+ private XBreakpoint createDefaultBreakpoint(final XBreakpointType extends XBreakpoint , P> type) {
+ return type.createDefaultBreakpoint(new XBreakpointType.XBreakpointCreator () {
+ @NotNull
+ @Override
+ public XBreakpoint createBreakpoint(@Nullable P properties) {
+ //noinspection unchecked
+ return XBreakpointManagerImpl.this.createBreakpoint((XBreakpointType