Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java (revision 0)
@@ -0,0 +1,4 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles;
+
+public class JavaClassWithMultipleInterfaces implements GroovyInterface1, JavaInterface1 {
+}
Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java (revision 0)
@@ -0,0 +1,4 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles;
+
+public interface JavaInterface1 {
+}
Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.groovy
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.groovy (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.groovy (revision 0)
@@ -0,0 +1,5 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles
+
+public interface GroovyInterfaceWithMultipleInterfaces extends GroovyInterface1, JavaInterface1, Runnable {
+
+}
\ No newline at end of file
Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy (revision 0)
@@ -0,0 +1,4 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles
+
+class GroovyClassWithMultipleInterfaces implements GroovyInterface1, JavaInterface1 {
+}
Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy (revision 0)
@@ -0,0 +1,5 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles
+
+public interface GroovyInterface1 {
+
+}
\ No newline at end of file
Index: src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.java
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.java (revision 0)
+++ src/test/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.java (revision 0)
@@ -0,0 +1,4 @@
+package org.codehaus.groovy.tools.groovydoc.testfiles;
+
+public interface JavaInterfaceWithMultipleInterfaces extends GroovyInterface1, JavaInterface1, Runnable {
+}
Index: src/test/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
===================================================================
--- src/test/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java (revision 21075)
+++ src/test/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java (working copy)
@@ -176,9 +176,7 @@
xmlTool.renderToOutput(output, MOCK_DIR);
String domBuilderDoc = output.getText(MOCK_DIR + "/groovy/xml/DOMBuilder.html");
- // TODO reinstate
-// assertTrue(domBuilderDoc.indexOf("BuilderSupport") > 0);
- assertTrue(domBuilderDoc.indexOf("null") > 0);
+ assertTrue(domBuilderDoc.indexOf("BuilderSupport") > 0);
}
public void testExtendsClauseWithSuperClassInTree() throws Exception {
@@ -192,6 +190,44 @@
assertTrue(domBuilderDoc.indexOf("BuilderSupport") > 0);
}
+ public void testInterfaceExtendsClauseWithMultipleInterfaces() throws Exception {
+ List srcList = new ArrayList();
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.groovy");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.java");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java");
+ xmlToolForTests.add(srcList);
+ MockOutputTool output = new MockOutputTool();
+ xmlToolForTests.renderToOutput(output, MOCK_DIR);
+
+ String groovyClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterfaceWithMultipleInterfaces.html");
+ assertTrue(groovyClassDoc.indexOf("JavaInterface1") > 0);
+ assertTrue(groovyClassDoc.indexOf("GroovyInterface1") > 0);
+
+ String javaClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterfaceWithMultipleInterfaces.html");
+ assertTrue(javaClassDoc.indexOf("JavaInterface1") > 0);
+ assertTrue(javaClassDoc.indexOf("GroovyInterface1") > 0);
+ }
+
+ public void testImplementsClauseWithMultipleInterfaces() throws Exception {
+ List srcList = new ArrayList();
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.groovy");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.java");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/GroovyInterface1.groovy");
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/JavaInterface1.java");
+ xmlToolForTests.add(srcList);
+ MockOutputTool output = new MockOutputTool();
+ xmlToolForTests.renderToOutput(output, MOCK_DIR);
+
+ String groovyClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/GroovyClassWithMultipleInterfaces.html");
+ assertTrue(groovyClassDoc.indexOf("JavaInterface1") > 0);
+ assertTrue(groovyClassDoc.indexOf("GroovyInterface1") > 0);
+
+ String javaClassDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/JavaClassWithMultipleInterfaces.html");
+ assertTrue(javaClassDoc.indexOf("JavaInterface1") > 0);
+ assertTrue(javaClassDoc.indexOf("GroovyInterface1") > 0);
+ }
+
public void testDefaultPackage() throws Exception {
List srcList = new ArrayList();
srcList.add("UberTestCaseBugs.java");
@@ -199,9 +235,7 @@
MockOutputTool output = new MockOutputTool();
xmlToolForTests.renderToOutput(output, MOCK_DIR);
String domBuilderDoc = output.getText(MOCK_DIR + "/DefaultPackage/UberTestCaseBugs.html");
- // TODO reinstate
-// assertTrue(domBuilderDoc.indexOf("TestCase") > 0);
- assertTrue(domBuilderDoc.indexOf("null") > 0);
+ assertTrue(domBuilderDoc.indexOf("TestCase") > 0);
}
public void testStaticModifier() throws Exception {
Index: src/main/org/codehaus/groovy/tools/groovydoc/ExternalGroovyClassDoc.java
===================================================================
--- src/main/org/codehaus/groovy/tools/groovydoc/ExternalGroovyClassDoc.java (revision 21075)
+++ src/main/org/codehaus/groovy/tools/groovydoc/ExternalGroovyClassDoc.java (working copy)
@@ -290,7 +290,7 @@
}
public String name() {
- return null;
+ return externalClass.getSimpleName();
}
public void setRawCommentText(String arg0) {
Index: src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDocAssembler.java
===================================================================
--- src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDocAssembler.java (revision 21075)
+++ src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyClassDocAssembler.java (working copy)
@@ -167,8 +167,7 @@
public void visitExtendsClause(GroovySourceAST t, int visit) {
SimpleGroovyClassDoc currentClassDoc = getCurrentClassDoc();
if (visit == OPENING_VISIT) {
- GroovySourceAST superClassNode = t.childOfType(IDENT);
- if (superClassNode != null) {
+ for (GroovySourceAST superClassNode : findTypeNames(t)) {
String superClassName = extractName(superClassNode);
if (currentClassDoc.isInterface()) {
currentClassDoc.addInterfaceName(superClassName);
@@ -182,13 +181,25 @@
@Override
public void visitImplementsClause(GroovySourceAST t, int visit) {
if (visit == OPENING_VISIT) {
- GroovySourceAST classNode = t.childOfType(IDENT);
- if (classNode != null) {
+ for (GroovySourceAST classNode : findTypeNames(t)) {
getCurrentClassDoc().addInterfaceName(extractName(classNode));
}
}
}
+ private List findTypeNames(GroovySourceAST t) {
+ List types = new ArrayList();
+ for (AST child = t.getFirstChild(); child != null; child = child.getNextSibling()) {
+ GroovySourceAST groovySourceAST = (GroovySourceAST) child;
+ if (groovySourceAST.getType() == IDENT) {
+ types.add(groovySourceAST);
+ }else if (groovySourceAST.getType() == TYPE) {
+ types.add(groovySourceAST.childOfType(IDENT));
+ }
+ }
+ return types;
+ }
+
@Override
public void visitCtorIdent(GroovySourceAST t, int visit) {
if (visit == OPENING_VISIT && !insideEnum && !insideAnonymousInnerClass()) {
Index: src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/classLevel/classDocStructuredData.xml
===================================================================
--- src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/classLevel/classDocStructuredData.xml (revision 21075)
+++ src/main/org/codehaus/groovy/tools/groovydoc/gstringTemplates/classLevel/classDocStructuredData.xml (working copy)
@@ -1,6 +1,10 @@
${classDoc.containingPackage().nameWithDots()}
${classDoc.superclass()?.name()}
+ <% for (interfaceDoc in classDoc.interfaces()) { %>
+ ${interfaceDoc.name()}
+<% } %>
+
${classDoc.commentText()}
<% for (constructor in classDoc.constructors()) { %>
Index: src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyDoc.java
===================================================================
--- src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyDoc.java (revision 21075)
+++ src/main/org/codehaus/groovy/tools/groovydoc/SimpleGroovyDoc.java (working copy)
@@ -169,10 +169,10 @@
// Methods from Comparable
public int compareTo(Object that) {
- if (that instanceof SimpleGroovyDoc) {
- return name.compareTo(((SimpleGroovyDoc) that).name);
+ if (that instanceof GroovyDoc) {
+ return name.compareTo(((GroovyDoc) that).name());
} else {
- throw new ClassCastException();
+ throw new ClassCastException(String.format("Cannot compare object of type %s.", that.getClass()));
}
}