bug 33712 - "The resource tree is locked for modifications" from JavaDebugOptionsManager
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/BreakpointListenerTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/BreakpointListenerTests.java
index db91e3f..f9ae3ad 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/BreakpointListenerTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/BreakpointListenerTests.java
Binary files differ
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
index 4aa3dc0..2f2214f 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaDebugOptionsManager.java
@@ -777,6 +777,29 @@
 	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
 	 */
 	public void breakpointsAdded(final IBreakpoint[] breakpoints) {
+		// if a breakpoint is added, but already has a message, do not update it
+		List update = new ArrayList();
+		for (int i = 0; i < breakpoints.length; i++) {
+			IBreakpoint breakpoint = breakpoints[i];
+			try {
+				if (breakpoint instanceof IJavaBreakpoint && breakpoint.getMarker().getAttribute(IMarker.MESSAGE) == null) {
+					update.add(breakpoint);
+				}
+			} catch (CoreException e) {
+				JDIDebugUIPlugin.log(e);
+			}
+		}
+		if (!update.isEmpty()) {
+			updateBreakpointMessages((IBreakpoint[])update.toArray(new IBreakpoint[update.size()]));
+		}
+	}
+	
+	/**
+	 * Updates message attributes on the given java breakpoints.
+	 * 
+	 * @see org.eclipse.debug.core.IBreakpointsListener#breakpointsAdded(org.eclipse.debug.core.model.IBreakpoint[])
+	 */
+	private void updateBreakpointMessages(final IBreakpoint[] breakpoints) {
 		IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
 			public void run(IProgressMonitor monitor) throws CoreException {
 				for (int i = 0; i < breakpoints.length; i++) {
@@ -801,7 +824,7 @@
 		} catch (CoreException e) {
 			JDIDebugUIPlugin.log(e);
 		}
-	}
+	}	
 
 	/**
 	 * Updates message attributes on java breakpoints.
@@ -811,7 +834,7 @@
 	public void breakpointsChanged(
 		IBreakpoint[] breakpoints,
 		IMarkerDelta[] deltas) {
-			breakpointsAdded(breakpoints);
+			updateBreakpointMessages(breakpoints);
 
 	}