mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 02:06:01 +02:00
Bug 462988 - Register grouping should work with different
implementations of IRegisters service
This commit is contained in:
parent
43bc574e90
commit
404c093923
5 changed files with 1363 additions and 9 deletions
|
@ -33,6 +33,7 @@ import org.eclipse.cdt.dsf.gdb.service.IGDBHardwareAndOS;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
|
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
|
||||||
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.IMIRegisters;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
|
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
@ -107,6 +108,10 @@ public class ServicesLaunchSequence extends Sequence {
|
||||||
fLaunch.getServiceFactory().createService(MIBreakpointsManager.class, fSession).initialize(requestMonitor);
|
fLaunch.getServiceFactory().createService(MIBreakpointsManager.class, fSession).initialize(requestMonitor);
|
||||||
}},
|
}},
|
||||||
new Step() { @Override
|
new Step() { @Override
|
||||||
|
public void execute(RequestMonitor requestMonitor) {
|
||||||
|
fLaunch.getServiceFactory().createService(IMIRegisters.class, fSession).initialize(requestMonitor);
|
||||||
|
}},
|
||||||
|
new Step() { @Override
|
||||||
public void execute(RequestMonitor requestMonitor) {
|
public void execute(RequestMonitor requestMonitor) {
|
||||||
fLaunch.getServiceFactory().createService(IRegisters.class, fSession).initialize(requestMonitor);
|
fLaunch.getServiceFactory().createService(IRegisters.class, fSession).initialize(requestMonitor);
|
||||||
}},
|
}},
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -43,12 +43,14 @@ import org.eclipse.cdt.dsf.gdb.service.command.GDBControl_7_7;
|
||||||
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
import org.eclipse.cdt.dsf.mi.service.CSourceLookup;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIExpressions;
|
import org.eclipse.cdt.dsf.mi.service.IMIExpressions;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.IMIRegisters;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpoints;
|
import org.eclipse.cdt.dsf.mi.service.MIBreakpoints;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
|
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsManager;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIDisassembly;
|
import org.eclipse.cdt.dsf.mi.service.MIDisassembly;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIExpressions;
|
import org.eclipse.cdt.dsf.mi.service.MIExpressions;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIModules;
|
import org.eclipse.cdt.dsf.mi.service.MIModules;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.MIRegisters;
|
||||||
import org.eclipse.cdt.dsf.mi.service.MIStack;
|
import org.eclipse.cdt.dsf.mi.service.MIStack;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
@ -120,6 +122,9 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
||||||
else if (MIBreakpointsSynchronizer.class.isAssignableFrom(clazz)) {
|
else if (MIBreakpointsSynchronizer.class.isAssignableFrom(clazz)) {
|
||||||
return (V)createBreakpointsSynchronizerService(session);
|
return (V)createBreakpointsSynchronizerService(session);
|
||||||
}
|
}
|
||||||
|
else if (IMIRegisters.class.isAssignableFrom(clazz)) {
|
||||||
|
return (V)createMIRegistersService(session);
|
||||||
|
}
|
||||||
|
|
||||||
return super.createService(clazz, session, optionalArguments);
|
return super.createService(clazz, session, optionalArguments);
|
||||||
}
|
}
|
||||||
|
@ -231,7 +236,7 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected IRegisters createRegistersService(DsfSession session) {
|
protected IRegisters createRegistersService(DsfSession session) {
|
||||||
return new GDBRegisters(session);
|
return new GDBManagedRegisterGroups(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -286,4 +291,11 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
||||||
protected MIBreakpointsSynchronizer createBreakpointsSynchronizerService(DsfSession session) {
|
protected MIBreakpointsSynchronizer createBreakpointsSynchronizerService(DsfSession session) {
|
||||||
return new MIBreakpointsSynchronizer(session);
|
return new MIBreakpointsSynchronizer(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
protected IMIRegisters createMIRegistersService(DsfSession session) {
|
||||||
|
return new MIRegisters(session);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2015 Mentor Graphics and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Mentor Graphics - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.dsf.mi.service;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IRegisters;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.IStack.IFrameDMContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
public interface IMIRegisters extends IRegisters {
|
||||||
|
|
||||||
|
public interface IMIRegisterGroupDMContext extends IRegisterGroupDMContext {
|
||||||
|
public int getGroupNo();
|
||||||
|
public String getName();
|
||||||
|
public void setName(String groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface IMIRegisterDMContext extends IRegisterDMContext {
|
||||||
|
public int getRegNo();
|
||||||
|
public String getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IMIRegisterGroupDMContext createRegisterGroupDMC(IContainerDMContext contDmc, int groupNo, String groupName);
|
||||||
|
|
||||||
|
public IMIRegisterDMContext createRegisterDMC(IMIRegisterGroupDMContext groupDmc, int regNo, String regName);
|
||||||
|
|
||||||
|
public IMIRegisterDMContext createRegisterDMC(IMIRegisterGroupDMContext groupDmc, IFrameDMContext frameDmc, int regNo, String regName);
|
||||||
|
|
||||||
|
public String getRootRegisterGroupName();
|
||||||
|
|
||||||
|
public String getRootRegisterGroupDescription();
|
||||||
|
}
|
|
@ -64,9 +64,10 @@ import org.osgi.framework.BundleContext;
|
||||||
* events being issued. Doing this in the handlers as opposed to when
|
* events being issued. Doing this in the handlers as opposed to when
|
||||||
* the events are generated, guarantees that the state of the service will
|
* the events are generated, guarantees that the state of the service will
|
||||||
* always be consistent with the events.
|
* always be consistent with the events.
|
||||||
|
* @since 4.7
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class MIRegisters extends AbstractDsfService implements IRegisters, ICachingService {
|
public class MIRegisters extends AbstractDsfService implements IMIRegisters, ICachingService {
|
||||||
/**
|
/**
|
||||||
* @since 4.6
|
* @since 4.6
|
||||||
*/
|
*/
|
||||||
|
@ -83,7 +84,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
* Support class used to construct Register Group DMCs.
|
* Support class used to construct Register Group DMCs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static class MIRegisterGroupDMC extends AbstractDMContext implements IRegisterGroupDMContext {
|
public static class MIRegisterGroupDMC extends AbstractDMContext implements IMIRegisterGroupDMContext {
|
||||||
private int fGroupNo;
|
private int fGroupNo;
|
||||||
private String fGroupName;
|
private String fGroupName;
|
||||||
|
|
||||||
|
@ -93,11 +94,16 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
fGroupName = groupName;
|
fGroupName = groupName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getGroupNo() { return fGroupNo; }
|
@Override
|
||||||
public String getName() { return fGroupName; }
|
public int getGroupNo() { return fGroupNo; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return fGroupName; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 4.6
|
* @since 4.6
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void setName(String groupName) {
|
public void setName(String groupName) {
|
||||||
fGroupName = groupName;
|
fGroupName = groupName;
|
||||||
}
|
}
|
||||||
|
@ -110,6 +116,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() { return super.baseHashCode() ^ fGroupNo; }
|
public int hashCode() { return super.baseHashCode() ^ fGroupNo; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() { return baseToString() + ".group[" + fGroupNo + "," + fGroupName + "]"; } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
public String toString() { return baseToString() + ".group[" + fGroupNo + "," + fGroupName + "]"; } //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
}
|
}
|
||||||
|
@ -118,7 +125,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
* Support class used to construct Register DMCs.
|
* Support class used to construct Register DMCs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public static class MIRegisterDMC extends AbstractDMContext implements IRegisterDMContext {
|
public static class MIRegisterDMC extends AbstractDMContext implements IMIRegisterDMContext {
|
||||||
private int fRegNo;
|
private int fRegNo;
|
||||||
private String fRegName;
|
private String fRegName;
|
||||||
|
|
||||||
|
@ -158,8 +165,11 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
fRegName = regName;
|
fRegName = regName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getRegNo() { return fRegNo; }
|
@Override
|
||||||
public String getName() { return fRegName; }
|
public int getRegNo() { return fRegNo; }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() { return fRegName; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
|
@ -278,7 +288,12 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
/*
|
/*
|
||||||
* Make ourselves known so clients can use us.
|
* Make ourselves known so clients can use us.
|
||||||
*/
|
*/
|
||||||
register(new String[]{IRegisters.class.getName(), MIRegisters.class.getName()}, new Hashtable<String,String>());
|
register(
|
||||||
|
new String[]{
|
||||||
|
IMIRegisters.class.getName(),
|
||||||
|
MIRegisters.class.getName()
|
||||||
|
},
|
||||||
|
new Hashtable<String,String>());
|
||||||
|
|
||||||
requestMonitor.done();
|
requestMonitor.done();
|
||||||
}
|
}
|
||||||
|
@ -802,4 +817,46 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
||||||
fRegisterNameCache.reset(context);
|
fRegisterNameCache.reset(context);
|
||||||
fRegisterValueCache.reset(context);
|
fRegisterValueCache.reset(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public IMIRegisterGroupDMContext createRegisterGroupDMC(IContainerDMContext contDmc, int groupNo, String groupName) {
|
||||||
|
return new MIRegisterGroupDMC(this, contDmc, groupNo, groupName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public IMIRegisterDMContext createRegisterDMC(IMIRegisterGroupDMContext groupDmc, int regNo, String regName) {
|
||||||
|
assert (groupDmc instanceof MIRegisterGroupDMC);
|
||||||
|
return new MIRegisterDMC(this, (MIRegisterGroupDMC)groupDmc, regNo, regName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public IMIRegisterDMContext createRegisterDMC(IMIRegisterGroupDMContext groupDmc, IFrameDMContext frameDmc, int regNo, String regName) {
|
||||||
|
assert (groupDmc instanceof MIRegisterGroupDMC);
|
||||||
|
return new MIRegisterDMC(this, (MIRegisterGroupDMC)groupDmc, frameDmc, regNo, regName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getRootRegisterGroupName() {
|
||||||
|
return ROOT_GROUP_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.7
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getRootRegisterGroupDescription() {
|
||||||
|
return ROOT_GROUP_DESCRIPTION;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue