GithubHelp home page GithubHelp logo

lightbend / genjavadoc Goto Github PK

View Code? Open in Web Editor NEW
58.0 16.0 32.0 567 KB

A compiler plugin for generating doc’able Java source from Scala source

License: Other

Scala 68.21% Java 30.89% Perl 0.91%
sbt-plugin scaladoc supported javadoc scala

genjavadoc's Introduction

This project’s goal is the creation of real Javadoc for Scala projects. While Scaladoc—the native API documentation format of Scala—has several benefits over Javadoc, Java programmers are very much used to having access to API documentation in a syntax matching their programming language of choice. Another motivating factor may be that javadoc-JARs are supported within IDE, e.g. showing tooltip help texts.

How to Use It

GenJavadoc is a Scala compiler plugin which emits structurally equivalent Java code for all Scala sources of a project, keeping the Scaladoc comments (with a few format adaptions). Integration into an SBT build is quite simple:

lazy val Javadoc = config("genjavadoc") extend Compile

lazy val javadocSettings = inConfig(Javadoc)(Defaults.configSettings) ++ Seq(
  addCompilerPlugin("com.typesafe.genjavadoc" %% "genjavadoc-plugin" % "0.18" cross CrossVersion.full),
  scalacOptions += s"-P:genjavadoc:out=${target.value}/java",
  Compile / packageDoc := (Javadoc / packageDoc).value,
  Javadoc / sources :=
    (target.value / "java" ** "*.java").get ++
    (Compile / sources).value.filter(_.getName.endsWith(".java")),
  Javadoc / javacOptions := Seq(),
  Javadoc / packageDoc / artifactName := ((sv, mod, art) =>
    "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar")
)

To make it work, you must add the config and the settings to your project. One way to do this is to place the following line in your build.sbt file:

lazy val root = project.in(file(".")).configs(Javadoc).settings(javadocSettings: _*)

Adding javadocSettings to a Project this way will replace the packaging of the API docs to use the Javadoc instead of the Scaladoc (i.e. the XY-javadoc.jar will then contain Javadoc). The Scaladoc can still be generated using the normal doc task, whereas the Javadoc can now be generated using genjavadoc:doc.

GenJavadoc can also be integrated into a Maven build (inspired by this answer on StackOverflow):

<profile>
  <id>javadoc</id>
  <build>
    <plugins>
      <plugin>
        <groupId>net.alchim31.maven</groupId>
        <artifactId>scala-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>doc</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>compile</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <args>
            <arg>-P:genjavadoc:out=${project.build.directory}/genjavadoc</arg>
          </args>
          <compilerPlugins>
            <compilerPlugin>
              <groupId>com.typesafe.genjavadoc</groupId>
              <artifactId>genjavadoc-plugin_${scala.binary.full.version}</artifactId>
              <version>0.11</version>
            </compilerPlugin>
          </compilerPlugins>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>${project.build.directory}/genjavadoc</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.9</version>
        <configuration>
          <minmemory>64m</minmemory>
          <maxmemory>2g</maxmemory>
          <outputDirectory>${project.build.directory}</outputDirectory>
          <detectLinks>true</detectLinks>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

You can integrate genjavadoc with gradle build:

apply plugin: 'scala'

configurations {
  scalaCompilerPlugin
}

dependencies {
  // ...
  scalaCompilerPlugin "com.typesafe.genjavadoc:genjavadoc-plugin_${scalaFullVersion}:0.13"

}

tasks.withType(ScalaCompile) {
  scalaCompileOptions.with {
    additionalParameters = [
        "-Xplugin:" + configurations.scalaCompilerPlugin.asPath,
        "-P:genjavadoc:out=$buildDir/generated/java".toString()
    ]
  }
}

tasks.withType(Javadoc) {
  dependsOn("compileScala")
  source = [sourceSets.main.allJava, "$buildDir/generated/java"]
}

Translation of Scaladoc comments

Comments found within the Scala sources are transferred to the corresponding Java sources including some modifications. These are necessary since Scaladoc supports different mark-up elements than Javadoc. The modifications are:

  • {{{ ... }}} is translated to <pre><code> ... </code></pre>, where within the pre-formatted text the following are represented by their HTML entities: @, <, >
  • typographic quotes (double as well as single) are translated to &rdquo; and friends
  • @see [[ ... ]] is translated to @see ..., but only if on a line on its own
  • [[ ... ]] is translated to {@link ... }
  • <p> tokens are placed between paragraphs, collapsing empty lines beforehand
  • words between backticks are placed between <code> ... </code> instead

Additional transformations

Some additional transformations are applied in order to make the generated Javadoc more useful:

  • if a Scala method or class was marked @scala.annotation.deprecated an equivalent Javadoc @deprecated comment line will be inserted to the resulting Javadoc comment.

How it Works

Scaladoc generation is done by a special variant of the Scala compiler, which can in principle emit different output, but the syntax parsed by the Scaladoc code is the Scala one: the compiler phases which adapt the AST to be more Java-like (to emit JVM byte-code in the end) are not run. On the other hand source comments cannot easily be associated with method signatures parsed from class files, and generating corresponding Java code to be fed into the javadoc tool is also no small task.

The approach taken here is to use the Scala compiler’s support as far as possible and then generate mostly valid Java code corresponding to the AST—but only the class and method structur without implementations. Since the Javadoc shall contain generic type information, and shall also not be confused by artifacts of Scala’s encoding of traits and other things, the AST must be inspected before the “erasure” phase; due to Java’s flat method parameter lists the other bound on where to hook into the transformation is that it should be after the “uncurry” phase (which transforms def f(x: Int)(s: String) into def f(x: int, s: String)). Luckily there is a gap between those two phases which is just wide enough to squeeze some code in.

One drawback of this choice is that the flattening of classes and companion objects or the mixing-in of method implementations from traits into derived classes happens much later in the transformation pipeline, meaning that the compiler plugin has to do that transformation itself; for this it has the advantage that it does not need to be 100% Scala-correct since the goal is just to document method signatures, not to implement all the intricacies of access widening and so on.

Known Limitations

  • Many Scaladoc tags and features are simply not supported by the javadoc tool and genjavadoc does not reimplement them:

    • @note, @example, @group etc. do not work and are errors in Javadoc 8, so they cannot be used
    • links to methods that use the overload disambiguation syntax will not work
  • Classes and objects nested inside nested objects are emitted by Scalac in such a form that there is no valid Java syntax to produce the same binary names. This is due to differences in name mangling (where javac inserts more dollar signs than scalac does). This means that while Javadoc is generated for these (in order to guarantee that Javadoc will find all the types it needs) the precise names are neither correct nor usable in practice.

  • The Java code produced by genjavadoc is 'just correct enough' to be understood by javadoc. It is not a goal of this project to emit correct Java code. On recent version of the JDK you will have to pass the --ignore-source-errors flag to make the javadoc tool accept our output.

Reporting Bugs

If you find errors in the generation process or have suggestions on how to improve the quality of the emitted Javadoc, please report issues on this GitHub repo’s issue tracker.

Sponsored by Lightbend

Originally responsible: Dr. Roland Kuhn (@rkuhn)

Community maintenance is overseen by Lightbend staff.

Pull requests are very welcome. Thanks in advance!

genjavadoc's People

Contributors

2m avatar adriaanm avatar andreatp avatar bantonsson avatar baol avatar dotta avatar dwijnand avatar gmethvin avatar ignasi35 avatar ilx avatar jodersky avatar jonas avatar jrudolph avatar ktoso avatar lrytz avatar manuzhang avatar marcospereira avatar patriknw avatar pvorb avatar raboof avatar retronym avatar rkuhn avatar scala-steward avatar sethtisue avatar stevedlawrence avatar szeiger avatar wangyum avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

genjavadoc's Issues

Cannot find symbol: Scala.Null warnings

Whenever I run JavaDoc on genjavadoc-generated source, I get a bunch of error messages in the console that look like this:

error: cannot find symbol
  public  scala.Null file () { throw new RuntimeException(); }
               ^
  symbol:   class Null
  location: package scala

This issue is obviously not high-priority - everything still works fine; I'd just rather not get warning spam in the console.

I'm using Scala 2.11.2, and I'm running genjavadoc from a Gradle build script - I can post the Gradle build script if you like.

Links generated by genjavadoc are broken

I recently switched from using JavaDoc {@link ...} syntax in my ScalaDoc comments to using ScalaDoc [[..]] syntax, after learning that genjavadoc transforms ScalaDoc links into JavaDoc links. However, now, when I look at the JavaDoc html pages, the links appear as text rather than as links, and when generating JavaDoc, the JavaDoc tool prints a lot of warning - Tag @link: reference not found: warnings to the console.

I'm assuming that this is because the generated sources don't import the linked classes, is that correct?

I'm using Scala 2.11.2, and I'm running genjavadoc from a Gradle build script - I can post the Gradle build script if you like.

javadoc 8 errors on some translated scaladoc elements

I'm trying to get javadoc 8 to be happy with the output of genjavadoc for Apache Spark. A lot works; I've noticed a few issues though. javadoc 8 treats a lot of stuff as errors now.

For example, @example and @note and @group tags are valid scaladoc, but not javadoc. These get passed through as-is to generated Java code, and javadoc rejects them. Can the tags just be ignored, but their text preserved as straight javadoc? the @group tags are probably ignorable.

I also find that @param tags on Scala class declarations, which intend to document constructor params, get translated as @param tags for class javadoc. This is only valid for generic types. Ideally these would be translated as javadoc for the generated constructors?

NPE on scala 2.10 for version 0.8

uncaught exception during compilation: java.lang.NullPointerException

java.lang.NullPointerException
    at com.typesafe.genjavadoc.GenJavaDocPlugin.outputBase$lzycompute(Plugin.scala:47)
    at com.typesafe.genjavadoc.GenJavaDocPlugin.outputBase(Plugin.scala:47)
    at com.typesafe.genjavadoc.GenJavaDocPlugin$MyComponent$GenJavaDocTransformer.<init>(Plugin.scala:68)
    at com.typesafe.genjavadoc.GenJavaDocPlugin$MyComponent$.newTransformer(Plugin.scala:63)
    at com.typesafe.genjavadoc.GenJavaDocPlugin$MyComponent$.newTransformer(Plugin.scala:51)
    at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
    at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:464)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
    at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
    at scala.collection.Iterator$class.foreach(Iterator.scala:727)
    at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
    at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:431)
    at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1583)
    at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1557)
    at scala.tools.nsc.Global$Run.compileSources(Global.scala:1553)
    at scala.tools.nsc.Global$Run.compile(Global.scala:1662)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:123)
    at xsbt.CachedCompiler0.run(CompilerInterface.scala:99)

Works fine on 2.11

verify documented signatures

emit dummy return statements to make generated code compilable; then compare javap output between scalac and javac class files

NPE in getFlags

[error] java.lang.NullPointerException
[error]     at com.sun.tools.javadoc.ClassDocImpl.getFlags(ClassDocImpl.java:125)
[error]     at com.sun.tools.javadoc.ClassDocImpl.isAnnotationType(ClassDocImpl.java:136)
[error]     at com.sun.tools.javadoc.JavadocMemberEnter.isAnnotationTypeElement(JavadocMemberEnter.java:90)
[error]     at com.sun.tools.javadoc.JavadocMemberEnter.visitMethodDef(JavadocMemberEnter.java:72)
[error]     at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:653)
[error]     at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:400)
[error]     at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:412)
[error]     at com.sun.tools.javac.comp.MemberEnter.finishClass(MemberEnter.java:422)
[error]     at com.sun.tools.javac.comp.MemberEnter.finish(MemberEnter.java:1007)
[error]     at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:974)
[error]     at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
[error]     at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:782)
[error]     at com.sun.tools.javac.comp.Enter.complete(Enter.java:481)
[error]     at com.sun.tools.javac.comp.Enter.main(Enter.java:459)
[error]     at com.sun.tools.javadoc.JavadocEnter.main(JavadocEnter.java:71)
[error]     at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:180)
[error]     at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:364)
[error]     at com.sun.tools.javadoc.Start.begin(Start.java:162)
[error]     at com.sun.tools.javadoc.Main.execute(Main.java:59)
[error]     at com.sun.tools.javadoc.Main.main(Main.java:49)

observed with ReliableProxy.DebugLogging in this commit

Is (undocumented) needed?

In the java8 fixes the fabricated (undocumented) were introduced. Are they necessary, or is it only a lint warning?

I think it looks very unprofessional to add that stuff. It's not wrong to not write a comment for a parameter. It might be explained in the description of the method, or it might be obvious from the name what it is.

If it is a warning only, the default value generating this should be false.

genjavadoc should be plugged into scaladoc, not scalac

I don't know if this is possible, but given the overhead of running genjavadoc on every compile (which I don't know much about, but it's enough to warrant the Akka team having it turned off by default), then it seems plugging in to scalac is not the right thing to do. Rather, it would make a lot more sense to plug into scaladoc, because your most likely to want to generate the javadoc when you run scaladac. Theoretically, since scaladoc uses scalac, this should be possible.

Using genjavadoc with scala2.8

  1. We are using scala 2.8 and I would like to know if genjavadoc will work?
  2. The readme file provides a code snippet to make genjavadoc to work with sbt. I am not sure where to add this in my sbt project.

adding the compiler plugin changes the name of some private fields in generated code

the following files in the akka build changed by introducing the genjavadoc-plugin:

akka-actor/target/classes akka.routing.RoutedActorCell$$anonfun$removeRoutees$1$$anonfun$apply$1
akka-actor/target/classes akka.util.ByteStringBuilder$$anonfun$putInt$1
akka-actor/target/classes akka.util.ByteStringBuilder$$anonfun$putLong$1
akka-cluster/target/classes akka.cluster.StandardMetrics$Cpu$$anonfun$5
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$expectMsgAllOf_internal$1$$anonfun$apply$1
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$expectMsgAllOf_internal$1$$anonfun$apply$2
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$expectMsgAllOf_internal$2$$anonfun$apply$3
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$expectMsgAllOf_internal$2$$anonfun$apply$4
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllClassOf$1$$anonfun$apply$5
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllClassOf$1$$anonfun$apply$6
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllClassOf$2$$anonfun$apply$7
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllClassOf$2$$anonfun$apply$8
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllConformingOf$1$$anonfun$apply$10
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllConformingOf$1$$anonfun$apply$9
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllConformingOf$2$$anonfun$apply$11
akka-testkit/target/classes akka.testkit.TestKitBase$$anonfun$internalExpectMsgAllConformingOf$2$$anonfun$apply$12

an example of the change:

   @SerialVersionUID(0) final <synthetic> class $anonfun$apply$11 extends runtime.AbstractFunction0 with Serializable {
-    final def apply(): String = "found non-matching object ".+($anonfun$apply$11.this.x$22);
+    final def apply(): String = "found non-matching object ".+($anonfun$apply$11.this.x$28);
     final <bridge> def apply(): Object = $anonfun$apply$11.this.apply();
-    <synthetic> <paramaccessor> private[this] val x$22: Object = _;
-    def <init>($outer: anonymous class $anonfun$internalExpectMsgAllConformingOf$2, x$22: Object): anonymous class $anonfun$apply$11 = {
-      $anonfun$apply$11.this.x$22 = x$22;
+    <synthetic> <paramaccessor> private[this] val x$28: Object = _;
+    def <init>($outer: anonymous class $anonfun$internalExpectMsgAllConformingOf$2, x$28: Object): anonymous class $anonfun$apply$11 = {
+      $anonfun$apply$11.this.x$28 = x$28;
       $anonfun$apply$11.super.<init>();
       ()
     }

javadoc NPE without stack trace

It looks like JDK8 javadoc has some problem with the resulting Java sources from compiling akka-actor, but this seems to be a JDK issue rather than a genjavadoc issue (since JDK6 and 7 work just fine).

Static forwarders missing for `object` mixins

For this code

trait PartOfObject1 {
  def f1(): String = ???
}
trait PartOfObject2 {
  def f2(): String = ???
}
object BigModule extends PartOfObject1 with PartOfObject2 {
  def f3(): Int = ???
}

the plugin generates this java file:

public  class BigModule implements PartOfObject1, PartOfObject2 {
  static public  int f3 () { throw new RuntimeException(); }
}

It should also contain forwarders for methods from the mixed-in traits.

NPE for trait in object

ReliableProxy.DebugLogging trait in akka-contrib cause NPE:

[error] java.lang.NullPointerException
[error]     at com.sun.tools.javadoc.ClassDocImpl.getFlags(ClassDocImpl.java:125)
[error]     at com.sun.tools.javadoc.ClassDocImpl.isAnnotationType(ClassDocImpl.java:136)
[error]     at com.sun.tools.javadoc.JavadocMemberEnter.isAnnotationTypeElement(JavadocMemberEnter.java:90)
[error]     at com.sun.tools.javadoc.JavadocMemberEnter.visitMethodDef(JavadocMemberEnter.java:72)
[error]     at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:653)
[error]     at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:400)
[error]     at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:412)
[error]     at com.sun.tools.javac.comp.MemberEnter.finishClass(MemberEnter.java:422)
[error]     at com.sun.tools.javac.comp.MemberEnter.finish(MemberEnter.java:1007)
[error]     at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:974)
[error]     at com.sun.tools.javac.code.Symbol.complete(Symbol.java:400)
[error]     at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:782)
[error]     at com.sun.tools.javac.comp.Enter.complete(Enter.java:481)
[error]     at com.sun.tools.javac.comp.Enter.main(Enter.java:459)
[error]     at com.sun.tools.javadoc.JavadocEnter.main(JavadocEnter.java:71)
[error]     at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:180)
[error]     at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:364)
[error]     at com.sun.tools.javadoc.Start.begin(Start.java:162)
[error]     at com.sun.tools.javadoc.Main.execute(Main.java:59)
[error]     at com.sun.tools.javadoc.Main.main(Main.java:49)

The workaround can be seen here: akka/akka#1947

'File Not Found Exception'

I'm creating a scala project https://github.com/phil-rice/cddcore. There is a branch called JavadocCompilerException that holds the code that I'm raising the issue over.

When I follow the instructions given in http://www.scala-sbt.org/release/docs/Howto/scaladoc.html, I get an error message which is loads of source code followed by:
[error] uncaught exception during compilation: java.io.FileNotFoundException
[error] C:\Users\Phil\git\cddcore\constraint\target\java\LatestLens.java (The filename, directory name or volume label syntax is incorrect)
[error] two errors found
error Compilation failed
[error] Total time: 5 s, completed 10-Nov-2013 20:23:06

If this was a normal scala thing, I'd be downloading the source code, putting in breakpoints and looking at stuff. But I've looked at the compiler code before, and it's very scary!

I have here a zip of the offending code in case you have problems with the github:: https://www.dropbox.com/s/rsaxt6u4t3lj2ey/cddcore.zip
SBT in the root directory should work. (If you remove the javadocsettings from project/build.scala everything works nicely).

For your information:
I am using macros in this code, but the LatestLens isn't part of the macro code.

Shorten links

Is it possible to automatically shorten the links, i.e. not include all the types? Links like this are rather insane: start(java.lang.String, scala.Option<akka.actor.Props>, scala.Option<java.lang.String>, boolean, scala.PartialFunction<java.lang.Object, scala.Tuple2<java.lang.String, java.lang.Object>>, scala.Function1<java.lang.Object, java.lang.String>, akka.cluster.sharding.ShardCoordinator.ShardAllocationStrategy)

javadoc for java-compatible varargs methods (generated with @varargs)

The javadoc is generated only for Scala-flavoured varargs method (the one with Seq[T]). There is no entry for a method generated with Java-compatible varargs.

For instance this Scala source:

package test

import scala.annotation.varargs

class MyTest {

    /**
     * A default hello
     */
    @varargs
    def hello(xs: String*) = {
    }
}

is transformed into:

package test;
public  class MyTest {
  // not preceding
  public   MyTest () { throw new RuntimeException(); }
  /**
   * A default hello
   */
  public  void hello (scala.collection.Seq<java.lang.String> xs) { throw new RuntimeException(); }
}

which is missing the following declaration:

 /**
   * A default hello
   */
  public  void hello (java.lang.String... xs) { throw new RuntimeException(); }

Link warnings

I think the scaladoc links doesn't include full package name.

[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/SupervisorStrategy$.java:42: warning - Tag @link: reference not found: Decider
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/SupervisorStrategy.java:80: warning - Tag @link: reference not found: Decider
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/IO.java:451: warning - Tag @link: reference not found: akka.actor.IO.EOF
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/dsl/Inbox.java:78: warning - Tag @link: reference not found: akka.actor.dsl.Inbox!.Inbox!.receive
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/dsl/Inbox.java:78: warning - Tag @link: reference not found: akka.actor.dsl.Inbox!.Inbox!.select
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/io/Tcp.java:493: warning - Tag @link: reference not found: Abort
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/io/Tcp.java:498: warning - Tag @link: reference not found: ConfirmedClose
[warn] /Users/patrik/dev/akka/akka-actor/target/java/akka/actor/ActorSystem.java:191: warning - Tag @link: reference not found: ActorSystem.eventStream

Broken code for nested objects

If you add this to the test the generated code is broken.

Some of the other changes introduced for akka-http might be unnecessary if this is fixed.

diff --git a/tests/src/test/scala/scala/javadoc/test.scala b/tests/src/test/scala/scala/javadoc/test.scala
index 8ab6ba3..633f3b9 100644
--- a/tests/src/test/scala/scala/javadoc/test.scala
+++ b/tests/src/test/scala/scala/javadoc/test.scala
@@ -150,6 +150,11 @@ class A {
      * def A.D.math
      */
     def math = 0l
+
+    /**
+     * And a nested object.
+     */
+    object E
   }
 }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.