diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java b/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java
new file mode 100644
index 0000000..4fa59ed
--- /dev/null
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Marc R. Hoffmann - initial API and implementation
+ *    
+ * $Id: $
+ *******************************************************************************/
+package org.jacoco.ant;
+
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+
+/**
+ * Test utility to remove debug information from class files.
+ * 
+ * @author Marc R. Hoffmann
+ * @version $Revision: $
+ */
+public class RemoveDebugInfos {
+
+	public static void main(String[] args) throws Exception {
+		final InputStream in = new FileInputStream(args[0]);
+		final ClassReader reader = new ClassReader(in);
+		in.close();
+
+		final ClassWriter writer = new ClassWriter(0);
+		reader.accept(writer, ClassReader.SKIP_DEBUG);
+
+		final OutputStream out = new FileOutputStream(args[1]);
+		out.write(writer.toByteArray());
+		out.close();
+	}
+
+}
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
index 123f843..e1efd89 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
@@ -60,6 +60,24 @@
 		</au:expectfailure>
 	</target>
 	
+	<target name="testReportWithSourceButNoDebug">
+		<java classname="org.jacoco.ant.RemoveDebugInfos" classpath="${java.class.path}" failonerror="true">
+			<arg value="${org.jacoco.ant.reportTaskTest.classes.dir}/org/jacoco/ant/TestTarget.class" />
+			<arg value="${temp.dir}/TestTarget.class" />
+		</java>
+		<jacoco:report>
+			<structure name="root">
+				<classfiles>
+					<fileset dir="${temp.dir}" id="*.class" />
+				</classfiles>
+				<sourcefiles>
+					<fileset dir="." id="*.java" />
+				</sourcefiles>
+			</structure>
+		</jacoco:report>
+		<au:assertLogContains level="warn" text="To enable source code annotation class files for bundle 'root' have to be compiled with debug information."/>
+	</target>
+	
 	<!-- HTML Output -->
 	
 	<target name="testReportHtmlNoDestdirOrDestfile">
diff --git a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
index 52c6bf1..d707065 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
@@ -12,6 +12,8 @@
  *******************************************************************************/
 package org.jacoco.ant;
 
+import static java.lang.String.format;
+
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -28,6 +30,7 @@
 import java.util.zip.ZipOutputStream;
 
 import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.resources.FileResource;
@@ -38,8 +41,8 @@
 import org.jacoco.core.analysis.CoverageBuilder;
 import org.jacoco.core.analysis.CoverageNodeImpl;
 import org.jacoco.core.analysis.ICoverageNode;
-import org.jacoco.core.analysis.PackageCoverage;
 import org.jacoco.core.analysis.ICoverageNode.ElementType;
+import org.jacoco.core.analysis.PackageCoverage;
 import org.jacoco.core.data.ExecutionDataReader;
 import org.jacoco.core.data.ExecutionDataStore;
 import org.jacoco.core.data.SessionInfoStore;
@@ -523,16 +526,32 @@
 				return new InputStreamReader(r.getInputStream(), encoding);
 			}
 		}
+
+		public boolean isEmpty() {
+			return resources.isEmpty();
+		}
 	}
 
-	private static void visitBundle(final IReportVisitor visitor,
+	private void visitBundle(final IReportVisitor visitor,
 			final BundleCoverage bundledata,
-			final ISourceFileLocator sourceFileLocator) throws IOException {
+			final SourceFileCollection sourceFileLocator) throws IOException {
+		if (!sourceFileLocator.isEmpty()) {
+			checkForMissingDebugInformation(bundledata);
+		}
 		for (final PackageCoverage p : bundledata.getPackages()) {
 			visitPackage(visitor.visitChild(p), p, sourceFileLocator);
 		}
 	}
 
+	private void checkForMissingDebugInformation(final ICoverageNode node) {
+		if (node.getClassCounter().getTotalCount() > 0
+				&& node.getLineCounter().getTotalCount() == 0) {
+			log(format(
+					"To enable source code annotation class files for bundle '%s' have to be compiled with debug information.",
+					node.getName()), Project.MSG_WARN);
+		}
+	}
+
 	private static void visitPackage(final IReportVisitor visitor,
 			final PackageCoverage packagedata,
 			final ISourceFileLocator sourceFileLocator) throws IOException {
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index 3eead4f..dc53f5e 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -20,6 +20,13 @@
 
 <h2>Trunk Build @qualified.bundle.version@ (@build.date@)</h2>
 
+<h3>New Features</h3>
+<ul>
+  <li>Report Ant task issues a warning if source files are provided but class
+      files do not contain debug information to collect line numbers
+      (SF #3024486).</li>
+</ul>
+
 <h3>Non-functional Changes</h3>
 <ul>
   <li>Reduce memory footprint for coverage data by 30% (Track #106).</li>
