1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Refactor of MISignal to MISigHandle to not to confuse

with cli "signal SIGNAL".
This commit is contained in:
Alain Magloire 2003-02-03 19:27:12 +00:00
parent 9f080ee5e6
commit 4e6954c190
4 changed files with 69 additions and 36 deletions

View file

@ -21,23 +21,23 @@ import org.eclipse.cdt.debug.mi.core.command.MIInfoSignals;
import org.eclipse.cdt.debug.mi.core.event.MIEvent; import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MISignalChangedEvent; import org.eclipse.cdt.debug.mi.core.event.MISignalChangedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIInfoSignalsInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfoSignalsInfo;
import org.eclipse.cdt.debug.mi.core.output.MISignal; import org.eclipse.cdt.debug.mi.core.output.MISigHandle;
/** /**
*/ */
public class SignalManager extends SessionObject implements ICDISignalManager { public class SignalManager extends SessionObject implements ICDISignalManager {
boolean autoupdate; boolean autoupdate;
MISignal[] noSigs = new MISignal[0]; MISigHandle[] noSigs = new MISigHandle[0];
List signalsList = Collections.synchronizedList(new ArrayList(5)); List signalsList = null;
public SignalManager(Session session) { public SignalManager(Session session) {
super(session); super(session);
autoupdate = false; autoupdate = false;
} }
MISignal[] getMISignals() throws CDIException { MISigHandle[] getMISignals() throws CDIException {
MISignal[] miSigs = noSigs; MISigHandle[] miSigs = noSigs;
Session session = (Session)getSession(); Session session = (Session)getSession();
MISession mi = session.getMISession(); MISession mi = session.getMISession();
CommandFactory factory = mi.getCommandFactory(); CommandFactory factory = mi.getCommandFactory();
@ -55,8 +55,8 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
return miSigs; return miSigs;
} }
MISignal getMISignal(String name) throws CDIException { MISigHandle getMISignal(String name) throws CDIException {
MISignal sig = null; MISigHandle sig = null;
Session session = (Session)getSession(); Session session = (Session)getSession();
MISession mi = session.getMISession(); MISession mi = session.getMISession();
CommandFactory factory = mi.getCommandFactory(); CommandFactory factory = mi.getCommandFactory();
@ -67,7 +67,7 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
if (info == null) { if (info == null) {
throw new CDIException("No answer"); throw new CDIException("No answer");
} }
MISignal[] miSigs = info.getMISignals(); MISigHandle[] miSigs = info.getMISignals();
if (miSigs.length > 0) { if (miSigs.length > 0) {
sig = miSigs[0]; sig = miSigs[0];
} }
@ -83,19 +83,21 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
* @param mISignal * @param mISignal
* @return boolean * @return boolean
*/ */
private boolean hasSignalChanged(ICDISignal sig, MISignal miSignal) { private boolean hasSignalChanged(ICDISignal sig, MISigHandle miSignal) {
return !sig.getName().equals(miSignal.getName()) ; /* || return !sig.getName().equals(miSignal.getName()) ||
sig.isStopSet() != miSignal.isStop() || sig.isStopSet() != miSignal.isStop() ||
sig.isIgnore() == miSignal.isPass(); */ sig.isIgnore() != !miSignal.isPass();
} }
public ICDISignal findSignal(String name) { public ICDISignal findSignal(String name) {
ICDISignal sig = null; ICDISignal sig = null;
ICDISignal[] sigs = (ICDISignal[])signalsList.toArray(new ICDISignal[0]); if (signalsList != null) {
for (int i = 0; i < sigs.length; i++) { ICDISignal[] sigs = (ICDISignal[])signalsList.toArray(new ICDISignal[0]);
if (sigs[i].getName().equals(name)) { for (int i = 0; i < sigs.length; i++) {
sig = sigs[i]; if (sigs[i].getName().equals(name)) {
break; sig = sigs[i];
break;
}
} }
} }
return sig; return sig;
@ -105,9 +107,11 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
ICDISignal sig = findSignal(name); ICDISignal sig = findSignal(name);
if (sig == null) { if (sig == null) {
try { try {
MISignal miSig = getMISignal(name); MISigHandle miSig = getMISignal(name);
sig = new Signal(this, miSig); sig = new Signal(this, miSig);
signalsList.add(sig); if (signalsList != null) {
signalsList.add(sig);
}
} catch (CDIException e) { } catch (CDIException e) {
} }
} }
@ -138,12 +142,17 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
} catch (MIException e) { } catch (MIException e) {
throw new MI2CDIException(e); throw new MI2CDIException(e);
} }
((Signal)sig).getMISignal().handle(isIgnore, isStop);
mi.fireEvent(new MISignalChangedEvent(sig.getName()));
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalManager#getSignals() * @see org.eclipse.cdt.debug.core.cdi.ICDISignalManager#getSignals()
*/ */
public ICDISignal[] getSignals() throws CDIException { public ICDISignal[] getSignals() throws CDIException {
if (signalsList == null) {
update();
}
return (ICDISignal[])signalsList.toArray(new ICDISignal[0]); return (ICDISignal[])signalsList.toArray(new ICDISignal[0]);
} }
@ -165,8 +174,11 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalManager#update() * @see org.eclipse.cdt.debug.core.cdi.ICDISignalManager#update()
*/ */
public void update() throws CDIException { public void update() throws CDIException {
if (signalsList == null) {
signalsList = Collections.synchronizedList(new ArrayList(5));
}
Session session = (Session)getSession(); Session session = (Session)getSession();
MISignal[] miSigs = getMISignals(); MISigHandle[] miSigs = getMISignals();
List eventList = new ArrayList(miSigs.length); List eventList = new ArrayList(miSigs.length);
for (int i = 0; i < miSigs.length; i++) { for (int i = 0; i < miSigs.length; i++) {
ICDISignal sig = findSignal(miSigs[i].getName()); ICDISignal sig = findSignal(miSigs[i].getName());
@ -186,4 +198,10 @@ public class SignalManager extends SessionObject implements ICDISignalManager {
mi.fireEvents(events); mi.fireEvents(events);
} }
/**
* Method signal.
*/
public void signal() {
}
} }

View file

@ -8,58 +8,68 @@ package org.eclipse.cdt.debug.mi.core.cdi.model;
import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.model.ICDISignal; import org.eclipse.cdt.debug.core.cdi.model.ICDISignal;
import org.eclipse.cdt.debug.mi.core.cdi.SignalManager; import org.eclipse.cdt.debug.mi.core.cdi.SignalManager;
import org.eclipse.cdt.debug.mi.core.output.MISignal; import org.eclipse.cdt.debug.mi.core.output.MISigHandle;
/** /**
*/ */
public class Signal extends CObject implements ICDISignal { public class Signal extends CObject implements ICDISignal {
SignalManager mgr; SignalManager mgr;
MISignal sig; MISigHandle sig;
public Signal(SignalManager m, MISignal s) { public Signal(SignalManager m, MISigHandle s) {
super(m.getSession().getCurrentTarget()); super(m.getSession().getCurrentTarget());
mgr = m; mgr = m;
sig = s; sig = s;
} }
public void setMISignal(MISignal s) { public void setMISignal(MISigHandle s) {
sig = s; sig = s;
} }
public MISigHandle getMISignal() {
return sig;
}
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#getMeaning() * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#getMeaning()
*/ */
public String getMeaning() { public String getDescription() {
return sig.getDescription(); return sig.getDescription();
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#getName() * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#getName()
*/ */
public String getName() { public String getName() {
return sig.getName(); return sig.getName();
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#handle() * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#handle()
*/ */
public void handle(boolean ignore, boolean stop) throws CDIException { public void handle(boolean ignore, boolean stop) throws CDIException {
mgr.handle(this, ignore, stop); mgr.handle(this, ignore, stop);
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#isIgnore() * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#isIgnore()
*/ */
public boolean isIgnore() { public boolean isIgnore() {
return !sig.isPass(); return !sig.isPass();
} }
/** /**
* @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#isStopSet() * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#isStopSet()
*/ */
public boolean isStopSet() { public boolean isStopSet() {
return sig.isStop(); return sig.isStop();
} }
/**
* Continue program giving it signal specified by the argument.
*/
public void signal() {
mgr.signal();
}
} }

View file

@ -24,14 +24,14 @@ import java.util.StringTokenizer;
*/ */
public class MIInfoSignalsInfo extends MIInfo { public class MIInfoSignalsInfo extends MIInfo {
MISignal[] signals; MISigHandle[] signals;
public MIInfoSignalsInfo(MIOutput out) { public MIInfoSignalsInfo(MIOutput out) {
super(out); super(out);
parse(); parse();
} }
public MISignal[] getMISignals() { public MISigHandle[] getMISignals() {
return signals; return signals;
} }
@ -49,9 +49,9 @@ public class MIInfoSignalsInfo extends MIInfo {
} }
} }
} }
signals = new MISignal[aList.size()]; signals = new MISigHandle[aList.size()];
for (int i = 0; i < aList.size(); i++) { for (int i = 0; i < aList.size(); i++) {
signals[i] = (MISignal)aList.get(i); signals[i] = (MISigHandle)aList.get(i);
} }
} }
@ -93,7 +93,7 @@ public class MIInfoSignalsInfo extends MIInfo {
break; break;
} }
} }
MISignal s = new MISignal(signal, stop, print, pass, desc.trim()); MISigHandle s = new MISigHandle(signal, stop, print, pass, desc.trim());
aList.add(s); aList.add(s);
} }
} }

View file

@ -8,7 +8,7 @@ package org.eclipse.cdt.debug.mi.core.output;
/** /**
* GDB/MI shared information * GDB/MI shared information
*/ */
public class MISignal { public class MISigHandle {
String signal = ""; String signal = "";
boolean stop; boolean stop;
@ -16,7 +16,7 @@ public class MISignal {
boolean pass; boolean pass;
String description = ""; String description = "";
public MISignal (String name, boolean stp, boolean prnt, boolean ps, String desc) { public MISigHandle (String name, boolean stp, boolean prnt, boolean ps, String desc) {
signal = name; signal = name;
stop = stp; stop = stp;
print = prnt; print = prnt;
@ -40,6 +40,11 @@ public class MISignal {
return pass; return pass;
} }
public void handle(boolean isIgnore, boolean isStop) {
pass = !isIgnore;
stop = isStop;
}
public String getDescription() { public String getDescription() {
return description; return description;
} }