1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

Bug 462988 - Register grouping should work with different

implementations of IRegisters service
This commit is contained in:
Mikhail Khodjaiants 2015-03-24 12:23:22 -04:00
parent 43bc574e90
commit 404c093923
5 changed files with 1363 additions and 9 deletions

View file

@ -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);
}},

View file

@ -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);
}
}

View file

@ -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();
}

View file

@ -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;
}
}