Fixed bug 440952: Basic Marker Updater should be executed before other contributed markers

Signed-off-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF b/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF
index 4a19d59..7696fa4 100644
--- a/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF
@@ -1,8 +1,9 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %Plugin.name
-Bundle-SymbolicName: org.eclipse.ui.editors.tests
+Bundle-SymbolicName: org.eclipse.ui.editors.tests;singleton:=true
 Bundle-Version: 3.8.300.qualifier
+Bundle-Activator: org.eclipse.ui.editors.tests.EditorTestPlugin
 Bundle-Vendor: %Plugin.providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.ui.editors.tests
@@ -20,3 +21,4 @@
  org.eclipse.text.tests;bundle-version="[3.5.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.4
 Eclipse-BundleShape: dir
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorTestPlugin.java b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorTestPlugin.java
new file mode 100644
index 0000000..3550478
--- /dev/null
+++ b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorTestPlugin.java
@@ -0,0 +1,68 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.editors.tests;
+
+import java.io.BufferedInputStream;
+import java.lang.reflect.Field;
+
+import org.osgi.framework.BundleContext;
+
+import org.eclipse.core.runtime.ContributorFactorySimple;
+import org.eclipse.core.runtime.IContributor;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+
+public class EditorTestPlugin extends Plugin {
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#start(org.osgi.framework.BundleContext)
+	 */
+	public static String PLUGIN_ID= "org.eclipse.ui.editors.tests";
+
+	// The shared instance
+	private static EditorTestPlugin fgPlugin;
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static EditorTestPlugin getDefault() {
+		return fgPlugin;
+	}
+
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		fgPlugin= this;
+		IExtensionRegistry registry= Platform.getExtensionRegistry();
+		IContributor pointContributor= ContributorFactorySimple.createContributor(Long.toString(fgPlugin.getBundle().getBundleId()));
+
+		try{
+			BufferedInputStream bis= new BufferedInputStream(getClass().getResourceAsStream("plugin.xml"));
+
+			Field field=
+					org.eclipse.core.internal.registry.ExtensionRegistry.class
+							.getDeclaredField("masterToken");
+			field.setAccessible(true);
+			Object masterToken= field.get(registry);
+			registry.addContribution(bis, pointContributor, true, null, null, masterToken);
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+		
+	}
+
+	public EditorTestPlugin() {
+		super();
+	}
+
+}
diff --git a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorsTestSuite.java b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorsTestSuite.java
index d719014..2c4a13a 100644
--- a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorsTestSuite.java
+++ b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/EditorsTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@
 		suite.addTest(EncodingChangeTests.suite());
 		suite.addTest(GotoLineTest.suite());
 		suite.addTest(SegmentedModeTest.suite());
+		suite.addTest(MarkerAnnotationOrderTest.suite());
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/MarkerAnnotationOrderTest.java b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/MarkerAnnotationOrderTest.java
new file mode 100644
index 0000000..84d0115
--- /dev/null
+++ b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/MarkerAnnotationOrderTest.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2014 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.editors.tests;
+
+import java.util.ArrayList;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.osgi.framework.Bundle;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.ILogListener;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+
+import org.eclipse.core.resources.IMarker;
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.Position;
+
+import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
+
+import org.eclipse.ui.editors.text.EditorsUI;
+
+public class MarkerAnnotationOrderTest extends TestCase {
+
+	public static Test suite() {
+		return new TestSuite(MarkerAnnotationOrderTest.class);
+	}
+
+	public void testDirectDependency() {
+		final ArrayList list= new ArrayList(2);
+		Bundle bundle= Platform.getBundle(EditorsUI.PLUGIN_ID);
+		ILog log= Platform.getLog(bundle);
+		log.addLogListener(new ILogListener() {
+
+			public void logging(IStatus status, String plugin) {
+				list.add(status);
+			}
+		});
+
+		TestMarkerAnnotationModel t1= new TestMarkerAnnotationModel();
+		Position position= new Position(0);
+		position.delete();
+		IDocument d= null;
+		try {
+			t1.updateMarker(d, null, position);
+		} catch (CoreException e) {
+			fail("update marker failed to execute");
+			EditorTestPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, EditorTestPlugin.PLUGIN_ID, e.getMessage()));
+		}
+
+		assertEquals("Wrong number of messages", 2, list.size());
+		assertEquals(
+				"Wrong Message for first status",
+				"Marker Updater org.eclipse.ui.texteditor.BasicMarkerUpdaterTest2 and org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1 depend on each other, org.eclipse.ui.texteditor.BasicMarkerUpdaterTest2 will run before org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1",
+				((Status)list.get(0)).getMessage());
+		assertEquals(
+				"Wrong Message for second status",
+				"Marker Updater org.eclipse.ui.texteditor.BasicMarkerUpdaterTest4 and org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1 depend on each other, org.eclipse.ui.texteditor.BasicMarkerUpdaterTest4 will run before org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1",
+				((Status)list.get(1)).getMessage());
+
+	}
+
+	public class TestMarkerAnnotationModel extends AbstractMarkerAnnotationModel {
+		protected IMarker[] retrieveMarkers() throws CoreException {
+			return null;
+		}
+
+		protected void deleteMarkers(IMarker[] markers) throws CoreException {
+		}
+
+		protected void listenToMarkerChanges(boolean listen) {
+		}
+
+		protected boolean isAcceptable(IMarker marker) {
+			return false;
+		}
+
+	}
+
+}
diff --git a/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/plugin.xml b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/plugin.xml
new file mode 100644
index 0000000..024b89a
--- /dev/null
+++ b/org.eclipse.ui.editors.tests/src/org/eclipse/ui/editors/tests/plugin.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<plugin>
+	<extension 
+		  point="org.eclipse.ui.editors.markerUpdaters">  
+		      <updater  
+		         class="org.eclipse.ui.texteditor.BasicMarkerUpdater" 
+		         id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1"  
+		         markerType="org.eclipse.ui.editors.test.DummyMarkerType">  
+		         <required-updater id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest2"/>  
+		      </updater>  
+		      <updater  
+				class="org.eclipse.ui.texteditor.BasicMarkerUpdater" 
+				id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest2" 
+				markerType="org.eclipse.ui.editors.test.DummyMarkerType"> 
+				<required-updater id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1"/> 
+				<required-updater id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest3"/> 
+			  </updater> 
+			  <updater 
+				class="org.eclipse.ui.texteditor.BasicMarkerUpdater" 
+				id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest3" 
+				markerType="org.eclipse.ui.editors.test.DummyMarkerType"> 
+				<required-updater id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest4"/> 
+			  </updater> 
+			  <updater 
+				class="org.eclipse.ui.texteditor.BasicMarkerUpdater" 
+				id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest4" 
+				markerType="org.eclipse.ui.editors.test.DummyMarkerType"> 
+				<required-updater id="org.eclipse.ui.texteditor.BasicMarkerUpdaterTest1"/> 
+			  </updater> 
+		</extension>
+</plugin>
\ No newline at end of file
diff --git a/org.eclipse.ui.editors/schema/markerUpdaters.exsd b/org.eclipse.ui.editors/schema/markerUpdaters.exsd
index 2ccb5aa..d27f3b7 100644
--- a/org.eclipse.ui.editors/schema/markerUpdaters.exsd
+++ b/org.eclipse.ui.editors/schema/markerUpdaters.exsd
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='UTF-8'?>
 <!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.ui.editors">
+<schema targetNamespace="org.eclipse.ui.editors" xmlns="http://www.w3.org/2001/XMLSchema">
 <annotation>
       <appInfo>
          <meta.schema plugin="org.eclipse.ui.editors" id="markerUpdaters" name="Marker Updaters"/>
@@ -11,6 +11,11 @@
    </annotation>
 
    <element name="extension">
+      <annotation>
+         <appInfo>
+            <meta.element />
+         </appInfo>
+      </annotation>
       <complexType>
          <sequence>
             <element ref="updater" minOccurs="1" maxOccurs="unbounded"/>
@@ -44,6 +49,9 @@
 
    <element name="updater">
       <complexType>
+         <sequence>
+            <element ref="required-updater" minOccurs="0" maxOccurs="unbounded"/>
+         </sequence>
          <attribute name="id" type="string" use="required">
             <annotation>
                <documentation>
@@ -74,6 +82,21 @@
       </complexType>
    </element>
 
+   <element name="required-updater">
+      <complexType>
+         <attribute name="id" type="string" use="required">
+            <annotation>
+               <documentation>
+                  The fully-qualified id of a marker updater which is required for this updater.
+               </documentation>
+               <appInfo>
+                  <meta.attribute kind="identifier" basedOn="org.eclipse.ui.editors.markerUpdaters/updater/@id"/>
+               </appInfo>
+            </annotation>
+         </attribute>
+      </complexType>
+   </element>
+
    <annotation>
       <appInfo>
          <meta.section type="since"/>
@@ -94,12 +117,13 @@
         id=&quot;org.eclipse.jdt.ui.markerUpdaters.JavaSearchMarkerUpdater&quot; 
         class=&quot;org.eclipse.jdt.internal.ui.search.JavaSearchMarkerUpdater&quot; 
         markerType=&quot;org.eclipse.search.searchmarker&quot;&gt; 
-    &lt;/updater&gt; 
+        &lt;required-updater id=&quot;org.eclipse.ui.texteditor.BasicMarkerUpdater&quot;/&gt; 
+    &lt;/updater&gt;
 &lt;/extension&gt; 
 &lt;/pre&gt;
 &lt;p&gt;
 This example registers &lt;samp&gt;org.eclipse.jdt.internal.ui.search.JavaSearchMarkerUpdater&lt;/samp&gt; as a marker updater for all markers of the 
-type &lt;samp&gt;org.eclipse.search.searchmarker&lt;/samp&gt; including all its derived types.
+type &lt;samp&gt;org.eclipse.search.searchmarker&lt;/samp&gt; including all its derived types. This marker updater requires BasicMarkerUpdater to execute first.
 &lt;/p&gt;
 &lt;pre&gt;
 &lt;extension point= &quot;org.eclipse.ui.editors.markerUpdaters&quot;&gt; 
@@ -110,7 +134,8 @@
 &lt;/extension&gt; 
 &lt;/pre&gt;
 &lt;p&gt;
-This example registers &lt;samp&gt;org.eclipse.ui.texteditor.BasicMarkerUpdater&lt;/samp&gt; as a marker updater independent from the type of the marker. 
+This example registers &lt;samp&gt;org.eclipse.ui.texteditor.BasicMarkerUpdater&lt;/samp&gt; as a marker updater independent from the type of the marker. This marker updater does not require any other updater
+to run first.
 &lt;/p&gt;
       </documentation>
    </annotation>
@@ -124,21 +149,13 @@
       </documentation>
    </annotation>
 
-   <annotation>
-      <appInfo>
-         <meta.section type="implementation"/>
-      </appInfo>
-      <documentation>
-         
-      </documentation>
-   </annotation>
 
    <annotation>
       <appInfo>
          <meta.section type="copyright"/>
       </appInfo>
       <documentation>
-         Copyright (c) 2001, 2008 IBM Corporation and others.&lt;br&gt;
+         Copyright (c) 2001, 2014 IBM Corporation and others.&lt;br&gt;
 All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
       </documentation>
    </annotation>
diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractMarkerAnnotationModel.java b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractMarkerAnnotationModel.java
index 0d36866..59479cf 100644
--- a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractMarkerAnnotationModel.java
+++ b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/AbstractMarkerAnnotationModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,9 @@
 package org.eclipse.ui.texteditor;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.List;
 
 import org.osgi.framework.Bundle;
@@ -38,6 +40,8 @@
 import org.eclipse.jface.text.source.IAnnotationMap;
 
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.editors.text.EditorsPlugin;
+import org.eclipse.ui.internal.editors.text.NLSUtility;
 
 import org.eclipse.ui.editors.text.EditorsUI;
 
@@ -72,6 +76,7 @@
 	/** List of registered but not yet instantiated marker updaters */
 	private List fMarkerUpdaterSpecifications= null;
 
+	private static final String ID= "id"; //$NON-NLS-1$
 
 	/**
 	 * Retrieves all markers from this model.
@@ -256,15 +261,71 @@
 	private void installMarkerUpdaters() {
 
 		// initialize lists - indicates that the initialization happened
-		fMarkerUpdaterSpecifications= new ArrayList(2);
 		fInstantiatedMarkerUpdaters= new ArrayList(2);
+		HashMap markerUpdaterOrderMap = new HashMap(2);
+		LinkedList markerUpdaterSpecificationsLinkedList= new LinkedList();
 
 		// populate list
 		IExtensionPoint extensionPoint= Platform.getExtensionRegistry().getExtensionPoint(EditorsUI.PLUGIN_ID, "markerUpdaters"); //$NON-NLS-1$
 		if (extensionPoint != null) {
 			IConfigurationElement[] elements= extensionPoint.getConfigurationElements();
-			for (int i= 0; i < elements.length; i++)
-				fMarkerUpdaterSpecifications.add(elements[i]);
+			for (int i= 0; i < elements.length; i++) {
+				markerUpdaterSpecificationsLinkedList.add(elements[i]);
+				markerUpdaterOrderMap.put(elements[i].getAttribute(ID), new Integer(i));
+			}
+			//start sorting based on required-updater definition
+			HashMap markerUpdaterRequiredByOrderMap= new HashMap(2);
+			for (int i= 0; i < elements.length; i++) {
+				// Required marker should execute before other updater markers
+				IConfigurationElement[] requiredUpdaters= elements[i].getChildren("required-updater"); //$NON-NLS-1$
+				if (requiredUpdaters.length > 0) {
+					//ArrayList requiredUpdaters= new ArrayList(2);
+					for (int j= 0; j < requiredUpdaters.length; j++) { // If required updaters have been defined
+						String requiredID= requiredUpdaters[j].getAttribute(ID);
+						// If required ID is not a valid id
+						if (requiredID == null || (markerUpdaterOrderMap.get(requiredID) == null)) { // ID missing or invalid - log the message and move to next contribution
+							String msg= NLSUtility.format(TextEditorMessages.AbstractMarkerAnnotationModel_updaterInvalidDefinition, new Object[] { elements[i].getAttribute(ID), requiredID });
+							EditorsPlugin.log(new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, msg));
+							continue;
+						}
+						// Updating requiredByUpdaters to identify and log error for cyclic Dependency like A required B, B required C, C required D and D required A
+						// or A requires B and B requires A
+
+						ArrayList requiredByUpdaters;
+						if (markerUpdaterRequiredByOrderMap.get(requiredID) == null) {
+							requiredByUpdaters= new ArrayList(2);
+						}
+						else {
+							requiredByUpdaters= (ArrayList)markerUpdaterRequiredByOrderMap.get(requiredID);
+						}
+						// Build up extended required id list to identify Case 2
+						if (markerUpdaterRequiredByOrderMap.get(elements[i].getAttribute(ID)) != null) {
+							ArrayList requiredByList= (ArrayList)markerUpdaterRequiredByOrderMap.get(elements[i].getAttribute(ID));
+							requiredByUpdaters.addAll(requiredByList);
+						}
+						if (requiredByUpdaters.contains(requiredID)) { //log error if marker ID is in the required list of required ID
+							String msg= NLSUtility.format(TextEditorMessages.AbstractMarkerAnnotationModel_markerUpdaterCyclicDefinition, new Object[] { elements[i].getAttribute(ID), requiredID });
+							EditorsPlugin.log(new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, msg));
+							continue;
+						}
+						requiredByUpdaters.add(elements[i].getAttribute(ID));
+						markerUpdaterRequiredByOrderMap.put(requiredID, requiredByUpdaters);
+
+						Integer requiredLocation= (Integer)markerUpdaterOrderMap.get(requiredID);
+						if (requiredLocation.intValue() > ((Integer)markerUpdaterOrderMap.get(elements[i].getAttribute(ID))).intValue()) { // If required marker is not ordered before
+							int newLocation= (((Integer)markerUpdaterOrderMap.get(elements[i].getAttribute(ID))).intValue() == 0) ? 0 : (((Integer)markerUpdaterOrderMap.get(elements[i]
+									.getAttribute(ID))).intValue() - 1);
+							Object requiredMarker= markerUpdaterSpecificationsLinkedList.remove(requiredLocation.intValue());
+							markerUpdaterSpecificationsLinkedList.add(newLocation, requiredMarker); // Put the required location before the marker
+							markerUpdaterOrderMap.put(requiredID, new Integer(newLocation));
+							markerUpdaterOrderMap.put(elements[i].getAttribute(ID), new Integer(newLocation + 1));
+						}
+					}
+				}
+			}
+			fMarkerUpdaterSpecifications= new ArrayList(markerUpdaterSpecificationsLinkedList);
+			//end sorting
+
 		}
 	}
 
diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
index c0e32be..d4433bd 100644
--- a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
+++ b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2010 IBM Corporation and others.
+ * Copyright (c) 2000, 2014 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,8 @@
 	public static String AbstractMarkerAnnotationModel_connected;
 	public static String AbstractMarkerAnnotationModel_createMarkerUpdater;
 	public static String AbstractMarkerAnnotationModel_removeAnnotations;
+	public static String AbstractMarkerAnnotationModel_updaterInvalidDefinition;
+	public static String AbstractMarkerAnnotationModel_markerUpdaterCyclicDefinition;
 	public static String DocumentProviderRegistry_error_extension_point_not_found;
 	public static String ChangeEncodingAction_message_noEncodingSupport;
 	public static String ChangeEncodingAction_button_apply_label;
diff --git a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
index 3cdd936..ad9bb83 100644
--- a/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
+++ b/org.eclipse.ui.editors/src/org/eclipse/ui/texteditor/TextEditorMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2000, 2010 IBM Corporation and others.
+# Copyright (c) 2000, 2014 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Eclipse Public License v1.0
 # which accompanies this distribution, and is available at
@@ -18,6 +18,8 @@
 AbstractMarkerAnnotationModel_connected=AbstractMarkerAnnotationModel.connected
 AbstractMarkerAnnotationModel_createMarkerUpdater=AbstractMarkerAnnotationModel.createMarkerUpdater
 AbstractMarkerAnnotationModel_removeAnnotations=AbstractMarkerAnnotationModel.removeAnnotations
+AbstractMarkerAnnotationModel_updaterInvalidDefinition=Marker Updater ''{0}'' has invalid entry for required updater ''{1}''
+AbstractMarkerAnnotationModel_markerUpdaterCyclicDefinition=Marker Updater ''{0}'' and ''{1}'' depend on each other, ''{0}'' will run before ''{1}''
 
 DocumentProviderRegistry_error_extension_point_not_found=Extension point: {0}.documentProviders not found
 ChangeEncodingAction_message_noEncodingSupport=No encoding support installed