mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
xdebugger: default breakpoint can be enabled by default
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+27
-18
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user