diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
index ecae6ce..4a13a0b 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/core/AntRunner.java
@@ -611,9 +611,6 @@
 		return run(contextArguments.get(IApplicationContext.APPLICATION_ARGS));
 	}
 
-	/*
-	 * @see org.eclipse.equinox.app.IApplication#stop()
-	 */
 	@Override
 	public void stop() {
 		if (progressMonitor != null) {
diff --git a/ant/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClassLoader.java b/ant/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClassLoader.java
index b539c08..baec66c 100644
--- a/ant/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClassLoader.java
+++ b/ant/org.eclipse.ant.core/src/org/eclipse/ant/internal/core/AntClassLoader.java
@@ -37,9 +37,6 @@
 		fPluginLoaders = pluginLoaders;
 	}
 
-	/*
-	 * @see java.net.URLClassLoader#findClass(java.lang.String)
-	 */
 	@Override
 	protected Class<?> findClass(String name) throws ClassNotFoundException {
 		Class<?> result = null;
@@ -83,9 +80,6 @@
 		}
 	}
 
-	/*
-	 * @see java.net.URLClassLoader#findResource(java.lang.String)
-	 */
 	@Override
 	public URL findResource(String name) {
 		if (fAllowPluginLoading || !(name.startsWith(ANT_URL_PREFIX))) {
@@ -122,9 +116,6 @@
 		return null;
 	}
 
-	/*
-	 * @see java.net.URLClassLoader#findResources(java.lang.String)
-	 */
 	@Override
 	public Enumeration<URL> findResources(String name) throws IOException {
 		ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
diff --git a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/EclipseAntMain.java b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/EclipseAntMain.java
index 1728e5d..ff97144 100644
--- a/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/EclipseAntMain.java
+++ b/ant/org.eclipse.ant.core/src_ant/org/eclipse/ant/internal/core/ant/EclipseAntMain.java
@@ -32,17 +32,11 @@
 		projectHelpMain.startAnt(args, null, null);
 	}
 
-	/*
-	 * @see org.apache.tools.ant.Main#exit(int)
-	 */
 	@Override
 	protected void exit(int exitCode) {
 		// disallow system exit
 	}
 
-	/*
-	 * @see org.apache.tools.ant.Main#addBuildListeners(org.apache.tools.ant.Project)
-	 */
 	@Override
 	protected void addBuildListeners(Project project) {
 		for (BuildListener listener : fEclipseAntProject.getBuildListeners()) {
diff --git a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
index bf7114f..9b8b03b 100644
--- a/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
+++ b/ant/org.eclipse.ant.launching/loggers/org/eclipse/ant/internal/launching/runtime/logger/NullBuildLogger.java
@@ -36,9 +36,6 @@
 	 */
 	protected Throwable fHandledException = null;
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setMessageOutputLevel(int)
-	 */
 	@Override
 	public void setMessageOutputLevel(int level) {
 		fMessageOutputLevel = level;
@@ -48,25 +45,16 @@
 		return fMessageOutputLevel;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setEmacsMode(boolean)
-	 */
 	@Override
 	public void setEmacsMode(boolean emacsMode) {
 		fEmacsMode = emacsMode;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildStarted(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildFinished(BuildEvent event) {
 		String message = handleException(event);
@@ -76,33 +64,21 @@
 		fHandledException = null;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetStarted(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetFinished(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskStarted(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskFinished(BuildEvent event) {
 		// do nothing
@@ -121,9 +97,6 @@
 		return fOut;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setErrorPrintStream(java.io.PrintStream)
-	 */
 	@Override
 	public void setErrorPrintStream(PrintStream err) {
 		// this build logger logs to "null" unless
@@ -135,9 +108,6 @@
 		}
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setOutputPrintStream(java.io.PrintStream)
-	 */
 	@Override
 	public void setOutputPrintStream(PrintStream output) {
 		// this build logger logs to "null" unless
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntProcess.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntProcess.java
index 1eafa4f..13878e8 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntProcess.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntProcess.java
@@ -50,65 +50,41 @@
 		launch.addProcess(this);
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#getLabel()
-	 */
 	@Override
 	public String getLabel() {
 		return fLabel;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#getLaunch()
-	 */
 	@Override
 	public ILaunch getLaunch() {
 		return fLaunch;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#getStreamsProxy()
-	 */
 	@Override
 	public IStreamsProxy getStreamsProxy() {
 		return fProxy;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#setAttribute(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void setAttribute(String key, String value) {
 		fAttributes.put(key, value);
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#getAttribute(java.lang.String)
-	 */
 	@Override
 	public String getAttribute(String key) {
 		return fAttributes.get(key);
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IProcess#getExitValue()
-	 */
 	@Override
 	public int getExitValue() {
 		return 0;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.ITerminate#canTerminate()
-	 */
 	@Override
 	public boolean canTerminate() {
 		return !isCanceled() && !isTerminated();
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.ITerminate#isTerminated()
-	 */
 	@Override
 	public boolean isTerminated() {
 		return fTerminated;
@@ -123,9 +99,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.ITerminate#terminate()
-	 */
 	@Override
 	public void terminate() {
 		setCanceled(true);
@@ -133,9 +106,6 @@
 
 	// IProgressMonitor implemented to support termination.
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int)
-	 */
 	@Override
 	public void beginTask(String name, int totalWork) {
 		if (fMonitor != null) {
@@ -143,9 +113,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#done()
-	 */
 	@Override
 	public void done() {
 		if (fMonitor != null) {
@@ -153,9 +120,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double)
-	 */
 	@Override
 	public void internalWorked(double work) {
 		if (fMonitor != null) {
@@ -163,17 +127,11 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#isCanceled()
-	 */
 	@Override
 	public boolean isCanceled() {
 		return fCancelled;
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean)
-	 */
 	@Override
 	public void setCanceled(boolean value) {
 		fCancelled = value;
@@ -182,9 +140,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String)
-	 */
 	@Override
 	public void setTaskName(String name) {
 		if (fMonitor != null) {
@@ -192,9 +147,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String)
-	 */
 	@Override
 	public void subTask(String name) {
 		if (fMonitor != null) {
@@ -202,9 +154,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.core.runtime.IProgressMonitor#worked(int)
-	 */
 	@Override
 	public void worked(int work) {
 		if (fMonitor != null) {
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamMonitor.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamMonitor.java
index f656b9a..ac47b47 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamMonitor.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamMonitor.java
@@ -26,25 +26,16 @@
 	private ListenerList<IStreamListener> fListeners = new ListenerList<>(1);
 	private boolean fBuffered = true;
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamMonitor#addListener(org.eclipse.debug.core.IStreamListener)
-	 */
 	@Override
 	public void addListener(IStreamListener listener) {
 		fListeners.add(listener);
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamMonitor#getContents()
-	 */
 	@Override
 	public String getContents() {
 		return fContents.toString();
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamMonitor#removeListener(org.eclipse.debug.core.IStreamListener)
-	 */
 	@Override
 	public void removeListener(IStreamListener listener) {
 		fListeners.remove(listener);
@@ -64,25 +55,16 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#flushContents()
-	 */
 	@Override
 	public void flushContents() {
 		fContents.setLength(0);
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#isBuffered()
-	 */
 	@Override
 	public boolean isBuffered() {
 		return fBuffered;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IFlushableStreamMonitor#setBuffered(boolean)
-	 */
 	@Override
 	public void setBuffered(boolean buffer) {
 		fBuffered = buffer;
diff --git a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamsProxy.java b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamsProxy.java
index 6273faf..77bb5a6 100644
--- a/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamsProxy.java
+++ b/ant/org.eclipse.ant.launching/src/org/eclipse/ant/internal/launching/launchConfigurations/AntStreamsProxy.java
@@ -33,25 +33,16 @@
 	private AntStreamMonitor fVerboseMonitor = new AntStreamMonitor();
 	private AntStreamMonitor fWarningMonitor = new AntStreamMonitor();
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamsProxy#getErrorStreamMonitor()
-	 */
 	@Override
 	public IStreamMonitor getErrorStreamMonitor() {
 		return fErrorMonitor;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamsProxy#getOutputStreamMonitor()
-	 */
 	@Override
 	public IStreamMonitor getOutputStreamMonitor() {
 		return fOutputMonitor;
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.model.IStreamsProxy#write(java.lang.String)
-	 */
 	@Override
 	public void write(String input) {
 		// do nothing
diff --git a/ant/org.eclipse.ant.tests.core/.settings/org.eclipse.jdt.core.prefs b/ant/org.eclipse.ant.tests.core/.settings/org.eclipse.jdt.core.prefs
index 69857c1..6e37b56 100644
--- a/ant/org.eclipse.ant.tests.core/.settings/org.eclipse.jdt.core.prefs
+++ b/ant/org.eclipse.ant.tests.core/.settings/org.eclipse.jdt.core.prefs
@@ -11,9 +11,12 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullisdefault=disabled
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
@@ -25,6 +28,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -35,6 +39,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=error
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=error
@@ -56,7 +61,7 @@
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDefaultCase=warning
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
@@ -67,7 +72,7 @@
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=protected
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
@@ -75,6 +80,7 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo=warning
@@ -82,6 +88,7 @@
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation=error
@@ -93,26 +100,34 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=enabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=error
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=error
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=warning
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=error
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unsafeTypeOperation=warning
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=error
 org.eclipse.jdt.core.compiler.problem.unusedLocal=error
@@ -125,6 +140,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=error
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
 org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL,HIGH,HIGH
diff --git a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask.java b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask.java
index 1ae72a9..371dc96 100644
--- a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask.java
+++ b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask.java
@@ -23,9 +23,6 @@
 		super();
 	}
 
-	/**
-	 * @see org.apache.tools.ant.Task#execute()
-	 */
 	@Override
 	public void execute() throws BuildException {
 		Echo echo = new Echo();
diff --git a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask2.java b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask2.java
index f309699..a49adb2 100644
--- a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask2.java
+++ b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/tasks/AntTestTask2.java
@@ -23,9 +23,6 @@
 		super();
 	}
 
-	/**
-	 * @see org.apache.tools.ant.Task#execute()
-	 */
 	@Override
 	public void execute() throws BuildException {
 		Echo echo = new Echo();
diff --git a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildListener.java b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildListener.java
index 43afb75..d593700 100644
--- a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildListener.java
+++ b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildListener.java
@@ -19,57 +19,36 @@
 
 public class TestBuildListener implements BuildListener {
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildFinished(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildStarted(BuildEvent event) {
 		AntTestChecker.getDefault().addNameOfListener(this.getClass().getName());
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#messageLogged(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void messageLogged(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetFinished(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetStarted(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskFinished(BuildEvent event) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskStarted(BuildEvent event) {
 		// do nothing
diff --git a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildLogger.java b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildLogger.java
index d43c3fe..646ed34 100644
--- a/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildLogger.java
+++ b/ant/org.eclipse.ant.tests.core/test support/org/eclipse/ant/tests/core/support/testloggers/TestBuildLogger.java
@@ -16,7 +16,6 @@
 import java.io.PrintStream;
 
 import org.apache.tools.ant.BuildEvent;
-import org.apache.tools.ant.BuildListener;
 import org.apache.tools.ant.BuildLogger;
 import org.apache.tools.ant.Project;
 import org.eclipse.ant.core.AntSecurityException;
@@ -38,9 +37,6 @@
 	public TestBuildLogger() {
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setMessageOutputLevel(int)
-	 */
 	@Override
 	public void setMessageOutputLevel(int level) {
 		fMessageOutputLevel = level;
@@ -50,25 +46,16 @@
 		return fMessageOutputLevel;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setEmacsMode(boolean)
-	 */
 	@Override
 	public void setEmacsMode(boolean emacsMode) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildStarted(BuildEvent event) {
 		AntTestChecker.getDefault().buildStarted(event.getProject().getName());
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#buildFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void buildFinished(BuildEvent event) {
 		handleException(event);
@@ -76,9 +63,6 @@
 		AntTestChecker.getDefault().buildFinished();
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetStarted(BuildEvent event) {
 		AntTestChecker.getDefault().targetStarted(event.getTarget().getName());
@@ -88,35 +72,23 @@
 		}
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#targetFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void targetFinished(BuildEvent event) {
 		handleException(event);
 		AntTestChecker.getDefault().targetFinished();
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskStarted(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskStarted(BuildEvent event) {
 		AntTestChecker.getDefault().taskStarted(event.getTask().getTaskName());
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildListener#taskFinished(org.apache.tools.ant.BuildEvent)
-	 */
 	@Override
 	public void taskFinished(BuildEvent event) {
 		handleException(event);
 		AntTestChecker.getDefault().targetFinished();
 	}
 
-	/**
-	 * @see BuildListener#messageLogged(BuildEvent)
-	 */
 	@Override
 	public void messageLogged(BuildEvent event) {
 		if (event.getPriority() > getMessageOutputLevel()) {
@@ -134,9 +106,6 @@
 		return fOut;
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setErrorPrintStream(java.io.PrintStream)
-	 */
 	@Override
 	public void setErrorPrintStream(PrintStream err) {
 		// this build logger logs to "null" unless
@@ -148,9 +117,6 @@
 		}
 	}
 
-	/**
-	 * @see org.apache.tools.ant.BuildLogger#setOutputPrintStream(java.io.PrintStream)
-	 */
 	@Override
 	public void setOutputPrintStream(PrintStream output) {
 		// this build logger logs to "null" unless
diff --git a/ant/org.eclipse.ant.tests.core/testresources/AntTestTask.java b/ant/org.eclipse.ant.tests.core/testresources/AntTestTask.java
index df41e5e..f44570c 100644
--- a/ant/org.eclipse.ant.tests.core/testresources/AntTestTask.java
+++ b/ant/org.eclipse.ant.tests.core/testresources/AntTestTask.java
@@ -25,9 +25,6 @@
 		super();
 	}
 	
-	/**
-	 * @see org.apache.tools.ant.Task#execute()
-	 */
 	public void execute() throws BuildException {
 		Echo echo= new Echo();
 		echo.setProject(getProject());
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java
index 158237c..43f392b 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/schema/Model.java
@@ -194,17 +194,11 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.ant.internal.ui.dtd.IModel#getQualifier()
-	 */
 	@Override
 	public String getQualifier() {
 		return fMin == 1 ? (fMax == UNBOUNDED ? "+" : IAntCoreConstants.EMPTY_STRING) : (fMax == UNBOUNDED ? "*" : "?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
-	/**
-	 * @see org.eclipse.ant.internal.ui.dtd.IModel#toNfm()
-	 */
 	@Override
 	public Nfm toNfm() {
 		Nfm nfm = null;
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 b3340ac..56caa16 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
@@ -68,9 +68,6 @@
 		return fSchema;
 	}
 
-	/**
-	 * @see org.xml.sax.ext.DeclHandler#attributeDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void attributeDecl(String eName, String aName, String type, String valueDefault, String value) {
 		Element element = getElement(eName);
@@ -139,9 +136,6 @@
 		return values.toArray(new String[values.size()]);
 	}
 
-	/**
-	 * @see org.xml.sax.ext.DeclHandler#elementDecl(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void elementDecl(String name, String model) throws SAXException {
 		Element element = getElement(name);
@@ -177,7 +171,8 @@
 		fBuf = model.toCharArray();
 		fLen = fBuf.length;
 		if (fBuf[0] != '(') {
-			throw new SAXException(MessageFormat.format(AntDTDSchemaMessages.SchemaFactory_Start_with_left_parenthesis, new Object[] { fElement.getName() }));
+			throw new SAXException(MessageFormat.format(AntDTDSchemaMessages.SchemaFactory_Start_with_left_parenthesis, new Object[] {
+					fElement.getName() }));
 		}
 
 		boolean ortext = model.startsWith("(#PCDATA|"); //$NON-NLS-1$
@@ -265,17 +260,11 @@
 		}
 	}
 
-	/**
-	 * @see org.xml.sax.ext.DeclHandler#externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void externalEntityDecl(String name, String publicId, String systemId) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.xml.sax.ext.DeclHandler#internalEntityDecl(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void internalEntityDecl(String name, String value) {
 		// do nothing
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java
index 78a2607..ce11d86 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMap.java
@@ -13,10 +13,11 @@
  *******************************************************************************/
 package org.eclipse.ant.internal.ui.dtd.util;
 
-import com.ibm.icu.text.MessageFormat;
 import java.util.Comparator;
 import java.util.Iterator;
 
+import com.ibm.icu.text.MessageFormat;
+
 /**
  * @author Bob Foster
  */
@@ -146,9 +147,6 @@
 			fIndex = -1;
 		}
 
-		/**
-		 * @see java.util.Iterator#hasNext()
-		 */
 		@Override
 		public boolean hasNext() {
 			Object[] array = SortedMap.this.fHolder.getKeys();
@@ -157,9 +155,6 @@
 			return fIndex + 1 < array.length;
 		}
 
-		/**
-		 * @see java.util.Iterator#next()
-		 */
 		@Override
 		public Object next() {
 			Object[] array = SortedMap.this.fHolder.getKeys();
@@ -168,9 +163,6 @@
 			return array[++fIndex];
 		}
 
-		/**
-		 * @see java.util.Iterator#remove()
-		 */
 		@Override
 		public void remove() {
 			SortedMap.this.remove(fIndex);
@@ -182,7 +174,8 @@
 	public void remove(int i) {
 		Object[] values = fHolder.getValues();
 		if (values == null) {
-			throw new IllegalArgumentException(MessageFormat.format(AntDTDUtilMessages.SortedMap_remove__0___in_empty_map_2, new Object[] { Integer.toString(i) }));
+			throw new IllegalArgumentException(MessageFormat.format(AntDTDUtilMessages.SortedMap_remove__0___in_empty_map_2, new Object[] {
+					Integer.toString(i) }));
 		}
 		fSet.remove(i);
 		Object[] tmp = new Object[values.length - 1];
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMapFactory.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMapFactory.java
index b3ec16d..2596e44 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMapFactory.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/dtd/util/SortedMapFactory.java
@@ -24,9 +24,6 @@
 public class SortedMapFactory {
 
 	private static class IndirectStringComparator implements Comparator<Object> {
-		/**
-		 * @see java.util.Comparator#compare(Object, Object)
-		 */
 		@Override
 		public int compare(Object o1, Object o2) {
 			return o1.toString().compareTo(o2.toString());
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
index 7522b26..a317320 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditor.java
@@ -167,9 +167,6 @@
 			}
 		}
 
-		/*
-		 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
-		 */
 		@Override
 		public void selectionChanged(SelectionChangedEvent event) {
 			AntModel model = getAntModel();
@@ -251,9 +248,6 @@
 					|| LinkedModeModel.hasInstalledModel(fDocument);
 		}
 
-		/*
-		 * @see Job#run(org.eclipse.core.runtime.IProgressMonitor)
-		 */
 		@Override
 		public IStatus run(IProgressMonitor progressMonitor) {
 
@@ -368,27 +362,17 @@
 			}
 		}
 
-		/*
-		 * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
-		 */
 		@Override
 		public void documentAboutToBeChanged(DocumentEvent event) {
 			if (fOccurrencesFinderJob != null)
 				fOccurrencesFinderJob.doCancel();
 		}
 
-		/*
-		 * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)
-		 */
 		@Override
 		public void documentChanged(DocumentEvent event) {
 			// do nothing
 		}
 
-		/*
-		 * @see org.eclipse.jface.text.ITextInputListener#inputDocumentAboutToBeChanged(org.eclipse.jface.text.IDocument,
-		 * org.eclipse.jface.text.IDocument)
-		 */
 		@Override
 		public void inputDocumentAboutToBeChanged(IDocument oldInput, IDocument newInput) {
 			if (oldInput == null)
@@ -397,9 +381,6 @@
 			oldInput.removeDocumentListener(this);
 		}
 
-		/*
-		 * @see org.eclipse.jface.text.ITextInputListener#inputDocumentChanged(org.eclipse.jface.text.IDocument, org.eclipse.jface.text.IDocument)
-		 */
 		@Override
 		public void inputDocumentChanged(IDocument oldInput, IDocument newInput) {
 			if (newInput == null)
@@ -414,9 +395,6 @@
 	 * @since 3.1
 	 */
 	private class ActivationListener extends ShellAdapter {
-		/*
-		 * @see org.eclipse.swt.events.ShellAdapter#shellActivated(org.eclipse.swt.events.ShellEvent)
-		 */
 		@Override
 		public void shellActivated(ShellEvent e) {
 			if (fMarkOccurrenceAnnotations && isActivePart()) {
@@ -428,9 +406,6 @@
 			}
 		}
 
-		/*
-		 * @see org.eclipse.swt.events.ShellAdapter#shellDeactivated(org.eclipse.swt.events.ShellEvent)
-		 */
 		@Override
 		public void shellDeactivated(ShellEvent e) {
 			if (fMarkOccurrenceAnnotations && isActivePart())
@@ -738,9 +713,6 @@
 		super.handlePreferenceStoreChanged(event);
 	}
 
-	/*
-	 * @see org.eclipse.ui.editors.text.TextEditor#doSetInput(org.eclipse.ui.IEditorInput)
-	 */
 	@Override
 	protected void doSetInput(IEditorInput input) throws CoreException {
 		fAntModel = null;
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 f54ec89..94b0522 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
@@ -353,41 +353,26 @@
 		return combinedProposals;
 	}
 
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(ITextViewer, int)
-	 */
 	@Override
 	public IContextInformation[] computeContextInformation(ITextViewer refViewer, int documentOffset) {
 		return new IContextInformation[0];
 	}
 
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
-	 */
 	@Override
 	public char[] getCompletionProposalAutoActivationCharacters() {
 		return autoActivationChars;
 	}
 
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
-	 */
 	@Override
 	public char[] getContextInformationAutoActivationCharacters() {
 		return null;
 	}
 
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
-	 */
 	@Override
 	public IContextInformationValidator getContextInformationValidator() {
 		return null;
 	}
 
-	/**
-	 * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
-	 */
 	@Override
 	public String getErrorMessage() {
 		return errorMessage;
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
index 5a7248c..46cf646 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/AntEditorSourceViewerConfiguration.java
@@ -123,25 +123,16 @@
 		return reconciler;
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAnnotationHover(org.eclipse.jface.text.source.ISourceViewer)
-	 */
 	@Override
 	public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
 		return new XMLAnnotationHover();
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getInformationControlCreator(org.eclipse.jface.text.source.ISourceViewer)
-	 */
 	@Override
 	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
 		return parent -> new DefaultInformationControl(parent, false);
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getTextHover(org.eclipse.jface.text.source.ISourceViewer, java.lang.String)
-	 */
 	@Override
 	public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
 		if (fTextHover == null) {
@@ -252,10 +243,6 @@
 		return list.toArray(new String[list.size()]);
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer,
-	 * java.lang.String)
-	 */
 	@Override
 	public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) {
 		if (AntEditorPartitionScanner.XML_COMMENT.equals(contentType)) {
@@ -267,9 +254,6 @@
 		return fAutoEditorStategies;
 	}
 
-	/*
-	 * @see org.eclipse.ui.editors.text.TextSourceViewerConfiguration#getHyperlinkDetectorTargets(org.eclipse.jface.text.source.ISourceViewer)
-	 */
 	@Override
 	protected Map<String, IAdaptable> getHyperlinkDetectorTargets(ISourceViewer sourceViewer) {
 		Map<String, IAdaptable> targets = super.getHyperlinkDetectorTargets(sourceViewer);
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/EditorSynchronizer.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/EditorSynchronizer.java
index a84f51a..e01aa6e 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/EditorSynchronizer.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/EditorSynchronizer.java
@@ -40,25 +40,16 @@
 		fEditor.setInLinkedMode(true, fWasOccurrencesOn);
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.link.ILinkedModeListener#left(org.eclipse.jface.text.link.LinkedModeModel, int)
-	 */
 	@Override
 	public void left(LinkedModeModel environment, int flags) {
 		fEditor.setInLinkedMode(false, fWasOccurrencesOn);
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.link.ILinkedModeListener#suspend(org.eclipse.jface.text.link.LinkedModeModel)
-	 */
 	@Override
 	public void suspend(LinkedModeModel environment) {
 		// do nothing
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.link.ILinkedModeListener#resume(org.eclipse.jface.text.link.LinkedModeModel, int)
-	 */
 	@Override
 	public void resume(LinkedModeModel environment, int flags) {
 		// do nothing
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 7fe84a8..de3402e 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,11 @@
 	/**
 	 * Returns <code>true</code> if the group is enabled.
 	 * 
-	 * <pre>{@code
+	 * <pre>
+	 * {@code
 	 * Invariant: isEnabled() <=> fViewer and all actions are != null.
-	 * }</pre>
+	 * }
+	 * </pre>
 	 * 
 	 * @return <code>true</code> if the group is enabled
 	 */
@@ -96,9 +98,6 @@
 		return fViewer != null;
 	}
 
-	/*
-	 * @see org.eclipse.ui.actions.ActionGroup#dispose()
-	 */
 	@Override
 	public void dispose() {
 		if (isEnabled()) {
@@ -121,9 +120,6 @@
 		}
 	}
 
-	/*
-	 * @see org.eclipse.ui.actions.ActionGroup#updateActionBars()
-	 */
 	@Override
 	public void updateActionBars() {
 		update();
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingExpandAllRulerAction.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingExpandAllRulerAction.java
index 908e183..c426552 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingExpandAllRulerAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/actions/FoldingExpandAllRulerAction.java
@@ -23,10 +23,6 @@
 
 public class FoldingExpandAllRulerAction extends AbstractRulerActionDelegate {
 
-	/*
-	 * @see org.eclipse.ui.texteditor.AbstractRulerActionDelegate#createAction(org.eclipse.ui.texteditor.ITextEditor,
-	 * org.eclipse.jface.text.source.IVerticalRulerInfo)
-	 */
 	@Override
 	protected IAction createAction(ITextEditor editor, IVerticalRulerInfo rulerInfo) {
 		TextOperationAction action = new TextOperationAction(AntEditorActionMessages.getResourceBundle(), "Projection.ExpandAll.", editor, ProjectionViewer.EXPAND_ALL, true); //$NON-NLS-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 be65d54..c59876f 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
@@ -45,17 +45,11 @@
 		update();
 	}
 
-	/*
-	 * @see IAction#actionPerformed
-	 */
 	@Override
 	public void run() {
 		fStore.setValue(AntEditorPreferenceConstants.EDITOR_MARK_OCCURRENCES, isChecked());
 	}
 
-	/*
-	 * @see TextEditorAction#update
-	 */
 	@Override
 	public void update() {
 		ITextEditor editor = getTextEditor();
@@ -71,9 +65,6 @@
 		setEnabled(enabled);
 	}
 
-	/*
-	 * @see TextEditorAction#setEditor(ITextEditor)
-	 */
 	@Override
 	public void setEditor(ITextEditor editor) {
 
@@ -94,9 +85,6 @@
 		update();
 	}
 
-	/*
-	 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
-	 */
 	@Override
 	public void propertyChange(PropertyChangeEvent event) {
 		if (event.getProperty().equals(AntEditorPreferenceConstants.EDITOR_MARK_OCCURRENCES))
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormattingStrategy.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormattingStrategy.java
index cffcc79..231f53b 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormattingStrategy.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlDocumentFormattingStrategy.java
@@ -64,18 +64,12 @@
 		}
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStarts(org.eclipse.jface.text.formatter.IFormattingContext)
-	 */
 	@Override
 	public void formatterStarts(final IFormattingContext context) {
 		super.formatterStarts(context);
 		fDocuments.addLast((IDocument) context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM));
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStops()
-	 */
 	@Override
 	public void formatterStops() {
 		super.formatterStops();
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlElementFormattingStrategy.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlElementFormattingStrategy.java
index 4ed72a7..eb168bf 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlElementFormattingStrategy.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/formatter/XmlElementFormattingStrategy.java
@@ -87,9 +87,6 @@
 
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStarts(org.eclipse.jface.text.formatter.IFormattingContext)
-	 */
 	@Override
 	public void formatterStarts(final IFormattingContext context) {
 		super.formatterStarts(context);
@@ -98,9 +95,6 @@
 		fDocuments.addLast((IDocument) context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM));
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStops()
-	 */
 	@Override
 	public void formatterStops() {
 		super.formatterStops();
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java
index 68ab3cb..30d5c2e 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/outline/AntEditorMarkerUpdater.java
@@ -62,11 +62,6 @@
 	public static final String BUILDFILE_PROBLEM_MARKER = AntUIPlugin.PI_ANTUI + ".buildFileProblem"; //$NON-NLS-1$
 	private IFile fFile = null;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ant.internal.ui.editor.outline.IProblemRequestor#acceptProblem(org.eclipse.ant.internal.ui.editor.outline.IProblem)
-	 */
 	public synchronized void acceptProblem(IProblem problem) {
 		if (fCollectedProblems.contains(problem)) {
 			return;
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
index 6f68b36..ebc1ab2 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntTemplateInformationControlCreator.java
@@ -26,9 +26,6 @@
 	public AntTemplateInformationControlCreator() {
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.IInformationControlCreator#createInformationControl(org.eclipse.swt.widgets.Shell)
-	 */
 	@Override
 	public IInformationControl createInformationControl(Shell parent) {
 		fControl = new AntSourceViewerInformationControl(parent);
@@ -36,17 +33,11 @@
 		return fControl;
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.IInformationControlCreatorExtension#canReuse(org.eclipse.jface.text.IInformationControl)
-	 */
 	@Override
 	public boolean canReuse(IInformationControl control) {
 		return fControl == control && fControl != null;
 	}
 
-	/*
-	 * @see org.eclipse.jface.text.IInformationControlCreatorExtension#canReplace(org.eclipse.jface.text.IInformationControlCreator)
-	 */
 	@Override
 	public boolean canReplace(IInformationControlCreator creator) {
 		return (creator != null && getClass() == creator.getClass());
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntVariableResolver.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntVariableResolver.java
index 8f44aa7..db97f04 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntVariableResolver.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/templates/AntVariableResolver.java
@@ -43,9 +43,6 @@
 		}
 	};
 
-	/*
-	 * @see org.eclipse.jface.text.templates.TemplateVariableResolver#resolveAll(org.eclipse.jface.text.templates.TemplateContext)
-	 */
 	@Override
 	protected String[] resolveAll(TemplateContext context) {
 		String[] proposals = new String[] { "${srcDir}", "${dstDir}" }; //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntStorageDocumentProvider.java b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntStorageDocumentProvider.java
index 43f481f..6ec4c0b 100644
--- a/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntStorageDocumentProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Editor/org/eclipse/ant/internal/ui/editor/text/AntStorageDocumentProvider.java
@@ -24,9 +24,6 @@
  */
 public class AntStorageDocumentProvider extends StorageDocumentProvider {
 
-	/*
-	 * @see org.eclipse.ui.editors.text.StorageDocumentProvider#setupDocument(java.lang.Object, org.eclipse.jface.text.IDocument)
-	 */
 	@Override
 	protected void setupDocument(Object element, IDocument document) {
 		if (document != null) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntImageDescriptor.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntImageDescriptor.java
index caa7464..c9603d5 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntImageDescriptor.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/AntImageDescriptor.java
@@ -51,9 +51,6 @@
 		setFlags(flags);
 	}
 
-	/**
-	 * @see CompositeImageDescriptor#getSize()
-	 */
 	@Override
 	protected Point getSize() {
 		if (fSize == null) {
@@ -63,9 +60,6 @@
 		return fSize;
 	}
 
-	/**
-	 * @see Object#equals(java.lang.Object)
-	 */
 	@Override
 	public boolean equals(Object object) {
 		if (!(object instanceof AntImageDescriptor)) {
@@ -76,17 +70,11 @@
 		return (getBaseImage().equals(other.getBaseImage()) && getFlags() == other.getFlags());
 	}
 
-	/**
-	 * @see Object#hashCode()
-	 */
 	@Override
 	public int hashCode() {
 		return getBaseImage().hashCode() | getFlags();
 	}
 
-	/**
-	 * @see CompositeImageDescriptor#drawCompositeImage(int, int)
-	 */
 	@Override
 	protected void drawCompositeImage(int width, int height) {
 		drawImage(createCachedImageDataProvider(getBaseImage()), 0, 0);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java
index 1c4b0df..6669408 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/ColumnSorter.java
@@ -89,9 +89,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-	 */
 	@Override
 	public int compare(Viewer viewer, Object e1, Object e2) {
 		String text1 = getCompareText(e1, this.columnidx);
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
index b46691b..64d7fc3 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/datatransfer/AntBuildfileExportPage.java
@@ -75,9 +75,6 @@
 		setDescription(DataTransferMessages.AntBuildfileExportPage_1);
 	}
 
-	/*
-	 * @see IDialogPage#createControl(Composite)
-	 */
 	@Override
 	public void createControl(Composite parent) {
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/EditAntHomeEntryAction.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/EditAntHomeEntryAction.java
index a88b94b..17dabca 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/EditAntHomeEntryAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/EditAntHomeEntryAction.java
@@ -29,7 +29,6 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.ui.actions.SelectionListenerAction;
 
 /**
  * Edits the Ant Home classpath entry.
@@ -88,9 +87,6 @@
 		getViewer().addEntries(new IRuntimeClasspathEntry[] { new AntHomeClasspathEntry(path) });
 	}
 
-	/**
-	 * @see SelectionListenerAction#updateSelection(IStructuredSelection)
-	 */
 	@Override
 	protected boolean updateSelection(IStructuredSelection selection) {
 		return true;
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RunAntStatusHandler.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RunAntStatusHandler.java
index 0422309..8f1175b 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RunAntStatusHandler.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/launchConfigurations/RunAntStatusHandler.java
@@ -22,9 +22,6 @@
  */
 public class RunAntStatusHandler implements IStatusHandler {
 
-	/**
-	 * @see org.eclipse.debug.core.IStatusHandler#handleStatus(org.eclipse.core.runtime.IStatus, java.lang.Object)
-	 */
 	@Override
 	public Object handleStatus(IStatus status, Object source) {
 		ILaunchConfigurationDialog dialog = (ILaunchConfigurationDialog) source;
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
index de4871d..3c4d90e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AddCustomDialog.java
@@ -201,9 +201,6 @@
 			sourceNameField.add(entry.getLabel());
 		}
 		sourceNameField.addKeyListener(new KeyAdapter() {
-			/*
-			 * @see KeyListener.keyPressed
-			 */
 			@Override
 			public void keyPressed(KeyEvent e) {
 				// If there has been a key pressed then mark as dirty
@@ -212,9 +209,6 @@
 		});
 
 		sourceNameField.addFocusListener(new FocusAdapter() {
-			/*
-			 * @see FocusListener.focusLost(FocusEvent)
-			 */
 			@Override
 			public void focusLost(FocusEvent e) {
 				// Clear the flag to prevent constant update
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathContentProvider.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathContentProvider.java
index 02d33b7..560f1e1 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathContentProvider.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntClasspathContentProvider.java
@@ -91,9 +91,6 @@
 		refresh();
 	}
 
-	/**
-	 * @see ITreeContentProvider#getParent(Object)
-	 */
 	@Override
 	public Object getParent(Object element) {
 		if (element instanceof ClasspathEntry) {
@@ -106,9 +103,6 @@
 		return null;
 	}
 
-	/**
-	 * @see ITreeContentProvider#hasChildren(Object)
-	 */
 	@Override
 	public boolean hasChildren(Object element) {
 		if (element instanceof ClasspathEntry) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
index 82c81b5..8a9ce68 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntEditorPreferencePage.java
@@ -184,25 +184,16 @@
 	 */
 	private class ColorListLabelProvider extends LabelProvider implements IColorProvider {
 
-		/*
-		 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
-		 */
 		@Override
 		public String getText(Object element) {
 			return ((HighlightingColorListItem) element).getDisplayName();
 		}
 
-		/*
-		 * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object)
-		 */
 		@Override
 		public Color getForeground(Object element) {
 			return ((HighlightingColorListItem) element).getItemColor();
 		}
 
-		/*
-		 * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object)
-		 */
 		@Override
 		public Color getBackground(Object element) {
 			return null;
@@ -216,25 +207,16 @@
 	 */
 	private class ColorListContentProvider implements IStructuredContentProvider {
 
-		/*
-		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-		 */
 		@Override
 		public Object[] getElements(Object inputElement) {
 			return ((List<?>) inputElement).toArray();
 		}
 
-		/*
-		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-		 */
 		@Override
 		public void dispose() {
 			// do nothing
 		}
 
-		/*
-		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
 		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 			// do nothing
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java
index ae023c7..bb86501 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreferencePage.java
@@ -306,26 +306,17 @@
 		fConsoleColorSelector.setColorValue(rgb);
 	}
 
-	/**
-	 * @see FieldEditorPreferencePage#createContents(org.eclipse.swt.widgets.Composite)
-	 */
 	@Override
 	protected Control createContents(Composite parent) {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IAntUIHelpContextIds.ANT_PREFERENCE_PAGE);
 		return super.createContents(parent);
 	}
 
-	/**
-	 * @see IWorkbenchPreferencePage#init(IWorkbench)
-	 */
 	@Override
 	public void init(IWorkbench workbench) {
 		// do nothing
 	}
 
-	/**
-	 * @see org.eclipse.jface.preference.FieldEditorPreferencePage#initialize()
-	 */
 	@Override
 	protected void initialize() {
 		super.initialize();
@@ -340,9 +331,6 @@
 		});
 	}
 
-	/**
-	 * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
-	 */
 	@Override
 	protected void performDefaults() {
 		for (String[] colorModel : fAppearanceColorListModel) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
index dd7e1a3..7928fca 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/AntPreviewerUpdater.java
@@ -64,9 +64,6 @@
 			}
 		};
 		final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
-			/*
-			 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
-			 */
 			@Override
 			public void propertyChange(PropertyChangeEvent event) {
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
index 6a3f3b2..e89303e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MessageLine.java
@@ -15,7 +15,6 @@
 
 import org.eclipse.ant.internal.core.IAntCoreConstants;
 import org.eclipse.core.runtime.IStatus;
-
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
 import org.eclipse.swt.graphics.Color;
@@ -85,9 +84,6 @@
 		setBackground(fNormalMsgAreaBackground);
 	}
 
-	/*
-	 * @see Widget#dispose()
-	 */
 	@Override
 	public void dispose() {
 		if (fErrorMsgAreaBackground != null) {
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MinimizedFileSystemElement.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MinimizedFileSystemElement.java
index 11a77de..131025d 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MinimizedFileSystemElement.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/MinimizedFileSystemElement.java
@@ -20,9 +20,7 @@
 
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.Platform;
-
 import org.eclipse.jface.resource.ImageDescriptor;
-
 import org.eclipse.ui.ISharedImages;
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.model.IWorkbenchAdapter;
@@ -198,17 +196,11 @@
 		this.populated = true;
 	}
 
-	/**
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-	 */
 	@Override
 	public Object[] getChildren(Object o) {
 		return getFolders().toArray();
 	}
 
-	/**
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object)
-	 */
 	@Override
 	public ImageDescriptor getImageDescriptor(Object object) {
 		if (isDirectory()) {
@@ -217,17 +209,11 @@
 		return PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(name);
 	}
 
-	/**
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
-	 */
 	@Override
 	public String getLabel(Object o) {
 		return name;
 	}
 
-	/**
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-	 */
 	@Override
 	public Object getParent(Object o) {
 		return parent;
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/OverlayPreferenceStore.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/OverlayPreferenceStore.java
index 87e8bfe..2985773 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/OverlayPreferenceStore.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/OverlayPreferenceStore.java
@@ -47,10 +47,6 @@
 	}
 
 	private class PropertyListener implements IPropertyChangeListener {
-
-		/*
-		 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
-		 */
 		@Override
 		public void propertyChange(PropertyChangeEvent event) {
 			OverlayKey key = findOverlayKey(event.getProperty());
@@ -213,269 +209,173 @@
 		}
 	}
 
-	/*
-	 * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener)
-	 */
 	@Override
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
 		fStore.addPropertyChangeListener(listener);
 	}
 
-	/*
-	 * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener)
-	 */
 	@Override
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
 		fStore.removePropertyChangeListener(listener);
 	}
 
-	/*
-	 * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object)
-	 */
 	@Override
 	public void firePropertyChangeEvent(String name, Object oldValue, Object newValue) {
 		fStore.firePropertyChangeEvent(name, oldValue, newValue);
 	}
 
-	/*
-	 * @see IPreferenceStore#contains(String)
-	 */
 	@Override
 	public boolean contains(String name) {
 		return fStore.contains(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getBoolean(String)
-	 */
 	@Override
 	public boolean getBoolean(String name) {
 		return fStore.getBoolean(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultBoolean(String)
-	 */
 	@Override
 	public boolean getDefaultBoolean(String name) {
 		return fStore.getDefaultBoolean(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultDouble(String)
-	 */
 	@Override
 	public double getDefaultDouble(String name) {
 		return fStore.getDefaultDouble(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultFloat(String)
-	 */
 	@Override
 	public float getDefaultFloat(String name) {
 		return fStore.getDefaultFloat(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultInt(String)
-	 */
 	@Override
 	public int getDefaultInt(String name) {
 		return fStore.getDefaultInt(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultLong(String)
-	 */
 	@Override
 	public long getDefaultLong(String name) {
 		return fStore.getDefaultLong(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDefaultString(String)
-	 */
 	@Override
 	public String getDefaultString(String name) {
 		return fStore.getDefaultString(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getDouble(String)
-	 */
 	@Override
 	public double getDouble(String name) {
 		return fStore.getDouble(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getFloat(String)
-	 */
 	@Override
 	public float getFloat(String name) {
 		return fStore.getFloat(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getInt(String)
-	 */
 	@Override
 	public int getInt(String name) {
 		return fStore.getInt(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getLong(String)
-	 */
 	@Override
 	public long getLong(String name) {
 		return fStore.getLong(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#getString(String)
-	 */
 	@Override
 	public String getString(String name) {
 		return fStore.getString(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#isDefault(String)
-	 */
 	@Override
 	public boolean isDefault(String name) {
 		return fStore.isDefault(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#needsSaving()
-	 */
 	@Override
 	public boolean needsSaving() {
 		return fStore.needsSaving();
 	}
 
-	/*
-	 * @see IPreferenceStore#putValue(String, String)
-	 */
 	@Override
 	public void putValue(String name, String value) {
 		if (covers(name))
 			fStore.putValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, double)
-	 */
 	@Override
 	public void setDefault(String name, double value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, float)
-	 */
 	@Override
 	public void setDefault(String name, float value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, int)
-	 */
 	@Override
 	public void setDefault(String name, int value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, long)
-	 */
 	@Override
 	public void setDefault(String name, long value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, String)
-	 */
 	@Override
 	public void setDefault(String name, String value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setDefault(String, boolean)
-	 */
 	@Override
 	public void setDefault(String name, boolean value) {
 		if (covers(name))
 			fStore.setDefault(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setToDefault(String)
-	 */
 	@Override
 	public void setToDefault(String name) {
 		fStore.setToDefault(name);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, double)
-	 */
 	@Override
 	public void setValue(String name, double value) {
 		if (covers(name))
 			fStore.setValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, float)
-	 */
 	@Override
 	public void setValue(String name, float value) {
 		if (covers(name))
 			fStore.setValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, int)
-	 */
 	@Override
 	public void setValue(String name, int value) {
 		if (covers(name))
 			fStore.setValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, long)
-	 */
 	@Override
 	public void setValue(String name, long value) {
 		if (covers(name))
 			fStore.setValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, String)
-	 */
 	@Override
 	public void setValue(String name, String value) {
 		if (covers(name))
 			fStore.setValue(name, value);
 	}
 
-	/*
-	 * @see IPreferenceStore#setValue(String, boolean)
-	 */
 	@Override
 	public void setValue(String name, boolean value) {
 		if (covers(name))
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/StatusInfo.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/StatusInfo.java
index ffda08d..eb93d08 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/StatusInfo.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences/StatusInfo.java
@@ -123,9 +123,6 @@
 		fSeverity = IStatus.OK;
 	}
 
-	/*
-	 * @see IStatus#matches(int)
-	 */
 	@Override
 	public boolean matches(int severityMask) {
 		return (fSeverity & severityMask) != 0;
@@ -141,17 +138,11 @@
 		return false;
 	}
 
-	/*
-	 * @see IStatus#getSeverity()
-	 */
 	@Override
 	public int getSeverity() {
 		return fSeverity;
 	}
 
-	/*
-	 * @see IStatus#getPlugin()
-	 */
 	@Override
 	public String getPlugin() {
 		return IAntUIConstants.PLUGIN_ID;
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java
index 5821293..14cb3a7 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/AntViewDropAdapter.java
@@ -39,9 +39,6 @@
 		this.view = view;
 	}
 
-	/**
-	 * @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent)
-	 */
 	@Override
 	public void drop(DropTargetEvent event) {
 		Object data = event.data;
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/EditorImageDescriptor.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/EditorImageDescriptor.java
index ac5db17..2e9eb6e 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/EditorImageDescriptor.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/EditorImageDescriptor.java
@@ -56,9 +56,6 @@
 		return createImage();
 	}
 
-	/**
-	 * @see org.eclipse.jface.resource.ImageDescriptor#getImageData()
-	 */
 	@Override
 	public ImageData getImageData() {
 
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RemoveProjectAction.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RemoveProjectAction.java
index 4e63371..030e3da 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RemoveProjectAction.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/RemoveProjectAction.java
@@ -41,9 +41,6 @@
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IAntUIHelpContextIds.REMOVE_PROJECT_ACTION);
 	}
 
-	/**
-	 * @see org.eclipse.jface.action.IAction#run()
-	 */
 	@Override
 	public void run() {
 		IStructuredSelection selection = (IStructuredSelection) view.getViewer().getSelection();
@@ -59,9 +56,6 @@
 		view.removeProjects(projectNodes);
 	}
 
-	/**
-	 * @see org.eclipse.ui.texteditor.IUpdate#update()
-	 */
 	@Override
 	public void update() {
 		IStructuredSelection selection = (IStructuredSelection) view.getViewer().getSelection();
diff --git a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
index bd56587..c906193 100644
--- a/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
+++ b/ant/org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/views/actions/SearchForBuildFilesDialog.java
@@ -395,9 +395,6 @@
 			pattern = Pattern.compile(input);
 		}
 
-		/**
-		 * @see org.eclipse.core.resources.IResourceProxyVisitor#visit(org.eclipse.core.resources.IResourceProxy)
-		 */
 		@Override
 		public boolean visit(IResourceProxy proxy) {
 			if (proxy.getType() == IResource.FILE) {
