Fix for bug 48682: IThread.getBreakpoints() stubbed out.
diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog
index 2f408a9..9c22446 100644
--- a/debug/org.eclipse.cdt.debug.core/ChangeLog
+++ b/debug/org.eclipse.cdt.debug.core/ChangeLog
@@ -1,3 +1,8 @@
+2004-01-15 Mikhail Khodjaiants
+	Fix for bug 48682: IThread.getBreakpoints() stubbed out.
+	* CDebugTarget.java
+	* CThread.java
+
 2003-04-25 Mikhail Khodjaiants
 	Fix for bug 36909
 	* DisassemblyManager.java: check if the address of a stack frame is not 0;
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
index 8fb0616..6d0a9c0 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java
@@ -241,6 +241,11 @@
 	private CRegisterManager fRegisterManager;
 
 	/**
+	 * The suspension thread.
+	 */
+	private ICDIThread fSuspensionThread;	 
+
+	/**
 	 * Whether the debugger process is default.
 	 */
 	private boolean fIsDebuggerProcessDefault = false;
@@ -1365,6 +1370,7 @@
 		setCurrentStateId( IState.SUSPENDED );
 		ICDISessionObject reason = event.getReason();
 		setCurrentStateInfo( reason );
+		setSuspensionThread();
 		List newThreads = refreshThreads();
 		if ( event.getSource() instanceof ICDITarget )
 		{
@@ -2585,4 +2591,40 @@
 	{
 		return getRegisterManager().getRegisterGroups();
 	}
+
+	protected ICDIThread getSuspensionThread()
+	{
+		return fSuspensionThread;
+	}	
+
+	private void setSuspensionThread()
+	{
+		fSuspensionThread = null;
+		try
+		{
+			fSuspensionThread = getCDITarget().getCurrentThread();
+		}
+		catch( CDIException e )
+		{
+			// ignore
+		}
+	}	
+
+	protected IBreakpoint[] getThreadBreakpoints( CThread thread )
+	{
+		List list = new ArrayList( 1 );
+		if ( isSuspended() && thread != null && 
+			 getSuspensionThread() != null && 
+			 getSuspensionThread().equals( thread.getCDIThread() ) )
+		{
+			IBreakpoint bkpt = null;
+			if ( getCurrentStateInfo() instanceof ICDIBreakpointHit )
+				bkpt = findBreakpoint( ((ICDIBreakpointHit)getCurrentStateInfo()).getBreakpoint() );
+			else if ( getCurrentStateInfo() instanceof ICDIWatchpointTrigger )
+				bkpt = findBreakpoint( ((ICDIWatchpointTrigger)getCurrentStateInfo()).getWatchpoint() );
+			if ( bkpt != null )
+				list.add( bkpt );
+		}
+		return (IBreakpoint[])list.toArray( new IBreakpoint[list.size()]);
+	}
 }
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java
index b87ed9c..1dbc89c 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CThread.java
@@ -411,7 +411,7 @@
 	 */
 	public IBreakpoint[] getBreakpoints()
 	{
-		return null;
+		return ((CDebugTarget)getDebugTarget()).getThreadBreakpoints( this );
 	}
 
 	/* (non-Javadoc)