diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java index 5bc0c7d82ea..929734344c4 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SignalManager.java @@ -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.MISignalChangedEvent; 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 { boolean autoupdate; - MISignal[] noSigs = new MISignal[0]; - List signalsList = Collections.synchronizedList(new ArrayList(5)); + MISigHandle[] noSigs = new MISigHandle[0]; + List signalsList = null; public SignalManager(Session session) { super(session); autoupdate = false; } - MISignal[] getMISignals() throws CDIException { - MISignal[] miSigs = noSigs; + MISigHandle[] getMISignals() throws CDIException { + MISigHandle[] miSigs = noSigs; Session session = (Session)getSession(); MISession mi = session.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -55,8 +55,8 @@ public class SignalManager extends SessionObject implements ICDISignalManager { return miSigs; } - MISignal getMISignal(String name) throws CDIException { - MISignal sig = null; + MISigHandle getMISignal(String name) throws CDIException { + MISigHandle sig = null; Session session = (Session)getSession(); MISession mi = session.getMISession(); CommandFactory factory = mi.getCommandFactory(); @@ -67,7 +67,7 @@ public class SignalManager extends SessionObject implements ICDISignalManager { if (info == null) { throw new CDIException("No answer"); } - MISignal[] miSigs = info.getMISignals(); + MISigHandle[] miSigs = info.getMISignals(); if (miSigs.length > 0) { sig = miSigs[0]; } @@ -83,19 +83,21 @@ public class SignalManager extends SessionObject implements ICDISignalManager { * @param mISignal * @return boolean */ - private boolean hasSignalChanged(ICDISignal sig, MISignal miSignal) { - return !sig.getName().equals(miSignal.getName()) ; /* || + private boolean hasSignalChanged(ICDISignal sig, MISigHandle miSignal) { + return !sig.getName().equals(miSignal.getName()) || sig.isStopSet() != miSignal.isStop() || - sig.isIgnore() == miSignal.isPass(); */ + sig.isIgnore() != !miSignal.isPass(); } public ICDISignal findSignal(String name) { ICDISignal sig = null; - ICDISignal[] sigs = (ICDISignal[])signalsList.toArray(new ICDISignal[0]); - for (int i = 0; i < sigs.length; i++) { - if (sigs[i].getName().equals(name)) { - sig = sigs[i]; - break; + if (signalsList != null) { + ICDISignal[] sigs = (ICDISignal[])signalsList.toArray(new ICDISignal[0]); + for (int i = 0; i < sigs.length; i++) { + if (sigs[i].getName().equals(name)) { + sig = sigs[i]; + break; + } } } return sig; @@ -105,9 +107,11 @@ public class SignalManager extends SessionObject implements ICDISignalManager { ICDISignal sig = findSignal(name); if (sig == null) { try { - MISignal miSig = getMISignal(name); + MISigHandle miSig = getMISignal(name); sig = new Signal(this, miSig); - signalsList.add(sig); + if (signalsList != null) { + signalsList.add(sig); + } } catch (CDIException e) { } } @@ -138,12 +142,17 @@ public class SignalManager extends SessionObject implements ICDISignalManager { } catch (MIException 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() */ public ICDISignal[] getSignals() throws CDIException { + if (signalsList == null) { + update(); + } 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() */ public void update() throws CDIException { + if (signalsList == null) { + signalsList = Collections.synchronizedList(new ArrayList(5)); + } Session session = (Session)getSession(); - MISignal[] miSigs = getMISignals(); + MISigHandle[] miSigs = getMISignals(); List eventList = new ArrayList(miSigs.length); for (int i = 0; i < miSigs.length; i++) { ICDISignal sig = findSignal(miSigs[i].getName()); @@ -186,4 +198,10 @@ public class SignalManager extends SessionObject implements ICDISignalManager { mi.fireEvents(events); } + /** + * Method signal. + */ + public void signal() { + } + } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java index 4442d8b2388..6e73bf5218d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Signal.java @@ -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.model.ICDISignal; 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 { SignalManager mgr; - MISignal sig; + MISigHandle sig; - public Signal(SignalManager m, MISignal s) { + public Signal(SignalManager m, MISigHandle s) { super(m.getSession().getCurrentTarget()); mgr = m; sig = s; } - public void setMISignal(MISignal s) { + public void setMISignal(MISigHandle 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(); } /** - * @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#getName() + * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#getName() */ public String 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 { 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() { return !sig.isPass(); } /** - * @see org.eclipse.cdt.debug.core.cdi.ICDISignalReceived#isStopSet() + * @see org.eclipse.cdt.debug.core.cdi.ICDISignal#isStopSet() */ public boolean isStopSet() { return sig.isStop(); } + /** + * Continue program giving it signal specified by the argument. + */ + public void signal() { + mgr.signal(); + } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java index 047fcf72927..f0d0c6ba357 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIInfoSignalsInfo.java @@ -24,14 +24,14 @@ import java.util.StringTokenizer; */ public class MIInfoSignalsInfo extends MIInfo { - MISignal[] signals; + MISigHandle[] signals; public MIInfoSignalsInfo(MIOutput out) { super(out); parse(); } - public MISignal[] getMISignals() { + public MISigHandle[] getMISignals() { 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++) { - signals[i] = (MISignal)aList.get(i); + signals[i] = (MISigHandle)aList.get(i); } } @@ -93,7 +93,7 @@ public class MIInfoSignalsInfo extends MIInfo { break; } } - MISignal s = new MISignal(signal, stop, print, pass, desc.trim()); + MISigHandle s = new MISigHandle(signal, stop, print, pass, desc.trim()); aList.add(s); } } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISigHandle.java similarity index 73% rename from debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java rename to debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISigHandle.java index 944b6ea748b..9f5b5f88fe8 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISignal.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MISigHandle.java @@ -8,7 +8,7 @@ package org.eclipse.cdt.debug.mi.core.output; /** * GDB/MI shared information */ -public class MISignal { +public class MISigHandle { String signal = ""; boolean stop; @@ -16,7 +16,7 @@ public class MISignal { boolean pass; 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; stop = stp; print = prnt; @@ -40,6 +40,11 @@ public class MISignal { return pass; } + public void handle(boolean isIgnore, boolean isStop) { + pass = !isIgnore; + stop = isStop; + } + public String getDescription() { return description; }