diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
index d6e3cdf..f4055e7 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/JavacTurbine.java
@@ -22,6 +22,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.devtools.build.buildjar.javac.JavacOptions;
+import com.google.devtools.build.buildjar.javac.JavacOptions.JavacOptionNormalizer;
 import com.google.devtools.build.buildjar.javac.plugins.dependency.DependencyModule;
 import com.google.devtools.build.buildjar.javac.plugins.dependency.StrictJavaDepsPlugin;
 import com.google.turbine.options.TurbineOptions;
@@ -44,6 +45,8 @@
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
@@ -223,13 +226,27 @@
     this.turbineOptions = turbineOptions;
   }
 
+  /** Throw away all doclint options to leave it disabled, since we don't care about javadoc. */
+  public static final class DoclintOptionNormalizer implements JavacOptionNormalizer {
+
+    @Override
+    public boolean processOption(String option, Iterator<String> remaining) {
+      return option.startsWith("-Xdoclint");
+    }
+
+    @Override
+    public void normalize(List<String> normalized) {}
+  }
+
   /** Creates the compilation javacopts from {@link TurbineOptions}. */
   @VisibleForTesting
   static ImmutableList<String> processJavacopts(TurbineOptions turbineOptions) {
     ImmutableList<String> javacopts =
         JavacOptions.removeBazelSpecificFlags(
             JavacOptions.normalizeOptionsWithNormalizers(
-                turbineOptions.javacOpts(), new JavacOptions.ReleaseOptionNormalizer()));
+                turbineOptions.javacOpts(),
+                new DoclintOptionNormalizer(),
+                new JavacOptions.ReleaseOptionNormalizer()));
 
     ImmutableList.Builder<String> builder = ImmutableList.builder();
     builder.addAll(javacopts);
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
index 985e7cd..800a640 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
@@ -1054,7 +1054,7 @@
   }
 
   @Test
-  public void processorReadsNonexistantFile() throws Exception {
+  public void processorReadsNonexistentFile() throws Exception {
     addSourceLines("Hello.java", "@Deprecated class Hello {}");
     optionsBuilder.addProcessors(ImmutableList.of(NoSuchFileProcessor.class.getName()));
     optionsBuilder.addProcessorPathEntries(HOST_CLASSPATH);
@@ -1446,6 +1446,29 @@
   }
 
   @Test
+  public void noDoclint() throws Exception {
+    addSourceLines(
+        "A.java", //
+        "/** {@link Invalid} **/",
+        "public class A {",
+        "}");
+
+    optionsBuilder.addAllJavacOpts(
+        ImmutableList.of("-source", "8", "-target", "8", "-Xdoclint:reference"));
+    optionsBuilder.addSources(ImmutableList.copyOf(Iterables.transform(sources, TO_STRING)));
+
+    StringWriter output = new StringWriter();
+    Result result;
+    try (JavacTurbine turbine =
+        new JavacTurbine(new PrintWriter(output, true), optionsBuilder.build())) {
+      result = turbine.compile();
+    }
+
+    assertThat(output.toString()).isEmpty();
+    assertThat(result).isEqualTo(Result.OK_WITH_REDUCED_CLASSPATH);
+  }
+
+  @Test
   public void processJavacopts_useSourceByDefault() {
     TurbineOptions options = TurbineOptions.builder().setOutput("/out").setTempDir("/tmp").build();
     ImmutableList<String> javacopts = JavacTurbine.processJavacopts(options);
@@ -1479,6 +1502,19 @@
   }
 
   @Test
+  public void processJavacopts_filtersDoclint() {
+    TurbineOptions options =
+        TurbineOptions.builder()
+            .setOutput("/out")
+            .setTempDir("/tmp")
+            .addAllJavacOpts(ImmutableList.of("-Xmyopt", "-Xdoclint:reference"))
+            .build();
+    ImmutableList<String> javacopts = JavacTurbine.processJavacopts(options);
+    assertThat(javacopts).contains("-Xmyopt");
+    assertThat(javacopts).doesNotContain("-Xdoclint:reference");
+  }
+
+  @Test
   public void testManifestEntries() throws Exception {
     optionsBuilder.setTargetLabel("//foo:foo");
     optionsBuilder.setInjectingRuleKind("foo_library");
