diff --git a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
index ff26f0e..803f948 100644
--- a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
+++ b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/InternalAntRunner.java
@@ -1110,7 +1110,7 @@
 	 * <li><b>-main</b> <em>&lt;class&gt;</em> - override Ant's normal entry point</li>
 	 * </ul>
 	 * 
-	 * @param list
+	 * @param commands
 	 *            the raw command line arguments passed in from the application
 	 * @return <code>true</code> if it is OK to run with the given list of arguments <code>false</code> otherwise
 	 */
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
index 38ca086..d07cfcd 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/AntLaunchingUtil.java
@@ -55,7 +55,7 @@
  * General utility class dealing with Ant build files
  */
 public final class AntLaunchingUtil {
-	public static final String ATTRIBUTE_SEPARATOR = ","; //$NON-NLS-1$;
+	public static final String ATTRIBUTE_SEPARATOR = ","; //$NON-NLS-1$
 	public static final char ANT_CLASSPATH_DELIMITER = '*';
 	public static final String ANT_HOME_CLASSPATH_PLACEHOLDER = "G"; //$NON-NLS-1$
 	public static final String ANT_GLOBAL_USER_CLASSPATH_PLACEHOLDER = "UG"; //$NON-NLS-1$
@@ -137,7 +137,7 @@
 	 * 
 	 * @param configuration
 	 *            launch configuration
-	 * @return map of properties (name --> value), or <code>null</code>
+	 * @return map of properties (name --&gt; value), or <code>null</code>
 	 * @throws CoreException
 	 *             if unable to access the associated attribute
 	 */
diff --git a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/inputHandlers/AntTestInputHandler.java b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/inputHandlers/AntTestInputHandler.java
index 4ccc3cd..1b7e366 100644
--- a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/inputHandlers/AntTestInputHandler.java
+++ b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/inputHandlers/AntTestInputHandler.java
@@ -18,8 +18,8 @@
 import org.apache.tools.ant.input.InputRequest;
 
 /**
- * A test input handler when using Ant within Eclipse. This is the class that will respond to <input> requests from within an Ant build file. If the
- * build is occurring in Ant 1.6.0 and the -noinput option has been specified this input handler will fail.
+ * A test input handler when using Ant within Eclipse. This is the class that will respond to {@literal <input>} requests from within an Ant build
+ * file. If the build is occurring in Ant 1.6.0 and the -noinput option has been specified this input handler will fail.
  */
 public class AntTestInputHandler extends DefaultInputHandler {
 
diff --git a/ant/org.eclipse.ant.tests.ui/Ant Debug Tests/org/eclipse/ant/tests/ui/debug/AbstractAntDebugTest.java b/ant/org.eclipse.ant.tests.ui/Ant Debug Tests/org/eclipse/ant/tests/ui/debug/AbstractAntDebugTest.java
index 0b4a763..5284e0a 100644
--- a/ant/org.eclipse.ant.tests.ui/Ant Debug Tests/org/eclipse/ant/tests/ui/debug/AbstractAntDebugTest.java
+++ b/ant/org.eclipse.ant.tests.ui/Ant Debug Tests/org/eclipse/ant/tests/ui/debug/AbstractAntDebugTest.java
@@ -278,8 +278,8 @@
 	 * 
 	 * @param config
 	 *            the configuration to launch
-	 * @param whether
-	 *            to register the launch
+	 * @param register
+	 *            whether to register the launch
 	 * @return thread in which the first suspend event occurred
 	 */
 	protected AntThread launchToBreakpoint(ILaunchConfiguration config, boolean register) throws CoreException {
@@ -419,7 +419,7 @@
 	 * Resumes the given thread, and waits for a suspend event caused by the specified line breakpoint. Returns the thread in which the suspend event
 	 * occurs.
 	 * 
-	 * @param thread
+	 * @param resumeThread
 	 *            thread to resume
 	 * @return thread in which the first suspend event occurs
 	 * @throws CoreException
@@ -516,8 +516,8 @@
 	 * 
 	 * @param lineNumber
 	 *            line number
-	 * @param file
-	 *            the build file
+	 * @param buildFileName
+	 *            the build file name
 	 */
 	protected AntLineBreakpoint createLineBreakpoint(int lineNumber, String buildFileName) throws CoreException {
 		return new AntLineBreakpoint(getIFile(buildFileName), lineNumber);
diff --git a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/dtd/dumper.java b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/dtd/dumper.java
index fa2e304..5847a0f 100644
--- a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/dtd/dumper.java
+++ b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/dtd/dumper.java
@@ -82,11 +82,11 @@
 	/**
 	 * Dump dfm as a series of states.
 	 * 
-	 * <pre>
+	 * <pre>{@code
 	 * S0  a=>S1 b=>S2 
 	 * S1  c=>S2
 	 * S2* d=>S2
-	 * </pre>
+	 * }</pre>
 	 * 
 	 * Where * indicates accepting state.
 	 * 
diff --git a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorContentOutlineTests.java b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorContentOutlineTests.java
index 2aff034..a2737ed 100644
--- a/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorContentOutlineTests.java
+++ b/ant/org.eclipse.ant.tests.ui/Ant Editor Tests/org/eclipse/ant/tests/ui/editor/AntEditorContentOutlineTests.java
@@ -19,15 +19,15 @@
 
 import java.util.List;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
 import org.eclipse.ant.internal.ui.model.AntElementNode;
 import org.eclipse.ant.internal.ui.model.AntModel;
 import org.eclipse.ant.internal.ui.model.IAntElement;
 import org.eclipse.ant.tests.ui.testplugin.AbstractAntUITest;
 import org.eclipse.jface.text.BadLocationException;
 
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
 /**
  * Tests the correct creation of the outline for an xml file.
  * 
@@ -147,7 +147,7 @@
 	}
 
 	/**
-	 * Tests whether the outline can handle a build file with only the <project></project> tags.
+	 * Tests whether the outline can handle a build file with only the {@literal <project></project>} tags.
 	 */
 	public void testWithProjectOnlyBuildFile() {
 		AntModel model = getAntModel("projectOnly.xml"); //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
index ac61fa4..9c32619 100644
--- a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
+++ b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/AbstractAntUITest.java
@@ -28,8 +28,6 @@
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
-import junit.framework.TestCase;
-
 import org.eclipse.ant.internal.ui.AntUIPlugin;
 import org.eclipse.ant.internal.ui.IAntUIPreferenceConstants;
 import org.eclipse.ant.internal.ui.model.AntModel;
@@ -77,6 +75,8 @@
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
+import junit.framework.TestCase;
+
 /**
  * Abstract Ant UI test class
  */
@@ -133,7 +133,7 @@
 				tryAgain = false;
 			}
 			catch (TestAgainException e) {
-				System.out.println("Test failed attempt " + attempts + ". Re-testing: " + this.getName()); //$NON-NLS-1$ //$NON-NLS-2$ 
+				System.out.println("Test failed attempt " + attempts + ". Re-testing: " + this.getName()); //$NON-NLS-1$ //$NON-NLS-2$
 				e.printStackTrace();
 				if (attempts > 5) {
 					tryAgain = false;
@@ -388,8 +388,8 @@
 	/**
 	 * Launches the Ant build in debug output mode with the build file name (no extension).
 	 * 
-	 * @param mainTypeName
-	 *            the program to launch
+	 * @param buildFileName
+	 *            build file to launch
 	 * @return thread in which the first suspend event occurred
 	 */
 	protected void launchWithDebug(String buildFileName) throws CoreException {
@@ -563,7 +563,7 @@
 	 * document.
 	 * 
 	 * @param offset
-	 * @param doc
+	 * @param document
 	 * @return the {@link Color} at the given offset on the given document or <code>null</code>
 	 */
 	protected Color getColorAtOffset(int offset, IDocument document) throws BadLocationException {
diff --git a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/DebugEventWaiter.java b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/DebugEventWaiter.java
index 5ffe9c0..d768319 100644
--- a/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/DebugEventWaiter.java
+++ b/ant/org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin/DebugEventWaiter.java
@@ -95,7 +95,7 @@
 	/**
 	 * Handles debug events.
 	 * 
-	 * @see IDebugEventListener
+	 * @see IDebugEventSetListener
 	 * @see #accept(DebugEvent)
 	 */
 	@Override
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Nfm.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Nfm.java
index ef61d8f..c5c039b 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Nfm.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Nfm.java
@@ -38,11 +38,13 @@
 	 * Construct an nfm such that:
 	 * 
 	 * <pre>
+	 * {@code
 	 * start  stop
 	 *   |      |
 	 * +---+  +---+
 	 * | s |->|   |
 	 * +---+  +---+
+	 * }
 	 * </pre>
 	 * 
 	 * In all pictures, boxes are NfmNodes.
@@ -58,11 +60,13 @@
 	 * Construct an nfm that "wraps" an existing nfm x such that:
 	 * 
 	 * <pre>
+	 * {@code
 	 * start                            stop
 	 *   |                                |
 	 * +---+  +---------+  +---------+  +---+
 	 * |   |->| x start |  | x stop  |->|   |
 	 * +---+  +---------+  +---------+  +---+
+	 * }
 	 * </pre>
 	 */
 	private static Nfm nfm(Nfm x) {
@@ -88,6 +92,7 @@
 	 * "Star" an existing nfm x.
 	 * 
 	 * <pre>
+	 * {@code
 	 * start                            stop
 	 *   |                                |
 	 * +---+  +---------+  +---------+  +---+
@@ -96,6 +101,7 @@
 	 *   |         |            |         |
 	 *   |         +-----<------+         |
 	 *   +------>-------------------------+
+	 * }
 	 * </pre>
 	 * 
 	 * Frees x.
@@ -111,9 +117,10 @@
 	}
 
 	/**
-	 * "Question" an existing nfm x: x => x?
+	 * "Question" an existing nfm x: x =&gt; x?
 	 * 
 	 * <pre>
+	 * {@code
 	 * start                            stop
 	 *   |                                |
 	 * +---+  +---------+  +---------+  +---+
@@ -121,6 +128,7 @@
 	 * +---+  +---------+  +---------+  +---+
 	 *   |                                |
 	 *   +---------------->---------------+
+	 * }
 	 * </pre>
 	 * 
 	 * Frees x.
@@ -134,9 +142,10 @@
 	}
 
 	/**
-	 * "Plus" an existing nfm x -> x+
+	 * "Plus" an existing nfm x -&gt; x+
 	 * 
 	 * <pre>
+	 * {@code
 	 * start                            stop
 	 *   |                                |
 	 * +---+  +---------+  +---------+  +---+
@@ -144,6 +153,7 @@
 	 * +---+  +---------+  +---------+  +---+
 	 *             |            |
 	 *             +-----<------+
+	 * }
 	 * </pre>
 	 * 
 	 * Frees x.
@@ -157,9 +167,10 @@
 	}
 
 	/**
-	 * "Or" two existing nfms x,y -> x|y
+	 * "Or" two existing nfms x,y -&gt; x|y
 	 * 
 	 * <pre>
+	 * {@code
 	 * start                            stop
 	 *   |                                |
 	 * +---+  +---------+  +---------+  +---+
@@ -169,6 +180,7 @@
 	 *   |    +---------+  +---------+    |
 	 *   +--->| y start |  | y stop  |-->-+
 	 *        +---------+  +---------+
+	 * }
 	 * </pre>
 	 * 
 	 * Frees x and y.
@@ -185,17 +197,19 @@
 	}
 
 	/**
-	 * "Comma" two existing nfms x,y -> x,y
+	 * "Comma" two existing nfms x,y -&gt; x,y
 	 * 
 	 * <p>
 	 * Re-uses x so that x.stop is first transformed to y.start and then x.stop is reset to y.stop. This is as efficient as possible.
 	 * 
 	 * <pre>
+	 * {@code
 	 * x start      former x stop   x stop
 	 *     |               |           |
 	 * +---------+  +----------+  +--------+
 	 * | x start |  | y start  |->| y stop |
 	 * +---------+  +----------+  +--------+
+	 * }
 	 * </pre>
 	 * 
 	 * Frees y, returns x modified.
@@ -210,7 +224,7 @@
 	}
 
 	/**
-	 * "{min,*}" an existing nfm x -> x[0],x[1],...,x[min-1],x[min]* Frees x.
+	 * "{min,*}" an existing nfm x -&gt; x[0],x[1],...,x[min-1],x[min]* Frees x.
 	 */
 	public static Nfm getUnbounded(Nfm x, int min) {
 		if (min == 0)
@@ -228,7 +242,7 @@
 	}
 
 	/**
-	 * "{min,max}" an existing nfm x -> x[0],x[1],...,x[min-1],x[min]?,...,x[max-1]? Frees or returns x.
+	 * "{min,max}" an existing nfm x -&gt; x[0],x[1],...,x[min-1],x[min]?,...,x[max-1]? Frees or returns x.
 	 */
 	public static Nfm getMinMax(Nfm x, int min, int max) {
 		if (max == Integer.MAX_VALUE)
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmNode.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmNode.java
index ce82cc7..799e005 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmNode.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/NfmNode.java
@@ -21,7 +21,7 @@
  * Non-deterministic finite state machine node.
  * <p>
  * 
- * Following Aho & Ullman, nfm nodes contain two transition links. The graph is constructed so that no node requires more than two links. There are
+ * Following Aho &amp; Ullman, nfm nodes contain two transition links. The graph is constructed so that no node requires more than two links. There are
  * exactly these kinds of nodes:
  * 
  * <pre>
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
index 8635886..b3340ac 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/SchemaFactory.java
@@ -99,7 +99,7 @@
 	/**
 	 * Strips the surrounding parentheses from <code>aString</code>.
 	 * <P>
-	 * i.e.: (true|false) -> true|false
+	 * i.e.: {@code (true|false) -> true|false }
 	 */
 	private String stripSurroundingParentheses(String aString) {
 		if (aString.startsWith("(")) { //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
index 15bb3ad..679646a 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorCompletionProcessor.java
@@ -885,10 +885,10 @@
 	/**
 	 * Returns all possible values for the specified attribute of the specified task.
 	 * 
-	 * @param aTaskName
+	 * @param taskName
 	 *            the name of the task that the specified attribute belongs to.
 	 * 
-	 * @param anAttributeName
+	 * @param attributeName
 	 *            the name of the attribute for that the value shall be completed
 	 * 
 	 * @param prefix
@@ -1469,7 +1469,7 @@
 	 * 
 	 * @param aDocumentStringToPrefix
 	 *            the String that contains the whole string of the currently edited file from the beginning up to the prefix for code completion.
-	 *            Example: '<project default="name"><property '.
+	 *            Example: {@literal '<project default="name"><property '}.
 	 * 
 	 * @return the extracted task string or <code>null</code> if no string could be extracted.
 	 */
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
index dc66771..b426762 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/TaskDescriptionProvider.java
@@ -43,10 +43,10 @@
 
 /**
  * The <code>TaskDescriptionProvider</code> provides the additional descriptions for tasks and attributes for the code assist.
- * <P>
+ * <p>
  * Descriptions for task are originally provided with the XML file <code>TASKS_DESCRIPTION_XML_FILE_NAME</code>. This file is parsed by the provider
  * and requested descriptions are returned.
- * <P>
+ * </p>
  */
 public class TaskDescriptionProvider {
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingActionGroup.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingActionGroup.java
index d26e673..7fe84a8 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingActionGroup.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingActionGroup.java
@@ -86,9 +86,9 @@
 	/**
 	 * Returns <code>true</code> if the group is enabled.
 	 * 
-	 * <pre>
+	 * <pre>{@code
 	 * Invariant: isEnabled() <=> fViewer and all actions are != null.
-	 * </pre>
+	 * }</pre>
 	 * 
 	 * @return <code>true</code> if the group is enabled
 	 */
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
index 9511403..7e68ea4 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleAutoReconcileAction.java
@@ -27,7 +27,7 @@
 import org.eclipse.ui.texteditor.TextEditorAction;
 
 /**
- * A toolbar action which toggles the {@linkplain org.eclipse.ant.internal.ui.preferences#EDITOR_RECONCILE preference}.
+ * A toolbar action which toggles the {@linkplain org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants#EDITOR_RECONCILE preference}.
  * 
  * @since 3.1
  */
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
index 3efddcc..be65d54 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/ToggleMarkOccurrencesAction.java
@@ -26,7 +26,8 @@
 import org.eclipse.ui.texteditor.TextEditorAction;
 
 /**
- * A toolbar action which toggles the {@linkplain org.eclipse.ant.internal.ui.preferences#EDITOR_MARK_OCCURRENCES mark occurrences preference}.
+ * A toolbar action which toggles the {@linkplain org.eclipse.ant.internal.ui.preferences.AntEditorPreferenceConstants#EDITOR_MARK_OCCURRENCES mark
+ * occurrences preference}.
  * 
  * @since 3.1
  */
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
index 239d9d3..adcd761 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormatter.java
@@ -421,7 +421,7 @@
 	}
 
 	/**
-	 * Indent char is a space char but not a line delimiters. <code>== Character.isWhitespace(ch) && ch != '\n' && ch != '\r'</code>
+	 * Indent char is a space char but not a line delimiters. {@code == Character.isWhitespace(ch) && ch != '\n' && ch != '\r'}
 	 */
 	public static boolean isIndentChar(char ch) {
 		return Character.isWhitespace(ch) && !isLineDelimiterChar(ch);
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java
index fc016d6..845dcf8 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntFoldingStructureProvider.java
@@ -40,7 +40,7 @@
 	private IDocument fDocument;
 
 	/**
-	 * A mapping of the foldable position to the <code>AntElementNode<code> that represent that region
+	 * A mapping of the foldable position to the <code>AntElementNode</code> that represent that region
 	 */
 	private Map<Position, IAntElement> fPositionToElement = new HashMap<>();
 
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
index 3bb65b1..1ac9cff 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/utils/ProjectHelper.java
@@ -60,7 +60,7 @@
 public class ProjectHelper extends ProjectHelper2 {
 
 	/**
-	 * helper for path -> URI and URI -> path conversions.
+	 * helper for path -&gt; URI and URI -&gt; path conversions.
 	 */
 	private static FileUtils fu = null;
 
diff --git a/ant/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java b/ant/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java
index 3f8d3fa..cf89f7a 100644
--- a/ant/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java
+++ b/ant/org.eclipse.ant.ui/Ant Runner Support/org/eclipse/ant/internal/ui/antsupport/inputhandler/AntInputHandler.java
@@ -25,8 +25,8 @@
 import org.eclipse.swt.widgets.Display;
 
 /**
- * The default input handler when using Ant within Eclipse. This is the class that will respond to <input> requests from within an Ant build file. If
- * the build is occurring in Ant 1.6.0 and the -noinput option has been specified this input handler will fail.
+ * The default input handler when using Ant within Eclipse. This is the class that will respond to {@literal <input>} requests from within an Ant
+ * build file. If the build is occurring in Ant 1.6.0 and the -noinput option has been specified this input handler will fail.
  */
 public class AntInputHandler extends DefaultInputHandler {
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIImages.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIImages.java
index 7d67b56..513a668 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIImages.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUIImages.java
@@ -135,13 +135,30 @@
 	/**
 	 * Initialize the image registry by declaring all of the required graphics. This involves creating JFace image descriptors describing how to
 	 * create/find the image should it be needed. The image is not actually allocated until requested.
+	 *
+	 * Prefix conventions
 	 * 
-	 * Prefix conventions Wizard Banners WIZBAN_ Preference Banners PREF_BAN_ Property Page Banners PROPBAN_ Color toolbar CTOOL_ Enable toolbar
-	 * ETOOL_ Disable toolbar DTOOL_ Local enabled toolbar ELCL_ Local Disable toolbar DLCL_ Object large OBJL_ Object small OBJS_ View VIEW_ Product
-	 * images PROD_ Misc images MISC_
-	 * 
-	 * Where are the images? The images (typically gifs) are found in the same location as this plugin class. This may mean the same package directory
-	 * as the package holding this class. The images are declared using this.getClass() to ensure they are looked up via this plugin class.
+	 * <pre>
+	 *      Wizard Banners          WIZBAN_
+	 *      Preference Banners      PREF_BAN_
+	 *      Property Page Banners   PROPBAN_
+	 *      Color toolbar           CTOOL_
+	 *      Enable toolbar          ETOOL_
+	 *      Disable toolbar         DTOOL_
+	 *      Local enabled toolbar   ELCL_
+	 *      Local Disable toolbar   DLCL_
+	 *      Object large            OBJL_
+	 *      Object small            OBJS_
+	 *      View                    VIEW_
+	 *      Product images          PROD_
+	 *      Misc images             MISC_
+	 * </pre>
+	 *
+	 * Where are the images?
+	 * <p>
+	 * The images (typically gifs) are found in the same location as this plugin class. This may mean the same package directory as the package
+	 * holding this class. The images are declared using this.getClass() to ensure they are looked up via this plugin class.
+	 * </p>
 	 * 
 	 * @see org.eclipse.jface.resource.ImageRegistry
 	 */
@@ -152,16 +169,14 @@
 	}
 
 	/**
-	 * Returns the <code>Image<code> identified by the given key,
-	 * or <code>null</code> if it does not exist.
+	 * Returns the <code>Image</code> identified by the given key, or <code>null</code> if it does not exist.
 	 */
 	public static Image getImage(String key) {
 		return getImageRegistry().get(key);
 	}
 
 	/**
-	 * Returns the <code>ImageDescriptor<code> identified by the given key,
-	 * or <code>null</code> if it does not exist.
+	 * Returns the <code>ImageDescriptor</code> identified by the given key, or <code>null</code> if it does not exist.
 	 */
 	public static ImageDescriptor getImageDescriptor(String key) {
 		return getImageRegistry().getDescriptor(key);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
index 1e08955..6075c2d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntUtil.java
@@ -131,7 +131,7 @@
 	 * 
 	 * @param configuration
 	 *            launch configuration
-	 * @return map of properties (name --> value), or <code>null</code>
+	 * @return map of properties (name --&gt; value), or <code>null</code>
 	 * @throws CoreException
 	 *             if unable to access the associated attribute
 	 */
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
index 99c2dea..5c2ab1c 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/ExportUtil.java
@@ -268,7 +268,7 @@
 	/**
 	 * Sort projects according to General -&gt; Workspace -&gt; Build Order.
 	 * 
-	 * @param projects
+	 * @param javaProjects
 	 *            list of IJavaProject objects
 	 * @return list of IJavaProject objects with new order
 	 */
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
index 4b4abf2..14fa722 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/AntLaunchShortcut.java
@@ -64,7 +64,7 @@
 import com.ibm.icu.text.MessageFormat;
 
 /**
- * This class provides the Run/Debug As -> Ant Build launch shortcut.
+ * This class provides the Run/Debug As -&gt; Ant Build launch shortcut.
  * 
  */
 public class AntLaunchShortcut implements ILaunchShortcut2 {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetOrderDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetOrderDialog.java
index c564938..ea7f8ae 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetOrderDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/TargetOrderDialog.java
@@ -88,9 +88,9 @@
 	}
 
 	/**
-	 * Create button area & buttons
+	 * Create button area &amp; buttons
 	 * 
-	 * @param comp
+	 * @param parent
 	 */
 	private void createButtons(Composite parent) {
 		Composite comp = new Composite(parent, SWT.NONE);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java
index fa381da..c1aabff 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/model/IAntModel.java
@@ -89,7 +89,7 @@
 	/**
 	 * Returns the Eclipse resource for the buildfile this Ant model represents
 	 * 
-	 * @return the Eclipse resource or <code>null</null> if the buildfile is not in the workspace
+	 * @return the Eclipse resource or <code>null</code> if the buildfile is not in the workspace
 	 */
 	IFile getFile();
 
@@ -213,7 +213,7 @@
 	/**
 	 * Adds a task element to the Ant model Only called if <code>canGetTaskInfo()</code>() is <code>true</code>
 	 * 
-	 * @param task
+	 * @param newTask
 	 *            the new Apache Ant task
 	 * @param parentTask
 	 *            the parent Apache Ant task or <code>null</code>
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferenceConstants.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferenceConstants.java
index 39d4714..24c03aa 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferenceConstants.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferenceConstants.java
@@ -85,9 +85,9 @@
 	public static final String FORMATTER_TAB_CHAR = "formatter_tab_char"; //$NON-NLS-1$
 
 	/**
-	 * A named preference that specifies if the Ant formatter aligns the final &quote&gt&quote in multi-line element tags
+	 * A named preference that specifies if the Ant formatter aligns the final {@literal ">"} in multi-line element tags
 	 * <p>
-	 * Value is of type <code>Boolean</code>. If <code>true</code> the final &quote&gt&quote in multi-line element tags are aligned by the formatter.
+	 * Value is of type <code>Boolean</code>. If <code>true</code> the final {@literal ">"} in multi-line element tags are aligned by the formatter.
 	 * </p>
 	 */
 	public static final String FORMATTER_ALIGN = "formatter_align"; //$NON-NLS-1$
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
index e910455..c0c6ebe 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntView.java
@@ -223,8 +223,6 @@
 	/**
 	 * Adds actions to the context menu
 	 * 
-	 * @param viewer
-	 *            the viewer who's menu we're configuring
 	 * @param menu
 	 *            The menu to contribute to
 	 */
@@ -576,8 +574,8 @@
 	}
 
 	/**
-	 * Saves the state of the viewer into the dialog settings. Works around the issues of {@link #saveState()} not being called when a view is closed
-	 * while the workbench is still running
+	 * Saves the state of the viewer into the dialog settings. Works around the issues of {@link #saveState(IMemento))} not being called when a view
+	 * is closed while the workbench is still running
 	 * 
 	 * @since 3.5.500
 	 */
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
index 8b0a28f..3b642ad 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/AntOpenWithMenu.java
@@ -261,7 +261,7 @@
 	/**
 	 * Opens the given editor on the selected file.
 	 * 
-	 * @param editor
+	 * @param editorDescriptor
 	 *            the editor descriptor, or <code>null</code> for the system editor
 	 */
 	private void openEditor(IEditorDescriptor editorDescriptor) {
@@ -299,7 +299,8 @@
 								IDE.openEditor(fPage, fileResource, true);
 							}
 							catch (PartInitException e) {
-								AntUIPlugin.log(MessageFormat.format(AntViewActionMessages.AntViewOpenWithMenu_Editor_failed, new Object[] { fileResource.getLocation().toOSString() }), e);
+								AntUIPlugin.log(MessageFormat.format(AntViewActionMessages.AntViewOpenWithMenu_Editor_failed, new Object[] {
+										fileResource.getLocation().toOSString() }), e);
 							}
 						}
 						break;
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
index a2077e8..08724e7 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/SiteEntry.java
@@ -248,7 +248,7 @@
 	}
 	
 	/**
-	 * Detect new features (timestamp > current site timestamp)
+	 * Detect new features (timestamp &gt; current site timestamp)
 	 * and validates existing features (they might have been removed)
 	 */
 	private void detectFeatures() {
@@ -296,7 +296,7 @@
 	}
 	
 	/**
-	 * Detect new plugins (timestamp > current site timestamp)
+	 * Detect new plugins (timestamp &gt; current site timestamp)
 	 * and validates existing plugins (they might have been removed)
 	 */
 	private void detectPlugins() {
diff --git a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
index 98edf85..ee30183 100644
--- a/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
+++ b/update/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/Utils.java
@@ -329,15 +329,15 @@
 	 * <p>
 	 * For example, assume resource bundle plugin.properties contains
 	 * name = Project Name
-	 * <pre>
-	 *     resolveNLString(b,"Hello World") returns "Hello World"</li>
-	 *     resolveNLString(b,"%name") returns "Project Name"</li>
-	 *     resolveNLString(b,"%name Hello World") returns "Project Name"</li>
-	 *     resolveNLString(b,"%abcd Hello World") returns "Hello World"</li>
-	 *     resolveNLString(b,"%abcd") returns "%abcd"</li>
-	 *     resolveNLString(b,"%%name") returns "%name"</li>
-	 * </pre>
 	 * </p>
+	 * <pre>
+	 *     resolveNLString(b,"Hello World") returns "Hello World"
+	 *     resolveNLString(b,"%name") returns "Project Name"
+	 *     resolveNLString(b,"%name Hello World") returns "Project Name"
+	 *     resolveNLString(b,"%abcd Hello World") returns "Hello World"
+	 *     resolveNLString(b,"%abcd") returns "%abcd"
+	 *     resolveNLString(b,"%%name") returns "%name"
+	 * </pre>
 	 * 
 	 * @param resourceBundle resource bundle.
 	 * @param string translatable string from model
