<html devsite>
<head>
  <meta name="project_path" value="/_project.yaml">
  <meta name="book_path" value="/versions/6.1.0/_book.yaml">
</head>
<body>

<h1 class="page-title" id="modules.java_annotation_processing">java_annotation_processing</h1>

<!-- {% raw %} -->

Information about jars that are a result of annotation processing for a Java rule.

<h2>Members</h2>
<ul>
    <li>
    <a href="#class_jar">class_jar</a>
  </li>
      <li>
    <a href="#enabled">enabled</a>
  </li>
      <li>
    <a href="#processor_classnames">processor_classnames</a>
  </li>
      <li>
    <a href="#processor_classpath">processor_classpath</a>
  </li>
      <li>
    <a href="#source_jar">source_jar</a>
  </li>
      <li>
    <a href="#transitive_class_jars">transitive_class_jars</a>
  </li>
      <li>
    <a href="#transitive_source_jars">transitive_source_jars</a>
  </li>
  </ul>

      <h2 id="class_jar">class_jar</h2>
        <p><pre class="rule-signature"><a class="anchor" href="File.html">File</a> java_annotation_processing.class_jar</pre></p>

    Deprecated: Please use <code>JavaInfo.java_outputs.generated_class_jar</code> instead.

         May return <code>None</code>.

        <h2 id="enabled">enabled</h2>
        <p><pre class="rule-signature"><a class="anchor" href="bool.html">bool</a> java_annotation_processing.enabled</pre></p>

    Deprecated. Returns true if annotation processing was applied on this target.


        <h2 id="processor_classnames">processor_classnames</h2>
        <p><pre class="rule-signature"><a class="anchor" href="list.html">list</a> java_annotation_processing.processor_classnames</pre></p>

    Deprecated: Please use <code>JavaInfo.plugins</code> instead. Returns class names of annotation processors applied to this rule.


        <h2 id="processor_classpath">processor_classpath</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> java_annotation_processing.processor_classpath</pre></p>

    Deprecated: Please use <code>JavaInfo.plugins</code> instead. Returns a classpath of annotation processors applied to this rule.


        <h2 id="source_jar">source_jar</h2>
        <p><pre class="rule-signature"><a class="anchor" href="File.html">File</a> java_annotation_processing.source_jar</pre></p>

    Deprecated: Please use <code>JavaInfo.java_outputs.generated_source_jar</code> instead.

         May return <code>None</code>.

        <h2 id="transitive_class_jars">transitive_class_jars</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> java_annotation_processing.transitive_class_jars</pre></p>

    Deprecated. Returns a transitive set of class file jars resulting from annotation processing of this rule and its dependencies.


        <h2 id="transitive_source_jars">transitive_source_jars</h2>
        <p><pre class="rule-signature"><a class="anchor" href="depset.html">depset</a> java_annotation_processing.transitive_source_jars</pre></p>

    Deprecated. Returns a transitive set of source archives resulting from annotation processing of this rule and its dependencies.



</body>
</html>

<!-- {% endraw %} -->
