Bug 520346 - Disabled trigger point gets enabled automatically

Change-Id: I3966b4ef2e52b4c4cf1083a0e623d9539e9717cc
diff --git a/org.eclipse.debug.core/META-INF/MANIFEST.MF b/org.eclipse.debug.core/META-INF/MANIFEST.MF
index 930cbe6..aedbece 100644
--- a/org.eclipse.debug.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.debug.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.debug.core; singleton:=true
-Bundle-Version: 3.13.0.qualifier
+Bundle-Version: 3.13.100.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.debug.core.DebugPlugin
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
index 49d1d12..c97f937 100644
--- a/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
+++ b/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/BreakpointManager.java
@@ -160,6 +160,12 @@
 	 */
 	private Set<IBreakpoint> fTriggerPointBreakpointList = new LinkedHashSet<>();
 
+	/**
+	 * Trigger points disabled by system after the first trigger point is
+	 * enabled in a workspace.
+	 */
+	private Set<IBreakpoint> fTriggerPointDisabledList = new LinkedHashSet<>();
+
 
 	/**
 	 * Listens to POST_CHANGE notifications of breakpoint markers to detect when
@@ -1415,21 +1421,34 @@
 	}
 
 	@Override
-	public void enableTriggerPoints(IBreakpoint[] triggerPoints, boolean enable) {
+	public synchronized void enableTriggerPoints(IBreakpoint[] triggerPoints, boolean enable) {
 		IBreakpoint[] triggerPointList = triggerPoints;
 		if (triggerPoints == null) {
-			triggerPointList = fTriggerPointBreakpointList.toArray(new IBreakpoint[0]);
+			if (enable) {
+				triggerPointList = fTriggerPointDisabledList.toArray(new IBreakpoint[0]);
+			} else {
+				triggerPointList = fTriggerPointBreakpointList.toArray(new IBreakpoint[0]);
+				if (!fTriggerPointDisabledList.isEmpty()) {
+					fTriggerPointDisabledList = new LinkedHashSet<>();
+				}
+			}
 		}
 		for (IBreakpoint iBreakpoint : triggerPointList) {
 			try {
 				IMarker m = iBreakpoint.getMarker();
 				if (m != null && m.exists()) {
+					if (!enable && iBreakpoint.isEnabled()) {
+						fTriggerPointDisabledList.add(iBreakpoint);
+					}
 					iBreakpoint.setEnabled(enable);
 				}
 			} catch (CoreException e) {
 				e.printStackTrace();
 			}
 		}
+		if (enable) {
+			fTriggerPointDisabledList = new LinkedHashSet<>();
+		}
 	}
 
 	@Override
diff --git a/org.eclipse.debug.core/pom.xml b/org.eclipse.debug.core/pom.xml
index 77e0f76..46426c9 100644
--- a/org.eclipse.debug.core/pom.xml
+++ b/org.eclipse.debug.core/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.debug</groupId>
   <artifactId>org.eclipse.debug.core</artifactId>
-  <version>3.13.0-SNAPSHOT</version>
+  <version>3.13.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>