mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +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.mi.service.CSourceLookup;
|
||||
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.MIBreakpointsSynchronizer;
|
||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||
|
@ -107,6 +108,10 @@ public class ServicesLaunchSequence extends Sequence {
|
|||
fLaunch.getServiceFactory().createService(MIBreakpointsManager.class, fSession).initialize(requestMonitor);
|
||||
}},
|
||||
new Step() { @Override
|
||||
public void execute(RequestMonitor requestMonitor) {
|
||||
fLaunch.getServiceFactory().createService(IMIRegisters.class, fSession).initialize(requestMonitor);
|
||||
}},
|
||||
new Step() { @Override
|
||||
public void execute(RequestMonitor 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.IMIBackend;
|
||||
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.MIBreakpointsManager;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIBreakpointsSynchronizer;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIDisassembly;
|
||||
import org.eclipse.cdt.dsf.mi.service.MIExpressions;
|
||||
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.command.CommandFactory;
|
||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||
|
@ -120,6 +122,9 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
|||
else if (MIBreakpointsSynchronizer.class.isAssignableFrom(clazz)) {
|
||||
return (V)createBreakpointsSynchronizerService(session);
|
||||
}
|
||||
else if (IMIRegisters.class.isAssignableFrom(clazz)) {
|
||||
return (V)createMIRegistersService(session);
|
||||
}
|
||||
|
||||
return super.createService(clazz, session, optionalArguments);
|
||||
}
|
||||
|
@ -231,7 +236,7 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
|||
|
||||
@Override
|
||||
protected IRegisters createRegistersService(DsfSession session) {
|
||||
return new GDBRegisters(session);
|
||||
return new GDBManagedRegisterGroups(session);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -286,4 +291,11 @@ public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
|||
protected MIBreakpointsSynchronizer createBreakpointsSynchronizerService(DsfSession 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
|
||||
* the events are generated, guarantees that the state of the service will
|
||||
* 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
|
||||
*/
|
||||
|
@ -83,7 +84,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
* 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 String fGroupName;
|
||||
|
||||
|
@ -93,11 +94,16 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
fGroupName = groupName;
|
||||
}
|
||||
|
||||
public int getGroupNo() { return fGroupNo; }
|
||||
public String getName() { return fGroupName; }
|
||||
@Override
|
||||
public int getGroupNo() { return fGroupNo; }
|
||||
|
||||
@Override
|
||||
public String getName() { return fGroupName; }
|
||||
|
||||
/**
|
||||
* @since 4.6
|
||||
*/
|
||||
@Override
|
||||
public void setName(String groupName) {
|
||||
fGroupName = groupName;
|
||||
}
|
||||
|
@ -110,6 +116,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
|
||||
@Override
|
||||
public int hashCode() { return super.baseHashCode() ^ fGroupNo; }
|
||||
|
||||
@Override
|
||||
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.
|
||||
*/
|
||||
|
||||
public static class MIRegisterDMC extends AbstractDMContext implements IRegisterDMContext {
|
||||
public static class MIRegisterDMC extends AbstractDMContext implements IMIRegisterDMContext {
|
||||
private int fRegNo;
|
||||
private String fRegName;
|
||||
|
||||
|
@ -158,8 +165,11 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
fRegName = regName;
|
||||
}
|
||||
|
||||
public int getRegNo() { return fRegNo; }
|
||||
public String getName() { return fRegName; }
|
||||
@Override
|
||||
public int getRegNo() { return fRegNo; }
|
||||
|
||||
@Override
|
||||
public String getName() { return fRegName; }
|
||||
|
||||
@Override
|
||||
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.
|
||||
*/
|
||||
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();
|
||||
}
|
||||
|
@ -802,4 +817,46 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
|
|||
fRegisterNameCache.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